现在我有了这样的架构:
internet
|
[ IngressController ]
| |
[ Ingress A] [ Ingress B]
--|-----|-- --|-----|--
[ Service A] [ Service B]
| |
[ Pod A] [ Pod B]
因此,如果Service A
向Service 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
来实现这一点。
答案 0 :(得分:1)
您需要通过Kubernetes DNS name来调用Service B
,它应该直接连接而不经过入口。
为弄清Service A
并不与Service B
对话,而是Pod A
与Service B
对话和Pod B
与Service A
对话。因此,只要所有Pod和服务都在同一个Kubernetes namespace中,您就可以将服务名称作为主机名与服务进行通信,它将解析为服务的内部IP地址,然后将流量转发到Pod
如果pod恰好位于不同的命名空间中,则可以使用添加到服务中的命名空间名称进行连接:<service-name>.<namespace-name>
或<service-name>.<namespace-name>.svc.cluster.local
希望有帮助。