Kubernetes:如何允许在相同/不同命名空间中运行的两个 Pod 进行通信,而不管使用服务名称的协议如何?

2023-12-28

允许在相同/不同命名空间中运行的两个 pod(例如 pod A 和 B)进行通信,而不管协议(例如 http、https、akka.tcp)以及应用的有效网络策略如何。

尝试过的解决方案:

  1. 尝试将网络策略应用于两个 pod,并使用服务名称:“my-svc.my-namespace.svc.cluster.local”来创建 pod B 与运行服务“my-svc”的 pod A 通信,但两者 无法沟通。

  2. 还尝试在部署时在 pod B 中添加 pod A 的 IP 地址和主机映射,然后 pod B 能够与 pod A 通信 但反向通信失败。

请建议我一种解决此问题的方法。


默认情况下,Pod 可以通过 IP 地址相互通信,无论它们位于哪个命名空间。

您可以使用以下命令查看每个 pod 的 IP 地址:

kubectl get pods -o wide --all-namespaces

然而,集群内通信的正常方式是通过服务资源。

服务还有一个 IP 地址和一个 DNS 名称。服务由一组 pod 支持。该服务将对其自身的请求转发到其中一个支持 Pod。

服务的完全限定 DNS 名称是:

<service-name>.<service-namespace>.svc.cluster.local

这可以从集群中的任何位置解析为服务的 IP 地址(无论命名空间如何)。

例如,如果您有:

  • 命名空间ns-a: 服务svc-a→ 吊舱 A 组
  • 命名空间ns-b: 服务svc-b→ 吊舱 B 组

然后,集合 A 的 pod 可以通过发出以下请求来到达集合 B 的 pod:

svc-b.ns-b.svc.cluster.local
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes:如何允许在相同/不同命名空间中运行的两个 Pod 进行通信,而不管使用服务名称的协议如何? 的相关文章

随机推荐