首页 > 解决方案 > 如何从 kubernetes 的前端调用 spring api

问题描述

我正在尝试创建一个 Kubernetes 应用程序,在该应用程序中,我为后端(spring boot 微服务)和前端 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,但失败了。

标签: amazon-web-serviceskubernetesdevops-serviceskubernetes-podamazon-eks

解决方案


看起来您的后端服务正在端口上运行5555,因此您必须像这样调用后端服务:

http://login:5555/login

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

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

也如此所述。

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


推荐阅读