

 **協助改進此頁面** 

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

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

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

# 啟用 Pod 的傳出網際網路存取
<a name="external-snat"></a>

 **適用於**：包含 Amazon EC2 執行個體的 Linux `IPv4` Fargate 節點、Linux 節點

如果您使用 `IPv6` 系列部署叢集，則本主題中的資訊並不適用於您的叢集，因為 `IPv6` 位址未經過網路轉換。如需搭配使用 `IPv6` 與叢集的詳細資訊，請參閱 [了解叢集、Pod 與服務的 IPv6 位址](cni-ipv6.md)。

預設情況下，叢集中的每個 Pod 均從與部署 Pod 的 VPC 關聯的無類別域間路由 (CIDR) 區塊指派一個[私有](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-private-addresses) `IPv4` 位址。同一 VPC 中的 Pod 使用這些私有 IP 位址作為端點相互通訊。當 Pod 與任何不在與您的 VPC 關聯的 CIDR 區塊內的 `IPv4` 位址通訊時，預設情況下，Amazon VPC CNI 外掛程式 (適用於 [Linux](https://github.com/aws/amazon-vpc-cni-k8s#amazon-vpc-cni-k8s) 或 [Windows](https://github.com/aws/amazon-vpc-cni-plugins/tree/master/plugins/vpc-bridge)) 會將 Pod 的 `IPv4` 位址轉譯為正在執行 Pod 的節點的主要[彈性網路介面](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#eni-basics)的主要私有 `IPv4` 位址 [\$1](#snat-exception)。

**注意**  
對於 Windows 節點，還有其他詳細資訊需要考慮。依預設，[適用於 Windows 的 VPC CNI 外掛程式](https://github.com/aws/amazon-vpc-cni-plugins/tree/master/plugins/vpc-bridge)為使用網路組態定義，其中，通往相同 VPC 內目的地的流量會從 SNAT 中排除。這表示內部 VPC 通訊已停用 SNAT，且配置給 Pod 的 IP 位址可在 VPC 內路由。但是通往 VPC 外目的地的流量會將來源 Pod IP SNAT 到執行個體 ENI 的主要 IP 位址。Windows 的此預設組態可確保 Pod 可以使用與主機執行個體相同的方式存取 VPC 外部的網路。

由於此行為：
+ 僅當 Pod 執行的節點獲指派[公有](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-public-addresses)或[彈性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html) IP 位址，且位於[公有子網路](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-basics)時，您的 Pod 才能與網際網路資源進行通訊。公有子網路與具有網際網路閘道路由的[路由表](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)相關聯。我們建議儘可能將節點部署到私有子網。
+ 對於版本比 `1.8.0` 更早的外掛程式，使用 [VPC 對等互連](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)、[傳輸 VPC](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/transit-vpc-option.html) 或 [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 連線到叢集 VPC 的網路或 VPC 的資源，無法針對輔助彈性網路介面背後的 Pod 啟動通訊。您的 Pod 可以啟動與這些資源的通訊並接收來自資源的回應。

如果在您的環境中下列任一陳述式成立，請使用下列命令變更預設組態。
+ 您在網路或 VPC 擁有資源，且其使用 [VPC 對等互連](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)、[傳輸 VPC](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/transit-vpc-option.html) 或 [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 連線到叢集，且其需使用 `IPv4` 位址與您的 Pod 啟動通訊，而您的外掛程式版本早於 `1.8.0`。
+ 您的 Pod 位於[私有子網路](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-basics)中，且需要與網際網路進行對外通訊。子網路包含指向 [NAT 閘道](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)的路由。

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

**注意**  
`AWS_VPC_K8S_CNI_EXTERNALSNAT` 和 `AWS_VPC_K8S_CNI_EXCLUDE_SNAT_CIDRS` CNI 組態變數不適用於 Windows 節點。Windows 不支援停用 SNAT。對於從 SNAT 排除 `IPv4` CIDR，您可透過在 Windows 引導指令碼中指定 `ExcludedSnatCIDRs` 參數來進行定義。如需使用此參數的詳細資訊，請參閱 [引導指令碼組態參數](eks-optimized-windows-ami.md#bootstrap-script-configuration-parameters)。

## 主機聯網
<a name="snat-exception"></a>

\$1 如果 Pod 規格包含 `hostNetwork=true` (預設為 `false`)，則其 IP 位址不會被轉譯為其他位址。根據預設，在您叢集上執行的 `kube-proxy` 和 Kubernetes 專用 Amazon VPC CNI 外掛程式 Pod 屬於這種情況。對於這些 Pod，IP 位址與節點的主 IP 位址相同，因此未轉譯 Pod 的 IP 位址。如需有關 Pod `hostNetwork` 設定的詳細資訊，請參閱 Kubernetes API 參考中的 [PodSpec v1 核心](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#podspec-v1-core)。