[英]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:3000
從web
訪問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.