檢視 VPC 和子網路的 Amazon EKS 聯網需求 - Amazon EKS

協助改進此頁面

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

檢視 VPC 和子網路的 Amazon EKS 聯網需求

當您建立叢集時,您可以指定 VPC 和至少兩個位於不同可用區域的子網。本主題提供您與叢集一起使用的 VPC 和子網的 Amazon EKS 特定需求和注意事項的概觀。如果您沒有可與 Amazon EKS 搭配使用的 VPC,請參閱 為您的 Amazon EKS 叢集建立 Amazon VPC。如果您要在 AWS Outposts 上建立本機或擴充叢集,請參閱 為 AWS Outpost 上的 Amazon EKS 叢集建立 VPC 和子網路,而非本主題。本主題中的內容適用於具有混合節點的 Amazon EKS 叢集。如需適用於混合節點的其他聯網需求,請參閱 準備混合節點的聯網

VPC 要求和注意事項

當您建立叢集時,您指定的 VPC 必須符合下列要求和注意事項:

  • 針對您要建立的叢集、任何節點和其他 Kubernetes 資源,VPC 必須有足夠數目的 IP 地址。如果要使用的 VPC 沒有足夠數目的 IP 位址,請嘗試增加可用 IP 位址的數目。

    您可以更新叢集組態來變更叢集使用的子網路和安全群組,藉此完成此操作。您可以從 AWS 管理主控台、最新版本的 AWS CLI、AWS CloudFormation 和 eksctl 版本 v0.164.0-rc.0 或更高版本進行更新。這麼做才能為子網路提供更多可用 IP 地址,以成功升級叢集版本。

    重要

    您新增的所有子網路必須與建立叢集時原本提供的 AZ 位於同一組。新的子網路必須滿足所有其他要求,例如,它們必須具有足夠的 IP 地址。

    舉例來說,假設您建立叢集並指定四個子網路。依照您指定它們的順序,第一個子網路位於 us-west-2a 可用區域中,第二個和第三個子網路位於 us-west-2b 可用區域中,而第四個子網路位於 us-west-2c 可用區域中。如果要變更子網路,則必須在三個可用區域中各提供至少一個子網路,而且子網路必須與原始子網路位於相同的 VPC 中。

    如果您需要的 IP 地址超過 VPC 中的 CIDR 區塊,您可以將其他無類別域間路由 (CIDR) 區塊與 VPC 產生關聯,以新增其他 CIDR 區塊。您可以在建立叢集的之前或之後,將私有 (RFC 1918) 和公有 (非 RFC 1918) CIDR 區塊與 VPC 關聯。

    在新增新的 CIDR 區塊後,您可以立即新增使用該新區塊的節點。不過,由於控制平面僅在調解完成後才能辨識新的 CIDR 區塊,因此對於與 VPC 相關聯的 CIDR 區塊,可能需要最多一小時才能辨識叢集。然後,您可以在新的 CIDR 區塊中對節點和 Pod 執行 kubectl cpkubectl execkubectl logskubectl port-forward 命令 (這些命令會使用 kubelet API)。此外,如果您有作為 Webhook 後端運作的 Pod,那麼您必須等待控制平面調解完成。

  • 當您透過 Transit Gateway、VPC 對等互連或其他聯網組態將 EKS 叢集連線至其他 VPC 時,請避免 IP 位址範圍重疊。當您 EKS 叢集的服務 CIDR 與連接的 VPC 的 CIDR 重疊時,即會發生發生 CIDR 衝突。在這些情況下,ServiceIP 位址會優先於具有相同 IP 位址的已連接的 VPC 中的資源,雖然流量路由可能會變得無法預測,並且應用程式可能無法連接到預期資源。

    為避免 CIDR 衝突,請確保您的 EKS 服務 CIDR 不會與任何已連接的 VPC CIDR 重疊,並會維護所有 CIDR 指派的集中記錄。如果您遇到 CIDR 重疊的情況,則您可以搭配傳輸閘道使用共用服務 VPC。如需詳細資訊,請參閱隔離 VPC 與共享服務混合網路中的 Amazon EKS VPC 可路由 IP 地址保護模式。另外,請參閱《EKS 最佳實務指南》中 VPC 和子網路考量頁面的「跨 VPC 通訊」一節。

  • 如果您希望 Kubernetes 指派 IPv6 地址至 Pod 和服務,請將 IPv6 CIDR 區塊與 VPC 建立關聯。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的建立 IPv6 CIDR 區塊與 VPC 的關聯。您無法搭配使用 IPv6 地址與在混合節點上執行的 Pod 和服務,亦無法將混合節點與使用 IPv6 IP 位址系列設定的叢集搭配使用。

  • VPC 必須支援 DNS 主機名稱和 DNS 解析。否則,節點無法註冊至您的叢集。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的 VPC 的 DNS 屬性

  • VPC 可能需要使用 AWS PrivateLink 的 VPC 端點。如需詳細資訊,請參閱 子網需求和注意事項

