如何从 kubernetes 的前端调用 spring api

How to call spring api from frontend in kubernetes

我正在尝试创建一个 Kubernetes 应用程序,我在其中为后端(spring 启动微服务)和前端 pod 创建了一个 pod 和服务 负载均衡器服务。

我想知道如何从 Kubernetes 中的前端 pod 调用后端 API?

以下是 运行 服务:

NAME         TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)          AGE       SELECTOR
angular      LoadBalancer   10.100.15.215   a17f17fd2e25011e886100a0e002191e-1613530232.us-east-1.elb.amazonaws.com   4200:30126/TCP   12s       app=angular
kubernetes   ClusterIP      10.100.0.1      <none>                                                                    443/TCP          35m       <none>
login        ClusterIP      10.100.99.52    <none>                                                                    5555/TCP         13m       app=login,tier=backend

我正在从前端调用以下 API,它显示名称未解析错误:

http://login/login

我也尝试过使用集群 IP 调用 API 但失败了。

您的后端服务似乎在 运行 端口 5555 上,因此您必须这样调用您的后端服务:

http://login:5555/login

假设您的前端 pods 在同一个 Kubernetes namespace 上。如果它们在不同的命名空间上,您可以这样调用:

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

也如所述here

请注意,这仅在集群内有效,如果您从集群外的 Web 浏览器访问 Angular 前端,这将不起作用,因为 Web 浏览器不知道在哪里您的后端在集群中。因此,您要么必须使用另一种 LoadBalancer 类型的服务来公开您的后端,要么您可以考虑将 Kubernetes Ingress 与入口控制器一起使用。

您的angular应用程序是否直接访问登录服务?如果是这种情况,您将无法通过是正常的,因为登录服务正在使用 ClusterIP。这意味着,IP 仅在集群内。您可以像为 "angular" 应用程序一样使用 LoadBalancer 类型。