為 Amazon ECS 任務分配網絡界面 - Amazon Elastic Container Service

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

為 Amazon ECS 任務分配網絡界面

awsvpc 網路模式提供的任務聯網功能可為 Amazon ECS 任務提供與 Amazon EC2 執行個體相同的聯網屬性。使用awsvpc網路模式可簡化容器網路,因為您可以更好地控制應用程式與 VPC 中的其他服務之間的通訊方式。awsvpc網路模式還允許您在工作中更精細地使用安全群組和網路監視工具,為您的容器提供更高的安全性。您也可以使用其他 Amazon EC2 聯網功能 (例如 VPC 流程日誌) 來監控進出任務的流量。此外,屬於同一個任務的容器可以透過 localhost 界面進行通訊。

任務 elastic network interface (ENI) 是 Amazon ECS 的全受管功能。Amazon ECS 會建立 ENI 並將其連接到具有指定安全群組的主機 Amazon EC2 執行個體。任務在 ENI 上傳送和接收網路流量的方式,與 Amazon EC2 執行個體處理其主要網路介面的方式相同。根據預設,會對每個任務 ENI 指派一個私有 IPv4 地址。如果已對雙堆疊模式啟用 VPC,並且您使用具有 IPv6 CIDR 區塊的子網路,則任務 ENI 也會收到 IPv6 地址。每個任務只能有一個 ENI。

這些 ENI 會顯示在您帳戶的 Amazon EC2 主控台中。您的帳戶無法分離或修改 ENI。這是為了防止意外刪除與正在執行之任務相關聯的 ENI。您可以在 Amazon ECS 主控台或使用 DescribeTasksAPI 操作來檢視任務的 ENI 附件資訊。當任務停止或服務縮小規模時,任務 ENI 即予以分離和刪除。

當您需要增加 ENI 密度時,請使用awsvpcTrunking帳戶設定。Amazon ECS 也會為您的容器執行個體建立和附加「中繼」網路界面。幹線網路由 Amazon ECS 全受管。當您在 Amazon ECS 叢集中終止或取消註冊您的容器執行個體時,即會刪除幹線 ENI。如需有關awsvpcTrunking帳戶設定的更多資訊,請參閱必要條件

您可以awsvpc在任務定義的networkMode參數中指定。如需詳細資訊,請參閱 網路模式

然後,當您執行工作或建立服務時,請使用包含一或多個子網路的networkConfiguration參數,將您的工作放在一或多個安全群組中,以附加至 ENI。如需詳細資訊,請參閱 網路組態。任務放置在與這些子網相同之可用區域中的有效 Amazon EC2 執行個體上,而指定之安全群組則與針對任務所佈建的 ENI 建立關聯。

Linux 考量事項

