選擇網路模式 - Amazon Elastic Container Service

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

選擇網路模式

先前提到的架構輸入和輸出網路連線的方法,可套用至AWS,即使它們不在容器內。執行容器時,在AWS,您需要考慮另一層級的網絡。使用容器的主要優點之一是您可以將多個容器封裝到單一主機上。執行這項操作時,您需要選擇要如何將相同主機上執行的容器進行網路連線。以下是可供選擇的選項。

主機模式

所以此host網路模式是 Amazon ECS 支援的最基本網路模式。使用主機模式,容器的網絡直接綁定到正在運行容器的基礎主機。


                    顯示使用主機網路模式之容器之網路架構的圖表。

假設您正在執行 Node.js 容器與快速應用程式偵聽連接埠3000類似於前面的圖表所示。當您host網路模式時,容器會使用基礎主機 Amazon EC2 執行個體的 IP 位址在連接埠 3000 上接收流量。我們不建議使用此模式。

使用此網路模式有顯著的缺點。您不能在每台主機上執行任務的多個實例化。這是因為只有第一個任務可以綁定到 Amazon EC2 執行個體上的所需端口。當容器端口使用host網路模式。例如,如果應用程式需要偵聽特定的連接埠號碼,則無法直接重新對應連接埠號碼。相反地,您必須透過變更應用程式組態來管理任何連接埠衝突。

在使用host網路模式。此模式允許容器模擬主機,並允許容器連線到主機上的私人迴路網路服務。

所以此host網路模式僅支援在 Amazon EC2 執行個體上託管的 Amazon ECS 任務。在 Fargate 上使用亞馬遜 ECS 時不受支援。

橋接模式

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


                    顯示使用橋接網路模式與靜態連接埠對應的網路架構的圖表。

使用靜態連接埠對應,您可以明確定義要對應至容器連接埠的主機連接埠。使用上述範例,連接埠80正在映射到端口3000(位於容器)。若要與容器化應用程式進行通訊,您可以將流量傳送至連接埠80到 Amazon EC2 執行個體的 IP 地址。從容器化應用程序的角度來看,它可以看到端口3000

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

若要解決此問題,請考慮使用bridge網路模式與動態連接埠對應,如下圖所示。


                    顯示使用橋接網路模式與動態連接埠對應的網路架構的圖表。

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

Amazon ECS 可協助您持續追蹤每個任務的隨機指派連接埠。它會自動更新負載平衡器目標群組並AWS Cloud Map服務探索,以取得工作 IP 位址和連接埠的清單。這可讓您更輕鬆使用使用bridge模式與動態連接埠。

但是,使用bridge網路模式是很難將服務鎖定至服務通訊。由於服務可能會指派給任何隨機、未使用的連接埠,因此必須在主機之間開啟廣泛的連接埠範圍。不過,建立特定規則並不容易,讓特定服務只能與其他特定服務通訊。服務沒有特定的連接埠可用於安全性群組網路規則。

所以此bridge網路模式僅支援在 Amazon EC2 執行個體上託管的 Amazon ECS 任務。在 Fargate 上使用亞馬遜 ECS 時不支援此功能。

AWVPC 模式

使用awsvpc網路模式時,Amazon ECS 會為每個任務建立和管理彈性網路界面 (ENI),並且每個任務會在 VPC 內接收自己的私有 IP 地址。此 ENI 是從底層主機 ENI 分開。如果 Amazon EC2 執行個體正在執行多個任務,則每個任務的 ENI 也是獨立的。


                    顯示使用 AWSVPC 網路模式的網路架構的圖表。

在上述範例中,Amazon EC2 執行個體會指派給 ENI。ENI 代表用於主機層級網路通訊之 EC2 執行個體的 IP 地址。每個任務也有一個對應的 ENI 和一個私人 IP 地址。因為每個 ENI 都是獨立的,所以每個容器都可以綁定到端口80在任務 ENI。因此,您不必跟蹤端口號碼。相反,您可以將流量發送到端口80在任務 ENI 的 IP 地址。

使用awsvpc網路模式的重要原因是每個工作都有個別的安全性群組來允許或拒絕流量。這表示您有更大的彈性,以更精細的層級控制工作與服務之間的通訊。您也可以將工作設定為拒絕來自同一主機上其他工作的傳入流量。

所以此awsvpc網路模式支援在 Amazon EC2 和 Fargate 上託管的 Amazon ECS 任務。請注意,在使用 Fargate 時,awsvpc網路模式是必要的。

當您使用awsvpc網路模式中,您應該注意幾個挑戰。