如果您使用 Kubernetes 1.14 或舊版建立叢集,Amazon EKS 會將以下標籤新增至您的 VPC:

金鑰

kubernetes.io/cluster/my-cluster

owned

此標籤僅供 Amazon EKS 使用。您可以在不影響服務的情況下移除該標籤。其不會與版本 1.15 或更新版本的叢集搭配使用。

子網需求和注意事項

當您建立叢集時,Amazon EKS 會在您指定的子網中建立 2-4 個彈性網路介面。這些網路介面啟用您的叢集和 VPC 之間的通訊。這些網路介面還啟用了 Kubernetes 的功能,例如 kubectl execkubectl logs。每個 Amazon EKS 建立的網路介面都在其說明中包含 Amazon EKS cluster-name 字樣。

Amazon EKS 可以在您建立叢集時指定的任何子網中建立其網路介面。建立叢集後,您可以變更 Amazon EKS 要在其中建立網路介面的子網路。當您更新叢集的 Kubernetes 版本時,Amazon EKS 會刪除其建立的原始網路介面,並建立新的網路介面。這些網路介面可能在與原始網路介面相同的子網中建立,或在與原始網路介面不同的子網中建立。若要控制在其中建立的子網路網路介面,可以將建立叢集時指定的子網路數量限制為僅有兩個子網路,或在建立叢集後更新子網路。

叢集的子網路要求

您建立或更新叢集時指定的子網路必須符合下列要求:

  • 每個子網必須至少有六個 IP 地址,以供 Amazon EKS 使用。但是,我們建議至少使用 16 個 IP 地址。

  • 子網路必須位於至少兩個不同的可用區域。

  • 子網路不能位於 AWS Outposts 或 AWS Wavelength 中。但是,如果您的 VPC 中有它們,則可以部署自我管理的節點和 Kubernetes 資源到這些類型的子網。如需有關自我管理節點的詳細資訊,請參閱 藉助自我管理節點來自行維護節點

  • 子網可以是公有子網,也可以是私有子網。不過,如果可能的話,我們建議您指定私有子網。公有子網路是一種子網路,其路由表包含到網際網路閘道的路由,而私有子網路也是一種子網路,其路由表不包括到網際網路閘道路由。

  • 子網路不能位於下列可用區域:

    AWS 區域 區域名稱 不允許的可用區域 ID

    us-east-1

    美國東部 (維吉尼亞北部)

    use1-az3

    us-west-1

    美國西部 (加利佛尼亞北部)

    usw1-az2

    ca-central-1

    加拿大 (中部)

    cac1-az3

依元件劃分的 IP 位址系列使用情況

下表包含 Amazon EKS 每個元件所使用的 IP 位址系列。您可以使用網路位址轉譯 (NAT) 或其他相容性系統,從具有資料表項目值為 "No" 的系列中的來源 IP 位址連接到這些元件。

功能可能會因叢集的 IP 系列 (ipFamily) 設定而異。此設定會變更 Kubernetes 指派給服務的 CIDR 區塊所使用的 IP 位址類型。設定值為 IPv4 的叢集稱為 IPv4 叢集,而設定值為 IPv6 的叢集則稱為 IPv6 叢集

元件 IPv4 地址 IPv6 地址 雙堆疊地址

EKS API 公有端點

