適用於 Pods 的 SNAT - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

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

適用於 Pods 的 SNAT

如果您使用 IPv6 系列部署叢集,則本主題中的資訊並不適用於您的叢集,因為 IPv6 地址未經過網路轉換。如需搭配使用 IPv6 與叢集的詳細資訊,請參閱 IPv6叢集的位址Pods、和 services

預設情況下,叢集中的每個 Pod 均從與部署 Pod 的 VPC 關聯的無類別域間路由 (CIDR) 區指派一個私有 IPv4 地址。同一 VPC 中的 Pods 使用這些私有 IP 地址作為端點相互通訊。當 Pod 與任何不在與您的 VPC 關聯的 CIDR 區塊內的 IPv4 地址通訊時,預設情況下,Amazon VPC CNI 外掛程式 (適用於 LinuxWindows) 會將 Pod's 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 地址,且位於公有子網路時,您的 Pods 才能與網際網路資源進行通訊。公有子網路與具有網際網路閘道路由的路由表相關聯。我們建議儘可能將節點部署到私有子網。

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

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

  • 您在網路或 VPC 擁有資源,且其使用 VPC 對等互連傳輸 VPCAWS Direct Connect 連線到叢集,且其需使用 IPv4 位址與您的 Pods 啟動通訊,而您的外掛程式版本早於 1.8.0

  • 您的 Pods 位於私有子網路中,需要與網際網路進行對外通訊。子網路包含指向 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's 規格包含 hostNetwork=true (預設為 false),則其 IP 地址不會被轉換為其他地址。預設情況下,在您的叢集上執行的 kube-proxy 和 Amazon VPC CNI plugin for Kubernetes Pods 即為這種情況。對於這些 Pods,IP 地址與節點的主 IP 地址相同,因此未轉譯 Pod's IP 地址。如需有關Pod'shostNetwork設定的詳細資訊,請參閱 Kubernetes API 參考資料中的 PodSpec v1 核心