【问题标题】:SPA, Microservices and Kubernetes (Architectural Question)SPA、微服务和 Kubernetes(架构问题)
【发布时间】:2020-06-02 16:53:32
【问题描述】:

首先,我要说的是,我对 Kubernetes 和微服务架构总体来说还很陌生。我还要说,这更像是一个高级架构问题,而不是寻求与技术相关的规范性、操作方法建议。我想我可以弄清楚实现细节,但我不确定有什么机制可以让我到达我想去的地方。

应用概述

在 K8s 集群上运行的简单“电子商务”示例应用程序。 SPA 前端,为 API 提供 .NET Core 服务。

客户端(前端)

Angular SPA 构建并部署到 NGinx 容器中,该容器将 Angular 应用程序作为静态站点提供服务。它在集群上作为LoadBalancer 服务运行。

服务(后端)

在集群中以ClusterIP 运行的两个简单服务。我们称它们为产品和订单。

问题

部署 SPA 时,它会从用户的浏览器而不是容器向服务发出请求。这些服务没有在LoadBalancer 配置中运行,因此它们不会暴露在集群之外。让客户端应用程序与服务对话的最佳实践是什么?具体来说:

  • 我真的需要在外部公开每个微服务吗?
  • 是否有某种代理技术,我可以在其中公开单个 <cluster>/api 端点,路由到适当的后端服务?
  • Angular Universal(又名服务器端渲染)是否可以在这里发挥作用?
  • 我可以查看任何可参考的存储库作为示例吗?

我搜索了 SO 并找到了类似的问题,但没有一个确切地问这个问题。如果有人向我指出一个启发我的现有问题,我会很乐意删除这个问题。

【问题讨论】:

  • 仅供参考,应该是“阐明主题”。我怀疑我们能否找到澄清你的问题:)。
  • 哈!好点子!谢谢。已编辑。

标签: angular kubernetes architecture microservices


【解决方案1】:

我真的需要在外部公开每个微服务吗?

不,你不应该。

是否有某种代理技术,我可以在其中公开单个 /api 端点,路由到适当的后端服务?

标准方式是使用 nginx 作为代理。

我可以查看任何可参考的存储库作为示例吗?

你可以查看我的玩具项目:

具体来说,这是您从上面的玩具项目中引用 nginx 中的后端 api 的方式(注意它使用的是 websockets,您可能不是这种情况):

    location /api {
        proxy_pass http://backend;
        proxy_set_header Host            $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header        X-Forwarded-Proto $http_x_forwarded_proto; # aws version - essentially this sets https schema

        # enable WebSockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

【讨论】:

  • 太棒了,感谢您的参考!自从发布问题以来,我一直在阅读大量关于入口控制器的信息,这似乎是答案。感谢您的回复!
  • 请注意,入口通常位于此 nginx 代理之上一层。虽然可能有不同的架构,但在这个用例中,我通常将其设置为入口 -> 带有 nginx 代理的 ui 容器 -> 后端 api。好处是更好的互操作性,即如果你将代理放在 UI 容器上,你仍然可以在 docker-compose 上运行你的堆栈,而不会有太多麻烦。
  • 我有一个类似的案例,你的回答对我帮助很大,谢谢!
【解决方案2】:

一个想法是 Angular 应用程序,您可以用作静态网站,或者可以部署到另一个 CDP 中......另一个是这样的:

是否有某种代理技术,我可以在其中公开单个 /api 端点,路由到适当的后端服务?

我认为你应该使用kubernetes ingress(默认情况下是nginx,但你可以使用traefik等),这里的重点是你只需要使用负载均衡器服务公开kubernetes ingress,然后你就可以路由你的符合入口规则的流量。

我不知道您在哪里工作...云端或本地。我必须在本地执行此操作,并且我使用 MetalLb 作为负载平衡器。 MetalLb

我建议您观看这个神奇频道的视频:justmeandopensource

nginx ingress with metallb

nginx ingress bare Metal with ha proxy as load balancer

抱歉,如果我错过了这里的快速回复! :)

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 2021-02-10
    • 2021-11-19
    • 2021-05-17
    • 2020-11-14
    • 2020-12-16
    • 2020-05-06
    • 1970-01-01
    相关资源
    最近更新 更多