1、3

1、3

1、3

EKS API VPC 端點

EKS 身分驗證 API 公有端點 (EKS Pod 身分識別)

1

1

1

EKS 身分驗證 API VPC 端點 (EKS Pod 身分識別)

1

1

1

IPv4 Kubernetes 叢集公有端點2

IPv4 Kubernetes 叢集私有端點2

IPv6 Kubernetes 叢集公有端點2

1、4

1、4

4

IPv6 Kubernetes 叢集私有端點2

1、4

1、4

4

Kubernetes 叢集子網路

2

2

節點主要 IP 位址

2

2

服務 IP 位址的叢集 CIDR 範圍

2

2

來自 VPC CNI 的 Pod IP 位址

2

2

IRSA OIDC 發行者 URL

1、3

1、3

1、3

注意

1 端點是雙堆疊,具有 IPv4IPv6 地址。AWS 的外部應用程式、叢集的節點以及叢集內的 Pod 都可以透過 IPv4IPv6 到達此端點。

2 當您建立叢集時,您可以在叢集的 IP 系列 (ipFamily) 設定中選擇 IPv4 叢集和 IPv6 叢集,並且這一點無法變更。相反地,在您建立另一個叢集並移轉工作負載時,您必須選擇不同的設定。

3 雙堆疊端點已於 2024 年 8 月推出。若要搭配 AWS CLI 使用雙堆疊端點,請參閱《AWS SDK 和工具參考指南》中的雙堆疊和 FIPS 端點組態。下面列出了新的端點:

EKS API 公有端點

eks.region.api.aws

IRSA OIDC 發行者 URL

oidc-eks.region.api.aws

4 雙堆疊叢集端點已於 2024 年 10 月推出。EKS 會為新叢集建立下列端點,其中這些新叢集是在此日期之後建立的並且會在叢集的 IP 系列 (ipFamily) 設定中選取 IPv6

EKS 叢集公有/私有端點

eks-cluster.region.api.aws

節點的子網路要求

您可以將節點和 Kubernetes 資源部署到您建立叢集時指定的相同子網。不過,這不是必要的。這是因為您還可以將節點和 Kubernetes 資源部署至建立叢集時未指定的子網路。如果將節點部署到不同的子網路,Amazon EKS 不會在這些子網路中建立叢集網路介面。您部署節點和 Kubernetes 資源的任何子網必須符合以下要求:

  • 子網必須具有足夠的可用 IP 地址,以便將所有節點和 Kubernetes 資源部署至其中。

  • 如果您希望 Kubernetes 指派 IPv6 地址至 Pod 和服務,則必須有一個 IPv6 CIDR 區塊和一個與子網路相關聯的 IPv4 CIDR 區塊。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的建立 IPv6 CIDR 區塊與子網路的關聯。與子網關聯的路由表必須包含傳送到 IPv4IPv6 地址的路由。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的 Routes (路由)。Pod 僅指派一個 IPv6 地址。但是,Amazon EKS 為您的叢集和節點建立的網路介面受指派一個 IPv4 和一個 IPv6 地址。

  • 如果您需要從網際網路對您的 Pod 進行傳入存取,請確保至少有一個公有子網路 (具有足夠可用的 IP 位址) 來為其部署負載平衡器和傳入。您可以將負載平衡器部署至公有子網。負載均衡器可以對私有子網路或公有子網路中的 Pod 進行負載平衡。如果可能的話,我們建議您將節點部署至私有子網。

  • 如果您計畫將節點部署到公有子網,則該子網必須自動指派 IPv4 公有地址或 IPv6 地址。如果您將節點部署到具有相關聯 IPv6 CIDR 區塊的子網,則私有子網也必須自動指派 IPv6 地址。如果您在 2020 年 3 月 26 日之後使用 Amazon EKS 提供的 AWS CloudFormation 範本部署您的 VPC,則會啟用此設定。如果在此日期之前使用範本部署 VPC,或者使用自己的 VPC,則必須手動啟用此設定。如需範本,請參閱 為您的 Amazon EKS 叢集建立 Amazon VPC。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的修改子網路的公有 IPv4 定址屬性修改子網路的 IPv6 定址屬性

  • 如果您將節點部署到的子網路是私有子網路,且其路由表不包含通往網路位址轉譯 (NAT) 設備的路由 (IPv4) 或是僅輸出閘道 (IPv6),使用 AWS PrivateLink 新增 VPC 端點到您的 VPC。節點和 Pod 需要與之通訊的所有 AWS 服務都需要 VPC 端點。範例包括 Amazon ECR、Elastic Load Balancing、Amazon CloudWatch、AWS Security Token Service 和 Amazon Simple Storage Service (Amazon S3)。端點必須包含節點所在的子網。並非所有的 AWS 服務都支援 VPC 端點。如需詳細資訊,請參閱《什麼是 AWS PrivateLink?》和與 AWS PrivateLink 整合的 AWS 服務。有關更多 Amazon EKS 要求的列表,請參閱 部署網際網路存取受到限制的私有叢集

  • 如果要將負載平衡器部署到子網,則子網必須具有以下標籤:

    • 私有子網路

      金鑰

      kubernetes.io/role/internal-elb

      1

    • 公有子網路

      金鑰

      kubernetes.io/role/elb

      1

