6

允许在相同/不同命名空间中运行的两个 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 通信,但反向通信失败。

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

4

2 回答 2

16

默认情况下,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→ 一组 pod A
  • 命名空间ns-b:服务svc-b→ 一组 pod B

然后,A 组的 pod 可以通过以下请求到达 B 组的 pod:

svc-b.ns-b.svc.cluster.local
于 2019-09-19T15:00:52.170 回答
2

您可以将 Pod 放在Services后面,并使用Service DNS进行通信。调用以service-name允许同一命名空间中的 Pod 进行通信。调用以service-name.namespace允许不同命名空间中的 Pod 进行通信。

于 2019-09-19T13:46:22.563 回答