【问题标题】:Cannot connect frontend app{Angular} to Backend{SpringBoot} in kubernetes无法在 kubernetes 中将前端应用程序 {Angular} 连接到后端 {SpringBoot}
【发布时间】:2019-05-28 15:59:02
【问题描述】:

我正在尝试在 Kubernetes 集群中将我的 angular+java 应用程序容器化。我的 k8 集群中有一个前端部署和一个后端部署。我的数据库在 AWS{RDS} 中。但是我很困惑我应该在我的前端代码中提供什么 API-URL,以便它可以连接到我在 k8 集群中的后端应用程序。 例如:- 在本地系统中,我在前端代码中使用了类似 {localhost:8080/api/customers} 的东西,但是在 Kubernetes 集群中部署时我应该将其更改为什么。

我有一个 Kubernetes 集群设置,有 1 个主节点和 2 个从节点,我创建了我的后端应用程序的部署并通过集群 Ip 公开它,然后我在我的前端应用程序中提供了这个集群 IP 和端口。 之后,我将图像推送到 docker hub,然后为它创建了一个 k8 部署,但它仍然无法正常工作。

我的主要问题是我应该在我的前端应用程序目标 URL 中提到什么 URL 和端口,以便它可以找到我的 java API。

【问题讨论】:

  • 请在此处发布您的代码,以防您需要社区的任何帮助。没有代码,很难说出缺少什么。

标签: amazon-web-services spring-boot kubernetes angular6


【解决方案1】:

前端 Angular 应用程序在用户的浏览器中运行。这在 kubernetes 集群之外,因此您不能使用 kubernetes 服务名称作为 api 端点。 您需要从 kubernetes 外部访问 spring boot api,通常使用入口或负载均衡器。您在 Angular 应用程序中使用此外部 ip 或主机名作为 api url。

【讨论】:

  • 太棒了!请接受答案,可见问题已解决。
【解决方案2】:

如果您的两个应用程序在同一个 kubernetes 集群中运行,那么您必须像这样调用后端服务:例如 svcname:port

http://login:8080/login

这假设您的前端的 pod 位于同一个 Kubernetes 命名空间中。如果它们位于不同的命名空间中,您可以这样调用:

http://login.<namespace>.svc.cluster.local:5555/login

【讨论】:

  • 感谢您的提醒。它与负载均衡器一起使用
  • 是的,负载均衡器肯定会工作,但不推荐
  • 这将永远无法在浏览器中运行,因为它不了解 Kubernetes ...
【解决方案3】:

将我的后端服务暴露给负载均衡器,而不是在我的前端应用程序中使用该负载均衡器端点对我​​有用。

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2021-01-18
    • 2020-06-16
    • 2021-04-24
    • 2023-03-14
    • 2021-03-02
    相关资源
    最近更新 更多