使用 ENI 中繼增加任務密度

最大的缺點是使用awsvpc網路模式與 Amazon EC2 執行個體上託管的任務是 EC2 執行個體對可以連接到它們的 ENI 數量有限。這會限制您可以在每個執行個體上放置多少工作。Amazon ECS 提供 ENI 中繼功能,可增加可用 ENI 的數量,以達到更高的任務密度。


                        顯示使用 AWSVPC 網絡模式與 ENI 中繼的網絡架構的圖。

使用 ENI 主幹時,預設會使用兩個 ENI 附件。第一個是執行個體的主要 ENI,用於任何主機層級處理程序。第二個是主幹 ENI,亞馬遜 ECS 創建。只有特定 Amazon EC2 執行個體類型才支援此功能。

考慮這個範例。如果沒有 ENI 主幹,c5.large執行個 vCPUs 只能裝載兩個工作。但是,使用 ENI 中繼,c5.large執行個體最多可以裝載十個工作。每個工作都有不同的 IP 位址和安全性群組。如需可用執行個體類型及其密度的詳細資訊,請參閱支援的 Amazon EC2 執行個體類型中的Amazon Elastic Container Service Container Service

ENI 中繼在延遲或頻寬方面對運行時性能沒有影響。不過,它會增加工作啟動時間。您應該確保如果使用 ENI 主幹,則依賴於任務啟動時間的自動調整規則和其他工作負載仍然如預期般運作。

如需詳細資訊,請參閱「」彈性網路界面中繼中的Amazon Elastic Container Service Container Service

防止 IP 地址耗盡

透過為每項工作指派不同的 IP 位址,您可以簡化整體基礎結構,並維護提供絕佳安全性層級的安全性群組。不過,此組態可能會導致 IP 耗盡。

您AWS帳戶已預先佈建子網路,該子網路具有/20CIDR 範圍。這表示每個子網路都有 4,091 個可用的 IP 位址。請注意,數個 IP 位址/20範圍已留給 AWS 特定用途。考慮這個範例。您可以將您的應用程式分佈到三個可用區域中的三個子網路以提供高可用性。在這種情況下,您可以在三個子網路中使用大約 12,000 個 IP 位址。

使用 ENI 中繼,您啟動的每個 Amazon EC2 執行個體都需要兩個 IP 地址。一個 IP 位址用於主要 ENI,而另一個 IP 位址用於主幹 ENI。執行個體上的每個 Amazon ECS 任務都需要一個 IP 地址。如果您正在啟動極大的工作負載,可能會用盡可用的 IP 位址。這可能會導致 Amazon EC2 啟動失敗或任務啟動失敗。發生這些錯誤是因為如果沒有可用的 IP 位址,ENIS 無法在 VPC 內新增 IP 位址。

當您使用awsvpc網路模式,您應該評估您的 IP 位址需求,並確保您的子網路 CIDR 範圍符合您的需求。如果您已經開始使用具有小子網路的 VPC,且位址空間不足,則可以新增次要子網路。


                        顯示使用 AWSVPC 網絡模式與 ENI 中繼的網絡架構的圖。

透過使用 ENI 主幹,Amazon VPC CNI 可以配置為在與主機不同的 IP 位址空間中使用 ENI。通過這樣做,您可以為 Amazon EC2 主機和任務提供不重疊的不同 IP 地址範圍。在範例圖中,EC2 主機 IP 位址位於具有172.31.16.0/20IP 範圍。不過,在主機上執行的工作會在100.64.0.0/19範圍。透過使用兩個獨立的 IP 範圍,您不必擔心工作耗用太多 IP 位址,也不會為執行個體留下足夠的 IP 位址。

使用 IPv6 雙堆疊模式

所以此awsvpc網路模式與設定為 IPv6 雙堆疊模式的 VPC 相容。使用雙堆疊模式的 VPC 可透過 IPv4、IPv6 或兩者進行通訊。VPC 中的每個子網路可以同時具有 IPv4 CIDR 範圍和 IPv6 CIDR 範圍。如需詳細資訊,請參閱「」您 VPC 中的 IP 定址中的Amazon VPC 使用者指南

您無法停用 VPC 和子網路的 IPv4 支援來解決 IPv4 耗盡問題。不過,有了 IPv6 支援,您可以使用某些新功能,尤其是僅限輸出網際網路閘道。僅限輸出網際網路閘道允許任務使用其公有路由至網際網路的輸出連線。但僅輸出網際網路閘道不允許從網際網路連線。如需詳細資訊,請參閱「」輸出限定網際網路閘道中的Amazon VPC 使用者指南