

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

# VPC 和子網路考量事項
<a name="subnets"></a>

**提示**  
 透過 Amazon EKS 研討會[探索](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el)最佳實務。

除了 Kubernetes 聯網之外，操作 EKS 叢集還需要 AWS VPC 聯網的知識。

我們建議您在開始設計 VPC 或將叢集部署到現有 VPCs 之前，先了解 EKS 控制平面通訊機制。

建構要與 EKS 搭配使用的 [VPC 和子網路時，請參閱叢集](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html) VPC 考量事項和 Amazon EKS 安全群組考量事項。 [https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html)

## 概觀
<a name="_overview"></a>

### EKS 叢集架構
<a name="_eks_cluster_architecture"></a>

EKS 叢集包含兩個 VPCs：
+ 託管 Kubernetes 控制平面的 AWS 受管 VPC。此 VPC 不會出現在客戶帳戶中。
+ 託管 Kubernetes 節點的客戶受管 VPC。這是容器執行的位置，以及其他客戶管理的 AWS 基礎設施，例如叢集所使用的負載平衡器。此 VPC 會出現在客戶帳戶中。您需要先建立客戶受管 VPC，才能建立叢集。如果您不提供 VPC，eksctl 會建立 VPC。

客戶 VPC 中的節點需要連線至 AWS VPC 中受管 API 伺服器端點的能力。這可讓節點向 Kubernetes 控制平面註冊，並接收執行應用程式 Pod 的請求。

節點透過 (a) EKS 公有端點或 (b) 由 EKS 管理的跨帳戶[彈性網路介面](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) (X-ENI) 連接到 EKS 控制平面。建立叢集時，您需要指定至少兩個 VPC 子網路。EKS 會在叢集建立期間指定的每個子網路 （也稱為叢集子網路） 中放置 X-ENI。Kubernetes API 伺服器使用這些跨帳戶 ENIs 與客戶受管叢集 VPC 子網路上部署的節點進行通訊。

