【问题标题】:Call a rest api from one pod to another pod in same kubernetes cluster在同一个 kubernetes 集群中从一个 pod 调用一个 rest api 到另一个 pod
【发布时间】:2019-12-16 17:03:58
【问题描述】:

在我的 k8s 集群中,我有两个 pod podA 和 podB。两者都在同一个 k8s 集群中。 pod B 上的微服务是一个 spring boot rest api。 pod A 上的微服务在其 application.yaml 中有 pod B 的 ip 和端口。现在每次 podB 重新创建时,ip 更改都会迫使我们更改 podA 的 application.yml 中的 ip。请提出更好的方法。

我的限制是:我无法更改 podA 的代码。

【问题讨论】:

    标签: spring-boot docker kubernetes


    【解决方案1】:

    这就是service 的用途。使用 postgres 服务:

    kind: Service
    apiVersion: v1
    metadata:
      name: postgres-service
    spec:
      type: ClusterIP
      selector:
        app: postgres
      ports:
        - protocol: TCP
          port: 5432
          targetPort: 5432
    

    您可以在其他 pod 中使用postgres-service,而不是引用该 pod 的 ip 地址。您还拥有 k8s 也为您做一些负载平衡的优势。

    【讨论】:

      【解决方案2】:

      Service 将为访问 Pod 提供一致的 DNS 名称。

      除非您有特定的理由,否则应用程序永远不应直接寻址 Pod(自定义负载平衡是我能想到的,或者 Pod 具有身份的 StatefulSet)。

      apiVersion: v1
      kind: Service
      metadata:
        name: my-service
      spec:
        selector:
          app: MyApp
        ports:
          - protocol: TCP
            port: 80
            targetPort: 9376
      

      然后,您将拥有一致的 DNS 名称来访问与 selector 匹配的任何 Pod:

      my-service.default.svc.cluster.local
      

      【讨论】:

        猜你喜欢
        • 2021-10-16
        • 2023-04-03
        • 2019-04-24
        • 1970-01-01
        • 2020-07-27
        • 2017-12-28
        • 2020-05-04
        • 2020-10-29
        • 1970-01-01
        相关资源
        最近更新 更多