如果我有2个pod,是否有办法让它们在不创建和使用任何其他资源的情况下相互交谈?这两种情况都有问题--它们是在同一个名称空间还是在不同的名称空间中。
gupuwyp21#
不,他们可以!假设您没有任何网络策略限制调用,它只需要知道它的DNS名称,这是它的工作原理:
上述场景假设您尚未设置主机名和Pod中的子域,并且正在使用默认配置。在更高级的场景中,你也可以使用集群dns后缀来调用这些服务。
ojsjcaue2#
我会回答是的你的问题...有多个问题说话的服务一样,一个shreeprakash给你,同样可以适用于一个吊舱。这里是另一个问题的关系:2个Kubernetes pod在不知道暴露地址的情况下进行通信这回答了您的问题,因为您应该能够对PODNAME.PODNAMESPACE:PORT执行相同的操作,并且它应该工作。现在为什么不这样做呢?仅仅是因为pod在创建时有一个随机ID添加到它们的名称中(类似于:nginx-ingress-1234456),如果它崩溃了,get重新创建的名称将不一样。这适用于无状态应用程序,您可以在只有一个pod的有状态状态中推导出pod的名称...这就是为什么要使用服务来使定位pod变得更容易,因为它们的名称是您在创建时声明的名称。希望这个有用。
PODNAME.PODNAMESPACE:PORT
w6lpcovy3#
调用另一个pod的唯一方法是使用它的IP地址。根据K8s官方文档,只有一个pod DNS解析,它也包括IP地址,例如:172-17-0-3.default.pod.cluster.local因此,解决方案是使用Downward API让pod从环境变量中知道其IP:
172-17-0-3.default.pod.cluster.local
env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP
然后在你的应用程序中(在Pod中运行),你需要以某种方式将这个IP地址传递给其他Pod。
3条答案
按热度按时间gupuwyp21#
不,他们可以!
假设您没有任何网络策略限制调用,它只需要知道它的DNS名称,这是它的工作原理:
上述场景假设您尚未设置主机名和Pod中的子域,并且正在使用默认配置。
在更高级的场景中,你也可以使用集群dns后缀来调用这些服务。
ojsjcaue2#
我会回答是的你的问题...有多个问题说话的服务一样,一个shreeprakash给你,同样可以适用于一个吊舱。
这里是另一个问题的关系:2个Kubernetes pod在不知道暴露地址的情况下进行通信
这回答了您的问题,因为您应该能够对
PODNAME.PODNAMESPACE:PORT
执行相同的操作,并且它应该工作。现在为什么不这样做呢?仅仅是因为pod在创建时有一个随机ID添加到它们的名称中(类似于:nginx-ingress-1234456),如果它崩溃了,get重新创建的名称将不一样。这适用于无状态应用程序,您可以在只有一个pod的有状态状态中推导出pod的名称...
这就是为什么要使用服务来使定位pod变得更容易,因为它们的名称是您在创建时声明的名称。
希望这个有用。
w6lpcovy3#
调用另一个pod的唯一方法是使用它的IP地址。根据K8s官方文档,只有一个pod DNS解析,它也包括IP地址,例如:
172-17-0-3.default.pod.cluster.local
因此,解决方案是使用Downward API让pod从环境变量中知道其IP:
然后在你的应用程序中(在Pod中运行),你需要以某种方式将这个IP地址传递给其他Pod。