来自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"
然后我通过拨打srv
,不 web
http://srv:3000/
内访问http://localhost:3000
如何在kubernetes中实现相同的行为?有什么方法可以指定在pods的yaml配置中使用什么名称?
答案 0 :(得分:13)
localhost
只是网络环回设备的名称(IPv4通常为127.0.0.1
,IPv6为::1
)。这通常在/etc/hosts
文件中指定。
pod拥有自己的IP,因此每个容器内部共享该IP。如果这些容器应该是独立的(即不需要并置),它们应该都在自己的容器中。然后,您可以为每个允许DNS查找定义service作为" $ SERVICENAME"来自同一命名空间中的pod,或者" $ SERVICENAME。$ NAMESPACE"来自不同命名空间中的pod。
答案 1 :(得分:4)
docker-compose
部署单个容器,将它们链接在一起,以便彼此了解彼此的名称和IP。
Kubernetes中的Pod
类似,但这不是Pod用于保存多个外部服务并将它们链接在一起的目的。
Pod适用于必须在同一主机上运行的容器,并且仅在它们之间进行交互。容器通过localhost在内部进行通信。
大多数Pods
实际上是一个容器。
Pod
使用Services
与外界进行通信。从本质上讲,Pod看起来好像只是一个容器。
pause
容器管理Pod的IP,然后管理您附加的容器。这允许您的容器崩溃,重新启动并在Pod中重新链接而不更改IP,允许在不涉及调度程序的情况下管理容器崩溃,并确保Pod在其生命周期内保持在单个节点上,因此重新启动很快。 p>
如果我们在每次崩溃时重新安排的容器,它们可能最终会在不同的主机上运行,路由必须更新等...