使用 Linux 作業系統時,請考量下列事項。

  • 如果您在awsvpc模式中使用 p5.48xlarge 執行個體,則無法在執行個體上執行超過 1 個工作。

  • 使用awsvpc網路模式的任務和服務需要 Amazon ECS 服務連結角色,才能為 Amazon ECS 提供代表您撥打其他 AWS 服務電話的許可。這個角色會在您建立叢集,或在 AWS Management Console中建立或更新服務時,自動為您建立。如需詳細資訊,請參閱 使用 Amazon ECS 的服務連結角色。您也可以使用下列 AWS CLI 命令建立服務連結角色:

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • 您的 Amazon EC2 Linux 執行個體需要容器代理程式的版本 1.15.0 或更新版本,以執行使用 awsvpc 網路模式的任務。如果您使用的是 Amazon ECS 最佳化 AMI,您的執行個體至少需要 1.15.0-4 版的 ecs-init 套件。

  • 在 VPC 上同時啟用 enableDnsHostnamesenableDnsSupport 選項時,Amazon ECS 會使用 Amazon 提供的 (內部) DNS 主機名稱填入任務的主機名稱。如果未啟用這些選項,任務的 DNS 主機名稱會設定為隨機的主機名稱。如需 VPC DNS 設定的詳細資訊,請參閱《Amazon VPC 使用者指南》中的搭配使用 DNS 與 VPC

  • 使用 awsvpc 網路模式的每個 Amazon ECS 任務都會收到自己的彈性網路介面 (ENI),它連接到託管該任務的 Amazon EC2 執行個體。Amazon EC2 Linux 執行個體可連接的網路介面數量有預設配額。主要網路介面視為一個配額。例如,根據預設,c5.large 執行個體最多只有三個可與其連接的 ENI。執行個體的主要網路介面視為一個配額。您可以將額外兩個 ENI 連接到執行個體。因為每項使用 awsvpc 網路模式的任務都需要 ENI,所以通常只能對此執行個體類型執行兩個這類任務。如需有關每種執行個體類型預設 ENI 限制的詳細資訊,請參閱 Amazon EC2 使用者指南中每個執行個體類型每個網路界面的 IP 地址

  • Amazon ECS 支援使用受支援的 Amazon EC2 Linux 執行個體類型啟動加強 ENI 密度的容器執行個體。當您選擇加入 awsvpcTrunking 帳戶設定並使用這些執行個體類型向叢集註冊 Amazon EC2 Linux 執行個體,則這些執行個體的 ENI 配額較高。使用這些具有更高配額的執行個體代表您可以在每個 Amazon EC2 Linux 執行個體中安排更多任務。若要使用具有中繼功能的增強 ENI 密度,您的 Amazon EC2 執行個體必須使用 1.28.1 版或更新版本的容器代理程式。如果您使用的是 Amazon ECS 最佳化 Linux AMI,您的執行個體也至少需要 1.28.1-2 版的 ecs-init 套裝服務。如需選擇使用的 awsvpcTrunking 帳戶設定詳細資訊,請參閱 透過帳戶設定存取 Amazon ECS 功能。如需 ENI 中繼的詳細資訊,請參閱增加 Amazon ECS Linux 容器實例網絡界面

  • 當在 Amazon EC2 Linux 執行個體上託管使用 awsvpc 網路模式的任務時,您的任務 ENI 不會提供公有 IP 位址。若要存取網際網路,必須在設定為使用 NAT 閘道的私有子網路中啟動任務。如需詳細資訊,請參閱 《Amazon VPC 使用者指南》中的 NAT 閘道。入站網路存取必須出自使用私有 IP 位址的 VPC,或自 VPC 透過負載平衡器路由。從公有子網路內啟動的任務無法存取網際網路。

  • Amazon ECS 只會識別連接到您的 Amazon EC2 Linux 執行個體的 ENI。如果您將 ENI 手動連接到執行個體,Amazon ECS 可能會嘗試向沒有足夠網路介面卡的執行個體新增任務。這可能導致任務逾時並進入解除佈建狀態,然後進入已停止狀態。建議您不要將 ENI 手動連接到容器執行個體。

  • Amazon EC2 Linux 執行個體必須使用 ecs.capability.task-eni 註冊,用以考量來放置具 awsvpc 網路模式的任務。執行 1.15.0-4 版或更新版本 ecs-init 的容器執行個體使用此屬性註冊。

  • 您的帳戶無法手動分離或修改由 Amazon EC2 Linux 執行個體建立並連接的 ENI。這是為了防止意外刪除與正在執行之任務相關聯的 ENI。若要釋出任務的 ENI,請停止該任務。

  • 當執行任務或建立使用 awsvpc 網路模式的服務時,限制只能在 awsVpcConfiguration 中指定 16 個子網路和 5 個安全群組。如需詳細資訊,請參閱 Amazon 彈性容器服務 API 參考中的AwsVpc組態

  • 當任務在 awsvpc 網路模式中啟動時,Amazon ECS 容器代理程式會先為每項任務建立額外的 pause 容器,然後在任務定義中啟動容器。然後,它通過運行 amazon-ecs-cni-plugins CNI 插件配置pause容器的網絡命名空間。然後代理會啟動任務中的其他容器,讓它們共用 pause 容器的網路堆疊。這表示任務中的所有容器都可由 ENI 的 IP 地址定址,而且它們彼此之間可以透過 localhost 界面通訊。

  • 服務的任務使用 awsvpc 網路模式僅支援 Application Load Balancer 和 Network Load Balancer。當您為這些服務建立任何目標群組時,必須選擇 ip 做為目標類型。請勿選擇 instance。這是因為使用 awsvpc 網路模式的任務與 ENI 相關聯,不與 Amazon EC2 Linux 執行個體相關聯。如需詳細資訊,請參閱 使用負載平衡來分配 Amazon ECS 服務流量

  • 如果您的 VPC 已更新以變更其使用的 DHCP 選項集,則無法將這些變更套用到現有的任務。啟動套用這些變更的新任務,驗證這些任務是否正確運作,接著停止現有的任務,以便安全地變更這些網路組態。