![叢集聯網的一般說明](http://docs.aws.amazon.com/zh_tw/eks/latest/best-practices/images/networking/subnet_image.png)


當節點啟動時，會執行 EKS 引導指令碼並安裝 Kubernetes 節點組態檔案。做為每個執行個體上開機程序的一部分，容器執行期代理程式、kubelet 和 Kubernetes 節點代理程式都會啟動。

若要註冊節點，Kubelet 會聯絡 Kubernetes 叢集端點。它與 VPC 外部的公有端點或 VPC 內的私有端點建立連線。Kubelet 會收到 API 指示，並定期向端點提供狀態更新和活動訊號。

### EKS 控制平面通訊
<a name="_eks_control_plane_communication"></a>

EKS 有兩種方法來控制對[叢集端點](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html)的存取。端點存取控制可讓您選擇是否可從公有網際網路或只能透過 VPC 到達端點。您可以一次開啟公有端點 （這是預設值）、私有端點或兩者。

叢集 API 端點的組態會決定節點與控制平面通訊所需的路徑。請注意，您可以隨時透過 EKS 主控台或 API 變更這些端點設定。

#### 公有端點
<a name="_public_endpoint"></a>

這是新 Amazon EKS 叢集的預設行為。僅啟用叢集的公有端點時，源自叢集 VPC （例如控制平面通訊的工作者節點） 的 Kubernetes API 請求會離開 VPC，但不會離開 Amazon 的網路。為了讓節點連接到控制平面，它們必須具有公有 IP 地址和網際網路閘道的路由，或 NAT 閘道的路由，他們可以使用 NAT 閘道的公有 IP 地址。

#### 公有和私有端點
<a name="_public_and_private_endpoint"></a>

同時啟用公有和私有端點時，來自 VPC 內部的 Kubernetes API 請求會透過 VPC 中的 X-ENIs 與控制平面通訊。您的叢集 API 伺服器可從網際網路上存取。

#### 私有端點
<a name="_private_endpoint"></a>

僅啟用私有端點時，不會從網際網路公開存取您的 API 伺服器。前往您叢集 API 伺服器的所有流量必須來自叢集的 VPC 或連接的網路。節點會透過 VPC 中的 X-ENIs與 API 伺服器通訊。請注意，叢集管理工具必須能夠存取私有端點。進一步了解[如何從 Amazon VPC 外部連線至私有 Amazon EKS 叢集端點。](https://aws.amazon.com/premiumsupport/knowledge-center/eks-private-cluster-endpoint-vpc/)

請注意，公有 DNS 伺服器會將叢集的 API 伺服器端點解析為來自 VPC 的私有 IP 地址。在過去，端點只能從 VPC 內解析。

### VPC 組態
<a name="_vpc_configurations"></a>

Amazon VPC 支援 IPv4 和 IPv6 地址。Amazon EKS 預設支援 IPv4。VPC 必須具有與之建立關聯的 IPv4 CIDR 區塊。您可以選擇將多個 IPv4 [無類別網域間路由](http://en.wikipedia.org/wiki/CIDR_notation) (CIDR) 區塊和多個 IPv6 CIDR 區塊與您的 VPC 建立關聯。建立 VPC 時，您必須從 RFC 1918 中指定的私有 IPv4 地址範圍指定 VPC 的 IPv4 CIDR 區塊。 [http://www.faqs.org/rfcs/rfc1918.html](http://www.faqs.org/rfcs/rfc1918.html)允許區塊大小介於`/16`字首 (65，536 個 IP 地址） 和`/28`字首 (16 個 IP 地址） 之間。

建立新的 VPC 時，您可以連接單一 IPv6 CIDR 區塊，變更現有 VPC 時最多可連接五個。IPv6 CIDR 區塊大小的字首長度可以介於 /44 和 /60 之間，而 IPv6 子網路的字首長度可以介於 /44/ 和 /64 之間。您可以從 Amazon 維護的 IPv6 地址集區請求 IPv6 CIDR 區塊。如需詳細資訊，請參閱 [VPC 使用者指南中的 VPC CIDR 區塊](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html)一節。

Amazon EKS 叢集同時支援 IPv4 和 IPv6。根據預設，EKS 叢集會使用 IPv4 IP。在叢集建立時間指定 IPv6 將啟用使用 IPv6 叢集。IPv6 叢集需要雙堆疊 VPCs和子網路。

Amazon EKS 建議您在叢集建立期間，至少使用兩個位於不同可用區域的子網路。您在叢集建立期間傳入的子網路稱為叢集子網路。當您建立叢集時，Amazon EKS 會在您指定的子網路中建立最多 4 個跨帳戶 (x 帳戶或 x-ENIs) ENIs。x-ENIs 一律會部署，並用於叢集管理流量，例如日誌交付、EXEC 和 Proxy。如需完整的 [VPC 和子網路需求](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html#network-requirements-subnets)詳細資訊，請參閱 EKS 使用者指南。

Kubernetes 工作者節點可以在叢集子網路中執行，但不建議這麼做。在[叢集升級](cluster-upgrades.md#upgrades-ips)期間，Amazon EKS 會在叢集子網路中佈建其他 ENIs。當您的叢集向外擴展時，工作者節點和 Pod 可能會使用叢集子網路中的可用 IPs。因此，為了確保有足夠的可用 IPs，您可能會考慮將專用叢集子網路與 /28 網路遮罩搭配使用。

Kubernetes 工作者節點可以在公有或私有子網路中執行。子網路是公有還是私有，是指子網路內的流量是透過[網際網路閘道](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)路由。公有子網路具有透過網際網路閘道連至網際網路的路由表項目，但私有子網路則否。

源自於其他地方並到達節點的流量稱為*傳入*。源自節點且離開網路的流量稱為*輸出*。在以網際網路閘道設定的子網路中具有公有或彈性 IP 地址 EIPs) 的節點，允許從 VPC 外部傳入。私有子網路通常具有 NAT [閘道](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)的路由，不允許從 VPC 外部將流量傳入子網路中的節點，同時仍然允許*來自*節點的流量離開 VPC (*輸出*)。

在 IPv6 世界中，每個地址都是網際網路路由。與節點和 Pod 相關聯的 IPv6 地址是公有的。在 VPC 中實作[輸出限定網際網路閘道 (EIGW)](https://docs.aws.amazon.com/vpc/latest/userguide/egress-only-internet-gateway.html) 來支援私有子網路，允許傳出流量，同時封鎖所有傳入流量。您可以在 [VPC 使用者指南](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html)中找到實作 IPv6 子網路的最佳實務。

### 您可以透過三種不同的方式設定 VPC 和子網路：
<a name="_you_can_configure_vpc_and_subnets_in_three_different_ways"></a>

#### 僅使用公有子網路
<a name="_using_only_public_subnets"></a>

在相同的公有子網路中，會同時建立節點和輸入資源 （例如負載平衡器）。使用 標記公有子網路[http://kubernetes.io/role/elb](http://kubernetes.io/role/elb)，以建構面向網際網路的負載平衡器。在此組態中，叢集端點可以設定為公有、私有或兩者 （公有和私有）。

#### 使用私有和公有子網路
<a name="_using_private_and_public_subnets"></a>

節點是在私有子網路上建立，而傳入資源會在公有子網路中執行個體化。您可以啟用對叢集端點的公有、私有或兩者 （公有和私有） 存取。根據叢集端點的組態，節點流量將透過 NAT 閘道或 ENI 進入。

#### 僅使用私有子網路
<a name="_using_only_private_subnets"></a>

節點和輸入都會在私有子網路中建立。使用[http://kubernetes.io/role/internal-elb:1](http://kubernetes.io/role/internal-elb:1)子網路標籤來建構內部負載平衡器。存取叢集的端點需要 VPN 連線。您必須為 EC2 和所有 Amazon ECR 和 S3 儲存庫啟用 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html)。僅應啟用叢集的私有端點。建議您先完成 [EKS 私有叢集需求](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html)，再佈建私有叢集。

### 跨 VPCs通訊
<a name="cross-vpcs"></a>

在許多情況下，您需要部署到這些 VPCs多個 VPCs 和個別 EKS 叢集。

您可以使用 [Amazon VPC Lattice](https://aws.amazon.com/vpc/lattice/) 來一致且安全地跨多個 VPCs 和帳戶連接服務 （無需由 VPC 對等互連、AWS PrivateLink 或 AWS Transit Gateway 等服務提供額外的連線）。[在這裡](https://aws.amazon.com/blogs/networking-and-content-delivery/build-secure-multi-account-multi-vpc-connectivity-for-your-applications-with-amazon-vpc-lattice/)進一步了解。

![Amazon VPC Lattice](http://docs.aws.amazon.com/zh_tw/eks/latest/best-practices/images/networking/subnet_vpc-lattice.gif)


Amazon VPC Lattice 在 IPv4 和 IPv6 中的連結本機地址空間中運作，在可能有重疊 IPv4 地址的服務之間提供連線。為了提高營運效率，我們強烈建議將 EKS 叢集和節點部署到不重疊的 IP 範圍。如果您的基礎設施包含 IP 範圍重疊VPCs，您需要相應地建構您的網路。我們建議在[自訂聯網](custom-networking.md)模式下搭配[傳輸閘道](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-transit-gateway.html)使用[私有 NAT 閘道](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-basics)或 VPC CNI，以整合 EKS 上的工作負載，解決重複的 CIDR 挑戰，同時保留可路由 RFC1918 IP 地址。

![具有自訂聯網的 Private Nat Gateway](http://docs.aws.amazon.com/zh_tw/eks/latest/best-practices/images/networking/subnet_private-nat-gw.gif)


如果您是服務供應商，並且想要在不同的帳戶中與客戶 VPC 共用 Kubernetes 服務和輸入 (ALB 或 NLB)，請考慮使用 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)，也稱為端點服務。

### 在多個帳戶之間共用 VPC
<a name="subnets-multiple-accounts"></a>

許多企業採用共用 Amazon VPCs 作為簡化網路管理、降低成本和改善 AWS 組織中多個 AWS 帳戶安全性的方法。他們利用 AWS Resource Access Manager (RAM) 安全地與個別 [AWS](https://docs.aws.amazon.com/ram/latest/userguide/shareable.html) 帳戶、組織單位 (OUs) 或整個 AWS Organization 共用支援的 AWS 資源。

您可以使用 AWS RAM，在另一個 AWS 帳戶的共用 VPC 子網路中部署 Amazon EKS 叢集、受管節點群組和其他支援 AWS 資源 （例如 LoadBalancers、安全群組、端點等）。下圖說明了範例高階架構。這可讓中央聯網團隊控制 VPCs、子網路等聯網建構，同時允許應用程式或平台團隊在各自的 AWS 帳戶中部署 Amazon EKS 叢集。此案例的完整演練可在此 [github 儲存庫](https://github.com/aws-samples/eks-shared-subnets)取得。

![在跨 AWS 帳戶的 VPC 共用子網路中部署 Amazon EKS。](http://docs.aws.amazon.com/zh_tw/eks/latest/best-practices/images/networking/subnet_eks-shared-subnets.png)


#### 使用共用子網路時的考量事項
<a name="_considerations_when_using_shared_subnets"></a>
+ Amazon EKS 叢集和工作者節點可以在屬於相同 VPC 的共用子網路內建立。Amazon EKS 不支援跨多個 VPCs建立叢集。
+ Amazon EKS 使用 AWS VPC 安全群組 (SGs) 來控制 Kubernetes 控制平面與叢集工作者節點之間的流量。安全群組也用於控制工作者節點與其他 VPC 資源之間的流量，以及外部 IP 地址。您必須在應用程式/參與者帳戶中建立這些安全群組。確保您打算用於 Pod 的安全群組也位於參與者帳戶中。您可以在安全群組中設定傳入和傳出規則，以允許必要的流量往返中央 VPC 帳戶中的安全群組。
+ 在 Amazon EKS 叢集所在的參與者帳戶中建立 IAM 角色和相關政策。這些 IAM 角色和政策對於授予必要許可給 Amazon EKS 管理的 Kubernetes 叢集，以及在 Fargate 上執行的節點和 Pod 至關重要。許可可讓 Amazon EKS 代表您呼叫其他 AWS 服務。
+ 您可以遵循下列方法，允許跨帳戶從 k8s Pod 存取 AWS 資源，例如 Amazon S3 儲存貯體、Dynamodb 資料表等：
  +  **資源型政策方法**：如果 AWS 服務支援資源政策，您可以新增適當的資源型政策，以允許跨帳戶存取指派給 kubernetes Pod 的 IAM 角色。在此案例中，OIDC 提供者、IAM 角色和許可政策存在於應用程式帳戶中。若要尋找支援資源型政策的 AWS 服務，請參閱[使用 IAM 的 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，並在資源型欄中尋找具有是的服務。
  +  **OIDC 提供者方法**：將在資源存在的其他參與者 AWS 帳戶中建立 IAM 資源，例如 OIDC 提供者、IAM 角色、許可和信任政策。這些角色將指派給應用程式帳戶中的 Kubernetes Pod，以便他們可以存取跨帳戶資源。如需此方法的完整演練，請參閱 [Kubernetes 服務帳戶部落格的跨帳戶 IAM 角色](https://aws.amazon.com/blogs/containers/cross-account-iam-roles-for-kubernetes-service-accounts/)。
+ 您可以部署 Amazon Elastic Loadbalancer (ELB) 資源 (ALB 或 NLB)，將流量路由到應用程式或中央聯網帳戶中的 k8s Pod。如需在中央聯網帳戶中部署 ELB 資源的詳細說明，請參閱[透過跨帳戶Load Balancer公開 Amazon EKS Pod](https://aws.amazon.com/blogs/containers/expose-amazon-eks-pods-through-cross-account-load-balancer/)。此選項提供增強的彈性，因為它會授予中央網路帳戶對 Load Balancer 資源安全組態的完整控制權。
+ 使用 `custom networking feature` Amazon VPC CNI 時，您需要使用中央聯網帳戶中列出的可用區域 (AZ) ID 映射來建立每個 `ENIConfig`。這是因為實體 AZs 隨機映射到每個 AWS 帳戶中的 AZ 名稱。

### 安全群組
<a name="_security_groups"></a>

[https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)負責控制允許到達和離開其關聯資源的流量。Amazon EKS 使用安全群組來管理[控制平面和節點](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html)之間的通訊。當您建立叢集時，Amazon EKS 會建立名稱為 `eks-cluster-sg-my-cluster-uniqueID` 的安全群組。EKS 將這些安全群組與受管 ENIs和節點建立關聯。此安全群組的設計目的是允許來自控制平面和 受管節點群組的所有流量彼此之間可以自由流動，以及允許所有的輸出流量流往任何目的地。

建立叢集時，您可以指定自己的安全群組。當您指定自己的[安全群組時，請參閱安全群組的建議](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html)。

## 建議
<a name="_recommendations"></a>

### 考慮異地同步備份部署
<a name="_consider_multi_az_deployment"></a>

AWS 區域提供多個實體隔離和隔離的可用區域 (AZ)，這些可用區域與低延遲、高輸送量和高備援聯網連接。透過可用區域，您可以設計和操作在可用區域之間自動容錯移轉的應用程式，而不會中斷。Amazon EKS 強烈建議將 EKS 叢集部署到多個可用區域。當您建立叢集時，請考慮在至少兩個可用區域中指定子網路。

在節點上執行的 Kubelet 會自動將標籤新增至節點物件，例如 [http://topology.kubernetes.io/region=us-west-2,topology.kubernetes.io/zone=us-west-2d](http://topology.kubernetes.io/region=us-west-2,topology.kubernetes.io/zone=us-west-2d)。我們建議您使用節點標籤搭配 [Pod 拓撲分散限制](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/)，以控制 Pod 如何分散到各個區域。這些提示可讓 Kubernetes [排程器](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/)放置 Pod 以獲得更好的預期可用性，從而降低相關故障影響整個工作負載的風險。請參閱[將節點指派給 Pod](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector)，以查看節點選擇器和可用區域分散限制的範例。

您可以在建立節點時定義子網路或可用區域。如果未設定子網路，節點會放置在叢集子網路中。受管節點群組的 EKS 支援會自動將節點分散到可用容量的多個可用區域。如果工作負載定義拓撲分散限制，[Karpenter](https://karpenter.sh/) 將透過將節點擴展到指定的 AZs 來遵守 AZ 分散置放。

AWS Elastic Load Balancer 由 Kubernetes 叢集的 AWS Load Balancer 控制器管理。它為 Kubernetes 輸入資源佈建 Application Load Balancer (ALB)，並為 Loadbalancer 類型的 Kubernetes 服務佈建 Network Load Balancer (NLB)。Elastic Load Balancer 控制器使用[標籤](https://aws.amazon.com/premiumsupport/knowledge-center/eks-vpc-subnet-discovery/)來探索子網路。ELB 控制器至少需要兩個可用區域 (AZs)，才能成功佈建輸入資源。請考慮在至少兩個 AZs 中設定子網路，以利用地理備援的安全性和可靠性。

### 將節點部署至私有子網路
<a name="_deploy_nodes_to_private_subnets"></a>

包含私有和公有子網路的 VPC 是在 EKS 上部署 Kubernetes 工作負載的理想方法。請考慮在兩個不同的可用區域中設定至少兩個公有子網路和兩個私有子網路。公有子網路的相關路由表包含網際網路閘道 的路由。Pod 可以透過 NAT 閘道與網際網路互動。IPv6 環境 (EIGW) [中的輸出限定網際網路閘道](https://docs.aws.amazon.com/vpc/latest/userguide/egress-only-internet-gateway.html)支援私有子網路。

執行個體化私有子網路中的節點可對節點的流量提供最大控制，並對絕大多數的 Kubernetes 應用程式有效。傳入資源 （例如負載平衡器） 會在公有子網路中執行個體化，並將流量路由到在私有子網路上操作的 Pod。

如果您需要嚴格的安全和網路隔離，請考慮僅限私有模式。在此組態中，三個私有子網路會部署在 AWS 區域的 VPC 內不同的可用區域中。部署到子網路的資源無法存取網際網路，網際網路也無法存取子網路中的資源。若要讓您的 Kubernetes 應用程式存取其他 AWS 服務，您必須設定 PrivateLink 介面和/或閘道端點。您可以使用 AWS Load Balancer 控制器設定內部負載平衡器，將流量重新導向至 Pod。私有子網路必須加上標籤 ([http://kubernetes.io/role/internal-elb](http://kubernetes.io/role/internal-elb))，控制器才能佈建負載平衡器。若要讓節點向叢集註冊，叢集端點必須設定為私有模式。如需完整的需求和考量事項，請參閱[私有叢集指南](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html)。

### 考慮叢集端點的公有和私有模式
<a name="_consider_public_and_private_mode_for_cluster_endpoint"></a>

Amazon EKS 提供僅限公有、public-and-private和僅限私有的叢集端點模式。預設模式僅限公有，但我們建議在公有和私有模式中設定叢集端點。此選項允許叢集 VPC 內的 Kubernetes API 呼叫 （例如node-to-control-plane通訊） 利用私有 VPC 端點和流量來保留在叢集的 VPC 內。另一方面，您可以從網際網路連線您的叢集 API 伺服器。不過，我們強烈建議限制可以使用公有端點的 CIDR 區塊。[了解如何設定公有和私有端點存取，包括限制 CIDR 區塊。](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html#modify-endpoint-access)

當您需要安全和網路隔離時，我們建議使用僅限私有的端點。我們建議您使用 [EKS 使用者指南](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html#private-access)中列出的任一選項，私下連線至 API 伺服器。

### 仔細設定安全群組
<a name="_configure_security_groups_carefully"></a>

Amazon EKS 支援使用自訂安全群組。任何自訂安全群組都必須允許節點與 Kubernetes 控制平面之間的通訊。當您的組織不允許開放式通訊時，請檢查[連接埠需求](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html)並手動設定規則。

EKS 會將您在叢集建立期間提供的自訂安全群組套用至受管介面 (X-ENIs)。不過，它不會立即將它們與節點建立關聯。建立節點群組時，強烈建議手動[關聯自訂安全群組](https://eksctl.io/usage/schema/#nodeGroups-securityGroups)。請考慮啟用 [securityGroupSelectorTerms](https://karpenter.sh/docs/concepts/nodeclasses/#specsecuritygroupselectorterms)，以在節點自動擴展期間啟用自訂安全群組的 Karpenter 節點範本探索。

我們強烈建議建立安全群組，以允許所有節點間通訊流量。在引導程序期間，節點需要傳出網際網路連線才能存取叢集端點。評估外部存取需求，例如內部部署連線和容器登錄檔存取，並適當設定規則。在將變更放入生產環境之前，我們強烈建議您在開發環境中仔細檢查連線。

### 在每個可用區域中部署 NAT 閘道
<a name="_deploy_nat_gateways_in_each_availability_zone"></a>

如果您在私有子網路 (IPv4 和 IPv6) 中部署節點，請考慮在每個可用區域 (AZ) 中建立 NAT 閘道，以確保區域獨立架構並減少跨可用區域支出。AZ 中的每個 NAT 閘道都會以備援實作。