【问题标题】:How to call spring api from frontend in kubernetes如何从 kubernetes 的前端调用 spring api
【发布时间】:2018-11-07 05:59:05
【问题描述】:

我正在尝试创建一个 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-services kubernetes devops-services kubernetes-pod amazon-eks


    【解决方案1】:

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

    http://login:5555/login
    

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

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

    也如here所述。

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

    【讨论】:

    • 我改变了你提到的网址,但错误是一样的。我是否应该共享其他内容,例如 deployment.yaml 文件等。
    • 是的,您从哪里调用 API?
    • 请参考链接:) : docs.google.com/document/d/…
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-11-05
      • 2021-09-30
      • 2021-09-11
      • 1970-01-01
      • 2015-11-04
      • 2018-04-01
      • 2019-07-03
      • 2017-08-31
      • 2019-07-03
      相关资源
      最近更新 更多