Kubernetes – 使用名称而不是“localhost”在一个容器中的容器通信?

从kubernetes 文档 :

pod中的应用程序都使用相同的networking名称空间(相同的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中实现相同的行为? 任何方式来指定在豆荚'yamlconfiguration中使用的名称?

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

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

docker-compose部署各个容器,将它们链接在一起,以便他们知道彼此的名称和IP。

Kubernetes中的Pod是相似的,但这不是Pod容纳多个外部服务并将它们连接在一起的目的。

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

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

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

在引擎盖下,一个Pod至less有两个容器: pause容器pipe理Pod的IP,然后是你连接的容器。 这允许容器崩溃,重新启动并在Pod中重新链接,而无需更改IP,从而允许在不涉及调度程序的情况下pipe理容器崩溃,并确保Pod在其生命周期内停留在单个节点上,因此重启速度很快。

如果我们重新安排容器,每次他们崩溃,他们可能会最终在一个不同的主机,路由将不得不更新等…