允许在相同/不同名称空间中运行的两个Pod(例如Pod A和B)进行通信,而与协议(例如http,https,akka.tcp)无关,并且应用了有效的网络策略。
尝试过的解决方案:
尝试将网络策略同时应用于两个Pod,并且还使用服务名称:“ my-svc.my-namespace.svc.cluster.local”来创建Pod B 与运行服务“ my-svc”的pod A通信,但两者 无法沟通。
还尝试在部署时将Pod A的IP地址和主机映射添加到Pod B中,然后Pod B能够与Pod A通信 但是反向通信失败。
请给我建议一种解决方法。
答案 0 :(得分:1)
您可以将Pod放在Services后面,并使用Service DNS进行交流。调用service-name
允许同一名称空间中的Pod进行通信。调用service-name.namespace
允许不同名称空间中的Pod进行通信。
答案 1 :(得分:1)
默认情况下,pod可以通过其IP地址相互通信,而与它们所在的命名空间无关。
您可以通过以下方式查看每个吊舱的IP地址:
kubectl get pods -o wide --all-namespaces
但是,在群集内进行通信的常规方法是通过服务资源。
服务还具有IP地址和DNS名称。服务由一组Pod提供支持。该服务将请求转发给自己到一个支持容器。
服务的完全限定DNS名称为:
<service-name>.<service-namespace>.svc.cluster.local
这可以从群集中的任何位置(无论名称空间如何)解析为服务的IP地址。
例如,如果您拥有:
ns-a
:服务svc-a
→一组Pod A ns-b
:服务svc-b
→Pod集B 然后,通过请求以下内容,集合A的广告连播可以到达集合B的广告连播:
svc-b.ns-b.svc.cluster.local