Java Kubernetes使用REST在POD之间进行通信
现在我有一个这样的架构:Java Kubernetes使用REST在POD之间进行通信,java,rest,kubernetes,resttemplate,Java,Rest,Kubernetes,Resttemplate,现在我有一个这样的架构: internet | [ IngressController ] | | [ Ingress A] [ Ingress B] --|-----|-- --|-----|-- [ Service A] [ Service B] | | [ Pod A] [ Pod B] internet
internet
|
[ IngressController ]
| |
[ Ingress A] [ Ingress B]
--|-----|-- --|-----|--
[ Service A] [ Service B]
| |
[ Pod A] [ Pod B]
internet
|
[ IngressController ]
| |
[ Ingress A] [ Ingress B]
--|-----|-- --|-----|--
[ Service A]-[ Service B]
| |
[ Pod A] [ Pod B]
因此,如果服务A
从服务B
请求数据,则它使用的是全名
,例如
ResponseEntity response=restemplate.exchange(host.com/serviceB,HttpMethod.POST,entity,Object.class)代码>
由于它们都在同一个集群中,我将尝试更改架构以改进服务之间的通信。我想象的是这样的:
internet
|
[ IngressController ]
| |
[ Ingress A] [ Ingress B]
--|-----|-- --|-----|--
[ Service A] [ Service B]
| |
[ Pod A] [ Pod B]
internet
|
[ IngressController ]
| |
[ Ingress A] [ Ingress B]
--|-----|-- --|-----|--
[ Service A]-[ Service B]
| |
[ Pod A] [ Pod B]
因此,这些服务只允许通过名称或其他方式相互请求。我只是不知道如何使用REST服务实现这一点
您需要通过它调用服务B
,它应该直接连接,而无需通过入口
要澄清服务A
不与服务B
对话,而是吊舱A
与服务B
对话,吊舱B
与服务A
对话。因此,只要所有pod和服务都在同一个位置,您就可以使用服务名称作为主机名与服务通信,这将解析为服务的内部IP地址,然后将流量转发到pod
如果pod恰好位于不同的名称空间中,您将使用添加到服务中的名称空间名称进行连接:
或.svc.cluster.local
希望有帮助。因此,您的POD A可以通过服务B调用POD B,例如,通过调用,只需确保您的POD和服务公开Web服务器端口即可。还是我误解了这个问题?您是否试图通过A舱直接访问服务B。。。首先,在一个豆荚内用curl或telnet进行测试…谢谢!这对于重定向是如何工作的?假设我有一个静态href链接?@elp,如果你是说来自html,那么它不适用于这个。它托管在Pod中,但在客户端计算机上的浏览器中运行,因此需要通过入口使用外部访问。您只能在集群内执行的服务器端后端代码中使用服务名称进行内部访问。请参阅本节的