啟用 Pod 的傳出網際網路存取 - Amazon EKS

協助改善此頁面

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

若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 GitHub 上編輯此頁面連結。

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

啟用 Pod 的傳出網際網路存取

適用於:Linux IPv4 Fargate 節點、具有 Amazon EC2 執行個體的 Linux 節點

如果您使用 IPv6 系列部署叢集,則此主題中的資訊不適用於您的叢集,因為IPv6地址不會進行網路翻譯。如需搭配使用 IPv6 與叢集的詳細資訊,請參閱 了解叢集、Pod 和 服務的 IPv6 地址

根據預設,叢集中的每個 Pod 都會從與部署 Pod 的 VPC 相關聯的無類別網域間路由 (CIDR) 區塊中指派一個私有IPv4地址。相同 VPC 中的 Pod 會使用這些私有 IP 地址做為端點彼此通訊。當 Pod 與與您 VPC 相關聯的 CIDR 區塊以外的任何IPv4地址通訊時,Amazon VPC CNI 外掛程式 (適用於 LinuxWindows) 預設會將 Pod IPv4地址轉譯為 Pod 正在執行之節點的主要彈性網路介面的主要私有IPv4地址 *

注意

對於 Windows 節點,還有其他要考慮的詳細資訊。根據預設,Windows 的 VPC CNI 外掛程式是以網路組態定義,其中 SNAT 會排除流向相同 VPC 內目的地的流量。這表示內部 VPC 通訊已停用 SNAT,且配置給 Pod 的 IP 地址可在 VPC 內路由。但是,傳送至 VPC 外部目的地的流量,其來源 Pod IP SNAT 會傳送至執行個體 ENI 的主要 IP 地址。此 Windows 預設組態可確保 Pod 能以與主機執行個體相同的方式存取 VPC 外部的網路。

由於此行為:

  • 您的 Pod 只能與網際網路資源通訊,前提是其執行的節點具有指派給它的有或彈性 IP 地址,且位於公有子網路中。公有子網路的關聯路由表具有網際網路閘道的路由。我們建議儘可能將節點部署到私有子網。

  • 對於早於 的外掛程式版本1.8.0,使用 VPCs 對等互連傳輸 VPCAWS Direct Connect 連接到叢集 VPC 的網路或 VPC 中的資源無法在次要彈性網路介面後方啟動與 Pod 的通訊。不過,您的 Pod 可以啟動與這些資源的通訊,並從這些資源接收回應。

如果在您的環境中下列任一陳述式成立,請使用下列命令變更預設組態。

  • 您的網路或 VPCs 中有使用 VPC 對等互連傳輸 VPCAWS Direct Connect 連接到叢集 VPC 的資源,這些資源需要使用 IPv4地址啟動與 Pod 的通訊,而且您的外掛程式版本早於 1.8.0

  • 您的 Pod 位於私有子網路中,需要向網際網路傳出通訊。子網路包含指向 NAT 閘道的路由。

kubectl set env daemonset -n kube-system aws-node AWS_VPC_K8S_CNI_EXTERNALSNAT=true
注意

AWS_VPC_K8S_CNI_EXTERNALSNATAWS_VPC_K8S_CNI_EXCLUDE_SNAT_CIDRS CNI 組態變數不適用於 Windows 節點。Windows 不支援停用 SNAT。對於從 SNAT 排除 IPv4 CIDRs 清單,您可以透過在 Windows 引導指令碼中指定 ExcludedSnatCIDRs 參數來定義此項目。如需使用此參數的詳細資訊,請參閱 引導指令碼組態參數

主機聯網

* 如果 Pod 的規格包含 hostNetwork=true(預設為 false),則其 IP 地址不會翻譯為不同的地址。根據預設, kube-proxy和 Amazon VPC CNI 外掛程式適用於叢集上執行的 Kubernetes Pod。對於這些 Pod,IP 地址與節點的主要 IP 地址相同,因此不會翻譯 Pod 的 IP 地址。如需 Pod hostNetwork設定的詳細資訊,請參閱 Kubernetes API 參考中的 PodSpec v1 核心