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

Har*_*G V 4 kubernetes kubernetes-networkpolicy kubernetes-service

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

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

wei*_*eld 12

默认情况下,pod 可以通过它们的 IP 地址相互通信,而不管它们在哪个命名空间中。

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

kubectl get pods -o wide --all-namespaces
Run Code Online (Sandbox Code Playgroud)

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

服务还有一个 IP 地址和一个 DNS 名称。服务由一组 pod 支持。服务将请求转发给自己的后备 Pod 之一。

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

<service-name>.<service-namespace>.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)

这可以从集群中的任何地方(不管命名空间)解析为服务的 IP 地址。

例如,如果您有:

  • 命名空间ns-a:服务svc-a?一组豆荚 A
  • 命名空间ns-b:服务svc-b?一组豆荚 B

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

svc-b.ns-b.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)


Ala*_*aye 7

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

  • 这是示例: $curl http://{service_name}.{namespace_name}:{port_number} (3认同)
  • @DarshanaPatel 确保您的服务文件中有标签,这里是示例标签:app.kubernetes.io/name (2认同)