Windows 考量

當您使用 Windows 作業系統時,請考慮下列事項:

  • 使用 Amazon ECS 最佳化 Windows Server 2016 AMI 的容器執行個體無法託管使用 awsvpc 網路模式的任務。如果您的叢集包含 Amazon ECS 最佳化且支援 awsvpc 網路模式的 Windows Server 2016 AMI 和 Windows AMI,使用 awsvpc 網路模式的任務不會在 Windows 2016 Server 執行個體上啟動。但會在支援 awsvpc 網路模式的執行個體上啟動。

  • 您的 Amazon EC2 Windows 執行個體需要容器代理程式的版本1.57.1或更新版本,才能針對使用該awsvpc網路模式的 Windows 容器使用 CloudWatch 指標。

  • 使用awsvpc網路模式的任務和服務需要 Amazon ECS 服務連結角色,才能為 Amazon ECS 提供代表您撥打其他 AWS 服務電話的許可。這個角色會在您建立叢集,或在 AWS Management Console中建立或更新服務時,自動為您建立。如需詳細資訊,請參閱 使用 Amazon ECS 的服務連結角色。您也可以使用下列 AWS CLI 命令建立服務連結角色。

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • 您的 Amazon EC2 Windows 執行個體需要容器代理程式的版本 1.54.0 或更新版本,以執行使用 awsvpc 網路模式的任務。啟動執行個體時,必須設定 awsvpc 網路模式所需的選項。如需詳細資訊,請參閱 引導 Amazon ECS 視窗容器執行個體以傳遞資料

  • 在 VPC 上同時啟用 enableDnsHostnamesenableDnsSupport 選項時,Amazon ECS 會使用 Amazon 提供的 (內部) DNS 主機名稱填入任務的主機名稱。如果未啟用這些選項,任務的 DNS 主機名稱會是隨機的主機名稱。如需 VPC DNS 設定的詳細資訊,請參閱《Amazon VPC 使用者指南》中的搭配使用 DNS 與 VPC

  • 每項使用 awsvpc 網路模式的 Amazon ECS 任務都會收到自己的彈性網路介面 (ENI),連接到裝載該任務的 Amazon EC2 Windows 執行個體。Amazon EC2 Windows 執行個體可連接的網路介面數量有預設配額。主要網路介面視為一個配額。例如,根據預設,c5.large 執行個體最多只有三個可與其連接的 ENI。執行個體的主要網路介面視為一個配額。您可以將額外兩個 ENI 連接到執行個體。因為每項使用 awsvpc 網路模式的任務都需要 ENI,所以通常只能對此執行個體類型執行兩個這類任務。如需有關每種執行個體類型預設 ENI 限制的詳細資訊,請參閱 Amazon EC2 使用者指南中每個執行個體類型每個網路界面的 IP 地址

  • 當在 Amazon EC2 Windows 執行個體上託管使用 awsvpc 網路模式的任務時,您的任務 ENI 不會提供公有 IP 位址。若要存取網際網路,在設定為使用 NAT 閘道的私有子網路中啟動任務。如需詳細資訊,請參閱 《Amazon VPC 使用者指南》中的 NAT 閘道。入站網路存取必須出自使用私有 IP 位址的 VPC,或自 VPC 透過負載平衡器路由。從公有子網路內啟動的任務無法存取網際網路。

  • Amazon ECS 只會識別連接到您的 Amazon EC2 Windows 執行個體的 ENI。如果您將 ENI 手動連接到執行個體,Amazon ECS 可能會嘗試向沒有足夠網路介面卡的執行個體新增任務。這可能導致任務逾時並進入解除佈建狀態,然後進入已停止狀態。建議您不要將 ENI 手動連接到容器執行個體。

  • Amazon EC2 Windows 執行個體必須使用 ecs.capability.task-eni 註冊,用以考量來放置具 awsvpc 網路模式的任務。

  • 您無法手動修改或分離由 Amazon EC2 Windows 執行個體建立並連接的 ENI。這是為了防止您意外刪除與正在執行之任務相關聯的 ENI。若要釋出任務的 ENI,請停止該任務。

  • 您在執行任務或建立使用 awsvpc 網路模式的服務時,您最多只能在 awsVpcConfiguration 指定 16 個子網和五個安全群組。如需詳細資訊,請參閱 Amazon 彈性容器服務 API 參考中的AwsVpc組態

  • 當任務在 awsvpc 網路模式中啟動時,Amazon ECS 容器代理程式會先為每項任務建立額外的 pause 容器,然後在任務定義中啟動容器。然後,它通過運行 amazon-ecs-cni-plugins CNI 插件配置pause容器的網絡命名空間。然後代理會啟動任務中的其他容器,讓它們共用 pause 容器的網路堆疊。這表示任務中的所有容器都可由 ENI 的 IP 地址定址,而且它們彼此之間可以透過 localhost 界面通訊。

  • 服務的任務使用 awsvpc 網路模式僅支援 Application Load Balancer 和 Network Load Balancer。當您為這些服務建立任何目標群組時,必須選擇 ip 做為目標類型,而不是選擇 instance。這是因為使用 awsvpc 網路模式的任務與 ENI 相關聯,不與 Amazon EC2 Windows 執行個體相關聯。如需詳細資訊,請參閱 使用負載平衡來分配 Amazon ECS 服務流量

  • 如果您的 VPC 已更新以變更其使用的 DHCP 選項集,則無法將這些變更套用到現有的任務。啟動套用這些變更的新任務,驗證這些任務是否正確運作,接著停止現有的任務,以便安全地變更這些網路組態。

  • 若您在 EC2 Windows 組態中使用 awsvpc 網路模式,則系統不支援下列項目:

    • 雙堆疊組態

    • IPv6

    • ENI 中繼

