將 Docker 的虛擬網路用於 Amazon ECS Linux 任務 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Docker 的虛擬網路用於 Amazon ECS Linux 任務

bridge 網路模式僅支援託管在 Amazon ECS 執行個體上的 Amazon EC2 任務。

bridge 模式下,您正在使用虛擬網路橋接器,在主機和容器的網路之間建立一個層。如此一來,您就可以建立將主機連接埠重新對應至容器連接埠的連接埠映射。映射可以是靜態或動態模式。

此圖顯示使用橋接網路模式與靜態連接埠映射的網路架構。

透過靜態連接埠映射,您可以明確定義要對應至容器連接埠的主機連接埠。使用上述範例,主機上的 80 連接埠會對應至容器上的連接埠 3000。若要與容器化應用程式通訊,請將流量傳送至 80 Amazon EC2 執行個體的 IP 地址。從容器化應用程式的角度來看,其可以看到連接埠 3000 上的入站流量。

如果您只想變更流量連接埠,則適用於靜態連接埠映射。但是,這仍然與使用 host 網路模式具有相同的缺點。您不能在每台主機上執行多個任務的執行個體化。這是因為靜態連接埠映射僅允許單一容器對應至連接埠 80。

為了解決這個問題,可以考慮使用具有動態連接埠映射的 bridge 網路模式,如下圖所示。

此圖顯示使用橋接網路模式與動態連接埠映射的網路架構。

透過不在連接埠映射中指定主機連接埠,您可以讓 Docker 從暫時連接埠範圍中選擇一個隨機、未使用的連接埠,並將其指派為容器的公有主機連接埠。例如,Node.js 應用程式在容器3000上的連接埠上接聽,可能會獲指派隨機的高數目連接埠,例如在 Amazon EC2 主機47760上。這樣做意味著您可以在主機上執行該容器的多個副本。此外,每個容器都可以在主機上指派自己的連接埠。容器的每個副本都會在連接埠 3000 上接收流量。不過,傳送流量至這些容器的用戶端會使用隨機指派的主機連接埠。

Amazon ECS 可協助您追蹤每個任務的隨機指派連接埠。它透過自動更新負載平衡器目標群組 AWS Cloud Map 和服務探索來擁有任務 IP 地址和連接埠的清單來執行此操作。這樣可以更輕鬆地使用透過動態連接埠的 bridge 模式運作的服務。

但是,使用 bridge 網路模式的缺點之一是難以鎖定服務對服務通訊。由於服務可能會指派給任何隨機、未使用的連接埠,因此必須在主機之間開放廣泛的連接埠範圍。然而,建立特定規則以使特定服務只能與另一個特定服務通訊並不容易。這些服務沒有可用於安全群組聯網規則的特定連接埠。