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

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

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

適用於:包含 Amazon EC2 執行個體的 Linux IPv4 Fargate 節點、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 外掛程式為使用網路組態定義,其中,通往相同 VPC 內目的地的流量會從 SNAT 中排除。這表示內部 VPC 通訊已停用 SNAT,且配置給 Pod 的 IP 位址可在 VPC 內路由。但是通往 VPC 外目的地的流量會將來源 Pod IP SNAT 到執行個體 ENI 的主要 IP 位址。Windows 的此預設組態可確保 Pod 可以使用與主機執行個體相同的方式存取 VPC 外部的網路。

由於此行為:

  • 僅當 Pod 執行的節點獲指派公有彈性 IP 位址,且位於公有子網路時,您的 Pod 才能與網際網路資源進行通訊。公有子網路與具有網際網路閘道路由的路由表相關聯。我們建議儘可能將節點部署到私有子網。

  • 對於版本比 1.8.0 更早的外掛程式,使用 VPC 對等互連傳輸 VPCAWS Direct Connect 連線到叢集 VPC 的網路或 VPC 的資源,無法針對輔助彈性網路介面背後的 Pod 啟動通訊。您的 Pod 可以啟動與這些資源的通訊並接收來自資源的回應。

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

  • 您在網路或 VPC 擁有資源,且其使用 VPC 對等互連傳輸 VPCAWS Direct Connect 連線到叢集,且其需使用 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 CIDR,您可透過在 Windows 引導指令碼中指定 ExcludedSnatCIDRs 參數來進行定義。如需使用此參數的詳細資訊,請參閱 引導指令碼組態參數

主機聯網

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