使用REST的Pod之间的Kubernetes通信

时间:2019-01-12 14:38:16

标签: java rest kubernetes resttemplate

现在我有了这样的架构:

          internet
             |
   [ IngressController ]
        |          |
   [ Ingress A] [ Ingress B]
   --|-----|--  --|-----|--
   [ Service A] [ Service B]
         |            |
     [ Pod A]     [ Pod B]

因此,如果Service AService B请求数据,则它正在使用full qualified name,例如

  

ResponseEntity<Object> response = restTemplate.exchange(host.com/serviceB, HttpMethod.POST, entity, Object.class);

由于它们都在同一集群中,因此我将尝试更改体系结构以改善服务之间的通信。我想像这样的东西:

          internet
             |
   [ IngressController ]
        |          |
   [ Ingress A] [ Ingress B]
   --|-----|--  --|-----|--
   [ Service A]-[ Service B]
         |            |
     [ Pod A]     [ Pod B]

因此将允许服务仅通过名称或其他名称相互请求。我只是不确定如何使用REST-Services来实现这一点。

1 个答案:

答案 0 :(得分:1)

您需要通过Kubernetes DNS name来调用Service B,它应该直接连接而不经过入口。

为弄清Service A并不与Service B对话,而是Pod AService B对话和Pod BService A对话。因此,只要所有Pod和服务都在同一个Kubernetes namespace中,您就可以将服务名称作为主机名与服务进行通信,它将解析为服务的内部IP地址,然后将流量转发到Pod

如果pod恰好位于不同的命名空间中,则可以使用添加到服务中的命名空间名称进行连接:<service-name>.<namespace-name><service-name>.<namespace-name>.svc.cluster.local

希望有帮助。