在雙堆疊模式下使用 VPC

在雙堆疊模式下使用 VPC 時,您的工作可以透過 IPv4 或 IPv6 或兩者進行通訊。IPv4 和 IPv6 位址是彼此獨立的。因此,您必須在 VPC 中分別為 IPv4 和 IPv6 設定路由和安全性。如需如何將 VPC 設定為雙堆疊模式的詳細資訊,請參閱《Amazon VPC 使用者指南》中的遷移至 IPv6

如果您為 VPC 設定網際網路閘道或傳出限定網際網路閘道,則可以在雙堆疊模式下使用 VPC。藉此,指派 IPv6 位址的工作就能透過網際網路閘道或僅限出口的網際網路閘道存取網際網路。NAT 閘道是選用。如需詳細資訊,請參閱 《Amazon VPC 使用者指南》 中的網際網路閘道輸出限定網際網路閘道

如果符合下列條件,將會為 Amazon ECS 任務指派 IPv6 地址:

  • Amazon EC2 Linux 執行個體託管的任務正在使用版本 1.45.0 或更新版本的容器代理程式。如需如何檢查執行個體使用之代理程式版本以及視需要進行更新的相關資訊,請參閱 更新 Amazon ECS 容器代理程式

  • dualStackIPv6 帳戶設定已啟用。如需詳細資訊,請參閱 透過帳戶設定存取 Amazon ECS 功能

  • 您的任務是使用 awsvpc 網路模式。

  • 您的 VPC 和子網已針對 IPv6 進行設定。組態包含在指定子網路中建立的網路介面。如需如何將 VPC 設定為雙堆疊模式的詳細資訊,請參閱《Amazon VPC 使用者指南》中的遷移至 IPv6修改您子網路的公有 IPv6 定址屬性