【问题标题】:Microservice calling another microservice in same kubernetes cluster微服务调用同一个 Kubernetes 集群中的另一个微服务
【发布时间】:2020-03-18 01:11:56
【问题描述】:

如果 java/spring boot 微服务 A(部署在自己的容器中并带有自己的 ClusterIP 类型的 Kubernetes 服务)需要向 Java/spring boot 微服务 B(有自己的 ClusterIP 类型的 Kubernetes 服务)发送 REST 请求同一个 Kubernetes 集群,A 确定 B 的 kubernetes 服务 IP 的最佳方法是什么(特别是如果 B 被重新部署)?注意:B 没有 NodePort 或 LoadBalancer 也没有 Ingress 的内部调用。

【问题讨论】:

    标签: java kubernetes service


    【解决方案1】:

    使用服务名称而不是服务 IP。服务 A 可以使用名称服务 B 调用服务 B。 Kubernetes 将负责将 service-B 调用路由到适当的 POD,并在多个 POD 的情况下进行负载平衡。您不必担心重新启动或实际为请求提供服务的 POD。

    【讨论】:

      【解决方案2】:

      在服务 A 的 kubernetes 部署文件的环境变量中保留服务 B 的 URL,当服务 A 中的任务完成后,调用该 URL 以便将请求发送到服务 B。

      是同步通信。

      对于异步通信,您可以使用 kafka,您可以在其中通过 kubernetes 网络发布事件,并让其他微服务根据需要订阅该事件。

      在第一种情况下,您可以执行类似的操作

      - env
        name: service-B-url 
        value: http://service-name:port-number.cluster.svc.local/{uri-path}
      

      最好使用nslookup服务名来获取被调用服务的FQDN

      【讨论】:

        【解决方案3】:

        正确的做法是为B 设置一个Service,并让A 使用该服务的名称访问B。这样,B 将可以被 A 访问,无论其地址如何。

        【讨论】:

          猜你喜欢
          • 2018-03-04
          • 1970-01-01
          • 1970-01-01
          • 2020-04-27
          • 1970-01-01
          • 1970-01-01
          • 2018-12-27
          • 1970-01-01
          • 2022-01-07
          相关资源
          最近更新 更多