首页 文章

Kubernetes - 使用名称而不是'localhost'在容器内进行容器通信?

提问于
浏览
6

来自kubernetes docs

pod中的应用程序都使用相同的网络命名空间(相同的IP和端口空间),因此可以相互“查找”并使用localhost进行通信 .

是否可以使用某些特定于容器的名称而不是 locahost

例如,使用 docker-compose up ,您可以使用服务名称进行通信 . [docs]

所以,如果我的 docker-compose.yml 文件是

version: '2'
services:
  web:
    build: .
    ports:
      - "8000:8000"
  srv:
    build: .
    ports:
      - "3000:3000"

然后我通过调用 http://srv:3000/not http://localhost:3000web 中访问 srv

如何在kubernetes中实现相同的行为?有什么方法可以指定在pods的yaml配置中使用什么名称?

2 回答

  • 3

    localhost 只是网络环回设备的名称(IPv4通常为 127.0.0.1 ,IPv6为 ::1 ) . 这通常在 /etc/hosts 文件中指定 .

    一个pod有自己的IP,因此每个容器内部共享该IP . 如果这些容器应该是独立的(即不需要配置),它们应该都在自己的容器中 . 然后,您可以为每个允许DNS查找的service定义为来自同一名称空间中的pod的"$SERVICENAME",或者来自不同名称空间中的pod的"$SERVICENAME.$NAMESPACE" .

  • 12

    docker-compose 部署单个容器,将它们链接在一起,以便彼此了解彼此的名称和IP .

    Kubernetes中的 Pod 类似,但这不是Pod用于保存多个外部服务并将它们链接在一起的目的 .

    Pod用于必须在同一主机上运行的容器,并且仅在它们之间进行交互 . 容器通过localhost在内部进行通信 .

    大多数 Pods 实际上是一个容器 .

    Pod 使用 Services 与外部通信 . 从本质上讲,Pod看起来好像只是一个容器 .

    在引擎盖下,Pod至少有2个容器: pause 容器管理Pod的IP,然后管理您附加的容器 . 这允许您的容器崩溃,重新启动并在Pod中重新链接而不更改IP,允许在不涉及调度程序的情况下管理容器崩溃,并确保Pod在其生命周期内保持在单个节点上,因此重新启动很快 .

    如果我们在每次崩溃时重新安排的容器,它们可能最终会在不同的主机上运行,路由必须更新等等......

相关问题