一个pod可以直接调用另一个pod吗?

LIv*_*nov 5 kubernetes

如果我有 2 个 Pod,有没有办法让它们在不创建和使用任何其他资源的情况下相互通信?

问题适用于这两种情况 - 如果它们位于相同的名称空间或不同的名称空间中。

Die*_*des 5

是的他们可以!

假设你没有任何网络策略限制调用,它只需要知道它的 DNS 名称,这就是它的工作原理:

  • 集群必须启用 DNS
  • 如果 pod 是在同一名称空间上手动创建的(不是通过部署),则只需调用充当主机的 podname 即可。
  • 如果 Pod 位于不同的命名空间中,则需要将命名空间包含到主机中。
  • 如果 Pod 是由部署创建的,它的名称是动态的,很难预测,在这种情况下,您需要一个服务通过使用通用名称(服务)将 Pod 公开给其他人
    • 部署到命名空间 NS1 的 DEPLOYMENT1 将创建一个具有以下格式的 pod:deploymentname-hash(示例:DEPLOYMENT1-f82hsh)
    • DEPLOYMENT1-f82hsh 是部署创建的 Pod,运行在命名空间 NS1 上,创建时暴露容器端口 31333
    • POD2 运行在命名空间 NS2 上
    • POD2 可以通过http://DEPLOYMENT1-f82hsh.NS1:31333调用 DEPLOYMENT1-f82hsh ,但由于名称是动态的,因此它随时可能更改为其他名称并破坏 POD2
    • 解决方案是部署服务 SVC1,将请求转发到 DEPLOYMENT1 Pod
    • 然后,POD2 调用http://SVC1:31333,它将调用转发到 DEPLOYMENT1-f82hsh 或 DEPLOYMENT1 中可用的任何 pod。

上述场景假设您尚未在 pod 中设置主机名和子域,并且使用默认配置。

在更高级的场景中,您还可以使用集群 dns 后缀来调用这些服务。以下文档更详细地描述了所有内容 https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/