如果我有2个 pods ,是否可以在不创建和使用任何其他资源的情况下彼此对话?
这两种情况都存在问题-如果它们是在相同的 namespace 中还是在不同的 namespace 中。
是的他们可以!
假设您没有任何限制 call 的网络策略,则只需知道其DNS名称即可,这是它的工作方式:
群集必须启用DNS 如果 pods 是在同一 namespace 上手动创建的(不是通过部署),则只需调用充当主机的 pods 名称。
在命名空间NS1上运行的 POD1暴露了容器端口31333 在 namespace NS1上运行的 POD2 POD2通过http://POD1:31333 调用POD1
(如果Pod位于不同的 namespace 中),则需要将 namespace 包括在主机中。
在命名空间NS1上运行的 POD1暴露了容器端口31333 在命名空间NS2上运行的 POD2 POD2通过http://POD1.NS1:31333 调用POD1
(如果Pod是由部署创建的,它的名称是动态的,很难断言),在这种情况下,您需要一个服务来使用通用名称将Pod公开给其他人(该服务)
部署到 namespace NS1的 DEPLOYMENT1将创建具有以下格式的Pod,即deploymentname-hash(示例:DEPLOYMENT1-f82hsh) DEPLOYMENT1-f82hsh是由部署创建的Pod,并且在命名空间NS1上运行,创建后暴露了容器端口31333 在命名空间NS2上运行的 POD2 POD2可以通过http://DEPLOYMENT1-f82hsh.NS1:31333调用DEPLOYMENT1-f82hsh,但是由于名称是动态的,因此随时可以更改为其他名称并破坏POD2 解决方案是部署服务SVC1,可将请求转发到DEPLOYMENT1 pods POD2然后调用http://SVC1:31333,它将把 call 转发到DEPLOYMENT1-f82hsh或DEPLOYMENT1中可用的任何Pod。
上面的方案假定您尚未设置主机名,也未在Pod中设置子域,并且使用默认配置。
在更高级的方案中,您还可以使用群集dns后缀来调用这些服务。以下文档详细介绍了所有内容
https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/