如果我有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/

    关于kubernetes - 一个Pod可以直接调用另一个Pod吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58298889/

    10-13 05:05