繁体   English   中英

Kubernetes - 使用名称而不是“localhost”在pod中进行容器通信?

[英]Kubernetes - container communication within a pod using names instead of 'localhost'?

来自kubernetes 文档

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

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

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

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

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

然后我通过调用http://srv:3000/ 而不是 http://localhost:3000web访问srv

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM