【问题标题】:AKS K8S - access spring-boot app from angular frontend using service nameAKS K8S - 使用服务名称从 Angular 前端访问 spring-boot 应用程序
【发布时间】:2021-02-20 03:21:48
【问题描述】:

我有两个使用 angular 开发的应用程序前端和使用 spring-boot 开发的后端。两个应用都在同一个命名空间中运行。

已经创建了两种服务类型:负载均衡器。

  1. 前端说frontend-app-lb(暴露9001)
  2. 后端说backend-app-lb(暴露9000)。

我能够通过外部 IP 获得响应。使用 curl http://<External-ip>:900[0/1]/

在 Angular 应用程序中,我配置了 environment-prod.ts,baseurl 为 http://<External-ip-of-backend-app-lb>:9000/。在允许 CORS 的情况下,能够访问后端应用程序。

我也知道,如果应用程序在不同的命名空间中运行,我们可以使用 http://<service-name>.<namespace>.svc.cluster.local:port 从不同的命名空间访问应用程序/pod。

如何仅使用 baseurl 中的服务名称(如 http://backend-app-lb:9000)访问在同一命名空间中运行的后端应用程序。 - 这可能吗?

【问题讨论】:

  • 您想从哪里连接?如果backend-app-lb 是服务的名称,您应该能够使用例如从另一个 Pod 中解析此名称。 nslookup backend-app-lb.
  • Connect.from 另一个在同一命名空间中运行的 pod..

标签: angular azure kubernetes azure-aks


【解决方案1】:

我发现,访问 http://backend-app-lb:9000 可能不是一种方法。

其他方法:

方法 #1:使用 Azure 应用程序网关:

  • 将后端服务公开为 LoadBalancer 类型的服务(在我的例子中是部署在 AKS 中的应用程序)。因此配置了应用程序网关(第 7 层)。

    • 说出任何 url /backend-api 连接到后端应用程序。
  • 在前端应用environment.prod.ts中,使用/backend-api作为baseurl连接到后端api。

方法 #2:使用 Nginx 代理

  • 如果前端应用程序是在 Ngnix 服务器上开发的,使用配置我们创建代理并访问后端服务。
  • 参考地址Kubernetes documentation
  • 在这种情况下,后端应用程序可以作为服务公开(它可以是 NodePort 或 LoadBalancer 类型)。

这两种方法在某种程度上使前端应用程序访问后端服务变得简单,并且在构建过程中无需进行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 2020-10-16
    • 2015-05-27
    • 2021-06-22
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2014-02-25
    相关资源
    最近更新 更多