簡體   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