SPA,微服务和Kubernetes(体系结构问题)

时间:2020-06-02 16:53:32

标签: angular kubernetes architecture microservices

首先,我要说的是,我对Kubernetes和Microservices架构总体而言还很陌生。我还要说,与寻求与该技术相关的规范性方法建议相比,这更多是高层架构问题。我想我可以弄清楚实现细节,但是我不确定存在什么机制可以将我带到想要去的地方。

应用概述

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

客户端(前端)

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

服务(后端)

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

问题

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

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

我已经搜索了SO,发现了类似的问题,但是没有人问这个问题。如果有人将我指向一个能启发我的现有问题,我将很乐意删除此问题。

2 个答案:

答案 0 :(得分:3)

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

不,你不应该。

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

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

我可以看看任何可参考的仓库吗?

您可以检查我的玩具项目:

具体来说,这就是您从上面的玩具项目中引用nginx中的后端api的方式(请注意,它使用的是websocket,但您可能并非如此):

    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";
    }

答案 1 :(得分:0)

一种认为是 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

对不起,如果我错过了这里的快速回复! :)