如果建立的是版本 1.18 及更舊版本的 Kubernetes 叢集,Amazon EKS 會將下列標籤新增至指定的所有子網路。

金鑰

kubernetes.io/cluster/my-cluster

shared

現在,當您建立新的 Kubernetes 叢集時,Amazon EKS 不會將標籤新增至您的子網路。如果叢集所使用的子網路具有標籤,而且該叢集此前的版本早於 1.19,則當叢集更新為較新版本時,系統不會自動從子網路移除該標籤。版本 2.1.1 或更舊版本的 AWS Load Balancer 控制器需要此標籤。如果您使用較新版本的 Load Balancer Controller,則您無須中斷服務便可移除標籤。如需有關控制器的詳細資訊,請參閱 透過 AWS Load Balancer 控制器路由網際網路流量

如果您已使用 eksctl 或使用任何 Amazon EKS AWS CloudFormation VPC 範本部署了 VPC,則適用下列項目:

  • 在 2020 年 3 月 26 日或之後:公有 IPv4 地址會由公有子網自動指派給此公有子網中已部署的新節點。

  • 在 2020 年 3 月 26 日之前:公有 IPv4 地址不會由公有子網路自動指派給已部署到此公有子網路的新節點。

這項變更會影響部署於公有子網中的新節點群組的下列行為:

共用子網路需求和注意事項

您可以使用 VPC 共用來與相同 AWS Organizations 內的其他 AWS 帳戶共用子網路。您可以在共用子網路中建立 Amazon EKS 叢集,但會有下列考量:

  • VPC 子網路的擁有者必須與參與者帳戶共用子網路,該帳戶才能在其中建立 Amazon EKS 叢集。

  • 您無法使用 VPC 的預設安全群組來啟動資源,因為預設安全群組屬於擁有者。此外,參與者無法啟動使用由其他參與者或擁有者所擁有之安全群組的資源。

  • 在共用子網路中,參與者和擁有者會分別控制每個各別帳戶內的安全群組。子網路擁有者可以查看由參與者建立的安全群組,但無法執行任何動作。如果子網路擁有者想要移除或修改這些安全群組,建立安全群組的參與者必須採取動作。

  • 如果叢集是由參與者建立,則需要考量下列事項:

  • 共用 VPC 擁有者無法檢視、更新或刪除參與者在共用子網路中建立的叢集。此為 VPC 資源 (每個帳戶具有不同存取權) 以外。如需更多資訊,請參閱《Amazon VPC 使用者指南》中的擁有者和參與者的責任與許可

  • 如果您使用 Kubernetes 專用 Amazon VPC CNI 外掛程式的自訂聯網功能,您需要使用擁有者帳戶中列出的可用區域 ID 映射來建立每個 ENIConfig。如需詳細資訊,請參閱 使用自訂聯網在替代子網路中部署 Pod

如需有關 VPC 子網路共用的詳細資訊,請參閱《Amazon VPC 使用者指南》中的與其他帳戶共用 VPC