建立具有混合節點的 Amazon EKS 叢集 - Amazon EKS

協助改進此頁面

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

建立具有混合節點的 Amazon EKS 叢集

本主題提供可用選項的概觀,並介紹建立已啟用混合節點的 Amazon EKS 叢集時需要考量的事項。EKS 混合節點與包含雲端節點的 Amazon EKS 叢集具有相同的 Kubernetes 版本支援,包括標準支援和延長支援。

如果您未打算使用 EKS 混合節點,請參閱 建立 Amazon EKS 叢集 中的主要 Amazon EKS 建立叢集文件。

先決條件

  • 混合節點的先決條件設定 已完成。建立已啟用混合節點的叢集之前,您必須識別出內部部署節點和選用的 Pod CIDR,根據 EKS 要求和混合節點要求建立 VPC 和子網路,以及建立具有適用於內部部署和選用 Pod CIDR 的傳入規則的安全群組。如需有關這些先決條件的詳細資訊,請參閱 準備混合節點的聯網

  • 已在裝置上安裝和設定 AWS 命令列介面 (AWS CLI) 的最新版本。若要檢查您目前的版本,請使用 aws --version。如 yum、apt-get 或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI 落後數個版本之多。若要安裝最新版本,請參閱《AWS 命令列介面使用者指南》中的安裝或更新至最新版本的 AWS CLI設定 AWS CLI 的設定

  • 具有建立 IAM 角色和連接政策以及建立和描述 EKS 叢集之許可的 IAM 主體

考量事項

  • 您的叢集必須使用 APIAPI_AND_CONFIG_MAP 作為叢集身分驗證模式。

  • 您的叢集必須使用 IPv4 位址系列。

  • 您的叢集必須使用公有或私有叢集端點連線。您的叢集無法使用「公有和私有」叢集端點連線,因為 Amazon EKS Kubernetes API 伺服器端點會解析為在您的 VPC 外部執行的混合節點的公共 IP。

  • 具有混合節點的 EKS 叢集支援 OIDC 身分驗證。

  • 您可以新增、變更或移除現有叢集的混合節點組態。如需詳細資訊,請參閱 在現有的 Amazon EKS 叢集上啟用混合節點或修改組態

步驟 1:建立叢集 IAM 角色

如果您已擁有叢集 IAM 角色,或者您要使用 eksctl 或 AWS CloudFormation 來建立叢集,則可以略過此步驟。根據預設,eksctl 和 AWS CloudFormation 範本會為您建立叢集 IAM 角色。

  1. 執行下列命令以建立 IAM 信任政策 JSON 檔案。

    cat >eks-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
  2. 建立 Amazon EKS 叢集 IAM 角色。如有必要,請在 eks-cluster-role-trust-policy.json 前面加上您在上一步中寫入檔案的電腦的路徑。命令會將您在上一步驟中建立的信任策略與角色相關聯。若要建立 IAM 角色,必須為建立角色的 IAM 主體指派以下 iam:CreateRole 動作 (許可)。

    aws iam create-role \ --role-name myAmazonEKSClusterRole \ --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
  3. 您可以指派 Amazon EKS 受管政策或建立自己的自訂政策。如需了解在自訂政策中必須使用的最低許可,請參閱 Amazon EKS 節點 IAM 角色。將名為 AmazonEKSClusterPolicy 的 Amazon EKS 受管 IAM 政策連接到角色。若要將 IAM 政策連接至 IAM 主體,必須為連接政策的 IAM 實體指派以下 IAM 動作之一 (許可):iam:AttachUserPolicyiam:AttachRolePolicy

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \ --role-name myAmazonEKSClusterRole

步驟 2:建立已啟用混合節點的叢集

您可以透過以下方式建立叢集:

建立已啟用混合節點的叢集 - eksctl

您需要安裝最新版本的 eksctl 命令列工具。如需有關安裝或更新 eksctl 的指示,請參閱 eksctl 文件中的安裝一節。

  1. 建立 cluster-config.yaml 以定義已啟用混合節點的 Amazon EKS IPv4 叢集。請在您的 cluster-config.yaml 中執行下列取代。如需設定的完整清單,請參閱 eksctl 文件

    1. 使用您的叢集名稱取代 CLUSTER_NAME。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以英數字元開頭,且長度不可超過 100 個字元。在您要建立叢集的 AWS 區域和 AWS 帳戶中,該名稱必須是唯一的。

    2. 使用您要在其中建立叢集的 AWS 區域取代 AWS_REGION

    3. 使用任何 Amazon EKS 支援的版本取代 K8S_VERSION

    4. 使用 ssmira 取代 CREDS_PROVIDER,具體取決於您在 準備混合節點的憑證 步驟中設定的憑證提供者。

    5. 如果您的憑證提供者設定為 ira,且其使用 AWS IAM Roles Anywhere 作為憑證提供者,則取代 CA_BUNDLE_CERT。CA_BUNDLE_CERT 是憑證認證機構 (CA) 憑證內文,取決於您選擇的 CA。憑證必須是隱私權增強式郵件 (PEM) 格式。

    6. 使用要連接到 VPC 的虛擬私有閘道或傳輸閘道的 ID 取代 GATEWAY_ID

    7. 使用混合節點的內部部署節點 CIDR 取代 REMOTE_NODE_CIDRS

    8. 對於在混合節點上執行的工作負載,使用內部部署 Pod CIDR 取代為 REMOTE_POD_CIDRS;或者如果您未在混合節點上執行 Webhook,則請從組態中移除該行。如果在 Pod 流量離開您的內部部署主機時,您的 CNI 未使用網路位址轉譯 (NAT) 或偽裝 Pod IP 位址,您必須設定您的 REMOTE_POD_CIDRS。如果您在混合節點上執行 Webhook,您必須設定 REMOTE_POD_CIDRS,如需詳細資訊,請參閱 設定混合節點的 Webhook

    9. 您的內部部署節點和 Pod CIDR 區塊必須符合下列要求:

      1. 處於以下 IPv4 RFC-1918 範圍之一:10.0.0.0/8172.16.0.0/12192.168.0.0/16

      2. 您叢集的 VPC CIDR 或您的 Kubernetes Service IPv4 CIDR 不會彼此重疊

        apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: CLUSTER_NAME region: AWS_REGION version: "K8S_VERSION" remoteNetworkConfig: iam: provider: CREDS_PROVIDER # default SSM, can also be set to IRA # caBundleCert: CA_BUNDLE_CERT vpcGatewayID: GATEWAY_ID remoteNodeNetworks: - cidrs: ["REMOTE_NODE_CIDRS"] remotePodNetworks: - cidrs: ["REMOTE_POD_CIDRS"]
  2. 執行以下命令:

    eksctl create cluster -f cluster-config.yaml

    叢集佈建需要幾分鐘的時間。建立叢集時,會出現幾行輸出。輸出的最後一行類似於下面的範例行。

    [✓] EKS cluster "CLUSTER_NAME" in "REGION" region is ready
  3. 繼續進行 步驟 3:更新 kubeconfig

建立已啟用混合節點的叢集 - AWS CloudFormation

CloudFormation 堆疊會使用您指定的 RemoteNodeNetworkRemotePodNetwork 來建立 EKS 叢集 IAM 角色和 EKS 叢集。修改 CloudFormation 範本 如果您需要自訂 CloudFormation 範本中未公開的 EKS 叢集的設定。

  1. 下載 CloudFormation 範本。

    curl -OL 'https://raw.githubusercontent.com/aws/eks-hybrid/refs/heads/main/example/hybrid-eks-cfn.yaml'
  2. 建立 cfn-eks-parameters.json,並為每個值指定您的組態。

    1. CLUSTER_NAME:要建立的 EKS 叢集的名稱

    2. CLUSTER_ROLE_NAME:要建立的 EKS 叢集 IAM 角色的名稱。範本中的預設值為 "EKSClusterRole"。

    3. SUBNET1_ID:您在先決條件步驟中建立的第一個子網路的 ID

    4. SUBNET2_ID:您在先決條件步驟中建立的第二個子網路的 ID

    5. SG_ID:您在先決條件步驟中建立的安全群組 ID

    6. REMOTE_NODE_CIDRS:混合節點的內部部署節點 CIDR

    7. REMOTE_POD_CIDRS:在混合節點上執行的工作負載的內部部署 Pod CIDR。如果在 Pod 流量離開您的內部部署主機時,您的 CNI 未使用網路位址轉譯 (NAT) 或偽裝 Pod IP 位址,您必須設定您的 REMOTE_POD_CIDRS。如果您在混合節點上執行 Webhook,您必須設定 REMOTE_POD_CIDRS,如需詳細資訊,請參閱 設定混合節點的 Webhook

    8. 您的內部部署節點和 Pod CIDR 區塊必須符合下列要求:

      1. 處於以下 IPv4 RFC-1918 範圍之一:10.0.0.0/8172.16.0.0/12192.168.0.0/16

      2. 您叢集的 VPC CIDR 或您的 Kubernetes Service IPv4 CIDR 不會彼此重疊。

    9. CLUSTER_AUTH:您的叢集的叢集身分驗證模式。有效值為 APIAPI_AND_CONFIG_MAP。範本中的預設值為 API_AND_CONFIG_MAP

    10. CLUSTER_ENDPOINT:您叢集的叢集端點連線。有效值為 "Public" 或 "Private"。範本中的預設值為私有,這表示您只能從 VPC 內連接至 Kubernetes API 端點。

    11. K8S_VERSION:要用於您叢集的 Kubernetes 版本。請參閱 Amazon EKS 支援的版本

      { "Parameters": { "ClusterName": "CLUSTER_NAME", "ClusterRoleName": "CLUSTER_ROLE_NAME", "SubnetId1": "SUBNET1_ID", "SubnetId2": "SUBNET2_ID", "SecurityGroupId" "SG_ID", "RemoteNodeCIDR": "REMOTE_NODE_CIDRS", "RemotePodCIDR": "REMOTE_POD_CIDRS", "ClusterAuthMode": "CLUSTER_AUTH", "ClusterEndpointConnectivity": "CLUSTER_ENDPOINT", "K8sVersion": "K8S_VERSION" } }
  3. 部署 CloudFormation 堆疊。使用 CloudFormation 堆疊的名稱取代 STACK_NAME,並使用要建立叢集的 AWS 區域取代 AWS_REGION

    aws cloudformation deploy \ --stack-name STACK_NAME \ --region AWS_REGION \ --template-file hybrid-eks-cfn.yaml \ --parameter-overrides file://cfn-eks-parameters.json \ --capabilities CAPABILITY_NAMED_IAM

    叢集佈建需要幾分鐘的時間。您可以使用下列命令來檢查堆疊的狀態。使用 CloudFormation 堆疊的名稱取代 STACK_NAME,並使用要建立叢集的 AWS 區域取代 AWS_REGION

    aws cloudformation describe-stacks \ --stack-name STACK_NAME \ --region AWS_REGION \ --query 'Stacks[].StackStatus'
  4. 繼續進行 步驟 3:更新 kubeconfig

建立已啟用混合節點的叢集 - AWS CLI

  1. 執行下列命令以建立已啟用混合節點的 EKS 叢集和節點。執行命令之前,請使用您的設定取代下列內容。如需設定的完整清單,請參閱 建立 Amazon EKS 叢集 文件。

    1. CLUSTER_NAME:要建立的 EKS 叢集的名稱

    2. AWS_REGION:要建立叢集的 AWS 區域。

    3. K8S_VERSION:要用於您叢集的 Kubernetes 版本。請參閱 Amazon EKS 支援的版本。

    4. ROLE_ARN:您為叢集設定的 Amazon EKS 叢集角色。如需詳細資訊,請參閱 Amazon EKS 叢集 IAM 角色。

    5. SUBNET1_ID:您在先決條件步驟中建立的第一個子網路的 ID

    6. SUBNET2_ID:您在先決條件步驟中建立的第二個子網路的 ID

    7. SG_ID:您在先決條件步驟中建立的安全群組 ID

    8. 您可以使用 APIAPI_AND_CONFIG_MAP 作為叢集存取身分驗證模式。在以下命令中,叢集存取身分驗證模式設定為 API_AND_CONFIG_MAP

    9. 您可以使用 endpointPublicAccessendpointPrivateAccess 參數來啟用或停用叢集的 Kubernetes API 伺服器端點的公有和私有存取。在以下命令中,endpointPublicAccess 設定為 false,而 endpointPrivateAccess 設定為 true。

    10. REMOTE_NODE_CIDRS:混合節點的內部部署節點 CIDR。

    11. REMOTE_POD_CIDRS (選用):在混合節點上執行的工作負載的內部部署 Pod CIDR。

    12. 您的內部部署節點和 Pod CIDR 區塊必須符合下列要求:

      1. 處於以下 IPv4 RFC-1918 範圍之一:10.0.0.0/8172.16.0.0/12192.168.0.0/16

      2. Amazon EKS 叢集的 VPC CIDR 或您的 Kubernetes Service IPv4 CIDR 不會彼此重疊。

        aws eks create-cluster \ --name CLUSTER_NAME \ --region AWS_REGION \ --kubernetes-version K8S_VERSION \ --role-arn ROLE_ARN \ --resources-vpc-config subnetIds=SUBNET1_ID,SUBNET2_ID,securityGroupIds=SG_ID,endpointPrivateAccess=true,endpointPublicAccess=false \ --access-config authenticationMode=API_AND_CONFIG_MAP \ --remote-network-config '{"remoteNodeNetworks":[{"cidrs":["REMOTE_NODE_CIDRS"]}],"remotePodNetworks":[{"cidrs":["REMOTE_POD_CIDRS"]}]}'
  2. 佈建叢集需要幾分鐘才能完成。您可以使用下列命令來查詢叢集的狀態。使用您建立的叢集的名稱取代 CLUSTER_NAME,並使用要建立叢集的 AWS 區域取代 AWS_REGION。在傳回的輸出為 ACTIVE 之前,請勿進行下一個步驟。

    aws eks describe-cluster \ --name CLUSTER_NAME \ --region AWS_REGION \ --query "cluster.status"
  3. 繼續進行 步驟 3:更新 kubeconfig

建立已啟用混合節點的叢集 - AWS 管理主控台

  1. Amazon EKS 主控台開啟 Amazon EKS 主控台。

  2. 選取 Add cluster (新增叢集),然後選取 Create (建立)。

  3. 在 Configure cluster (設定叢集) 頁面上,輸入下列欄位:

    1. Name (名稱):叢集的名稱。名稱僅包含英數字元 (區分大小寫)、連字號和底線。必須以英數字元開頭,且長度不可超過 100 個字元。在您要建立叢集的 AWS 區域和 AWS 帳戶中,該名稱必須是唯一的。

    2. 叢集 IAM 角色:選擇您建立的 Amazon EKS 叢集 IAM 角色,以允許 Kubernetes 控制平面代表您來管理 AWS 資源。

    3. Kubernetes version (Kubernetes 版本) – 您的叢集使用的 Kubernetes 版本。我們建議選取最新版本,除非您需要較早版本。

    4. 升級政策:選擇延長或標準。

      1. 延長:此選項會在 Kubernetes 版本發布日期後持續為其提供 26 個月的支援。延長支援期間產生額外的每小時成本,該成本會從標準支援期間結束後開始計費。延長支援結束時,您的叢集將會自動升級至下一個版本。

      2. 延伸:此選項會在 Kubernetes 版本發布日期後持續為其提供 14 個月的支援。無需額外付費。標準支援結束時,您的叢集將會自動升級至下一個版本。

    5. 叢集存取 - 選擇允許或不允許叢集管理員存取,然後選取身分驗證模式。已啟用混合節點的叢集支援下列身分驗證模式。

      1. EKS API:叢集將僅從 EKS 存取項目 API 取得已經過身分驗證的 IAM 主體。

      2. EKS API 和 ConfigMap:叢集將從 EKS 存取項目 API 和 aws-auth ConfigMap 取得已經過身分驗證的 IAM 主體。

    6. Secrets encryption (秘密加密):(選用) 選擇使用 KMS 金鑰啟用 Kubernetes 秘密的秘密加密。您也可以在建立叢集後啟用此功能。啟用此功能之前,請確定您已熟悉 在現有叢集上使用 KMS 加密 Kubernetes 秘密 中的資訊。

    7. ARC 區域轉移:如果啟用,EKS 將向 ARC 區域轉移註冊您的叢集,以讓您能夠使用區域轉移將應用程式流量從可用區域轉移。

    8. Tags (標籤) – (選用) 將任何標籤新增到您的叢集。如需詳細資訊,請參閱 使用標籤組織 Amazon EKS 資源

    9. 完成此頁面後,請選擇下一步

  4. Specify networking (指定網路) 頁面上,選取下列欄位的值:

    1. VPC:選擇符合 檢視 VPC 和子網路的 Amazon EKS 聯網需求Amazon EKS 混合節點要求 的現有 VPC。選擇 VPC 之前,建議您先熟悉檢視 VPC、子網路和混合節點的 Amazon EKS 聯網需求中的所有要求和考量事項。建立叢集後,您無法變更要使用的 VPC。如果沒有列出 VPC,則您需要先建立一個。如需詳細資訊,請參閱 為您的 Amazon EKS 叢集建立 Amazon VPCAmazon EKS 混合節點聯網需求

    2. Subnets (子網路):根據預設,前一個欄位指定的 VPC 中的所有可用子網路會預先選取。您必須選取至少兩個。

    3. 安全群組:(選用) 指定一或多個您希望 Amazon EKS 與其建立的網路介面相關聯的安全群組。您指定的安全群組中至少有一個必須具有適用於內部部署節點和 (選用) Pod CIDR 的傳入規則。如需詳細資訊,請參閱 Amazon EKS 混合節點聯網需求。無論您是否選擇任何安全群組,Amazon EKS 都會建立一個安全群組,以支援您的叢集和 VPC 之間的通訊。Amazon EKS 將此安全群組及您選擇的任何群組與其建立的網路介面相關聯。如需有關 Amazon EKS 建立的叢集安全群組的詳細資訊,請參閱 檢視叢集的 Amazon EKS 安全群組要求 您可以修改 Amazon EKS 建立的叢集安全群組中的規則。

    4. 選擇叢集 IP 位址系列:您必須為已啟用混合節點的叢集選擇 IPv4。

    5. (選用) 選擇設定 Kubernetes 服務 IP 位址範圍,並指定服務 IPv4 範圍

    6. 選擇設定遠端網路以啟用混合節點,然後為混合節點指定您的內部部署節點和 Pod CIDR。

    7. 如果在 Pod 流量離開您的內部部署主機時,您的 CNI 未使用網路位址轉譯 (NAT) 或偽裝 Pod IP 位址,您必須設定您的遠端 Pod CIDR。如果您在混合節點上執行 Webhook,則必須設定遠端 Pod CIDR。

    8. 您的內部部署節點和 Pod CIDR 區塊必須符合下列要求:

      1. 處於以下 IPv4 RFC-1918 範圍之一:10.0.0.0/8172.16.0.0/12192.168.0.0/16

      2. 您叢集的 VPC CIDR 或您的 Kubernetes Service IPv4 CIDR 不會彼此重疊

    9. 針對 Cluster endpoint access (叢集端點存取),選取一個選項。建立叢集後,您可以變更此選項。對於已啟用混合節點的叢集,您必須選擇公有或私有。在選取非預設選項之前,請務必熟悉這些選項及其含義。如需詳細資訊,請參閱 叢集 API 伺服器端點

    10. 完成此頁面後,請選擇下一步

  5. (選用) 在設定可觀測性頁面上,選擇要開啟的指標和控制平面記錄選項。根據預設,系統會關閉每個日誌類型。

    1. 如需有關 Prometheus 指標選項的詳細資訊,請參閱 藉助 Prometheus 監控叢集指標

    2. 如需 EKS 控制記錄選項的詳細資訊,請參閱 將控制平面日誌傳送至 CloudWatch Logs

    3. 完成此頁面後,請選擇下一步

  6. Select add-ons (選取附加元件) 頁面上,選擇您要新增至叢集的附加元件。

    1. 您可以根據需要選擇任意多個 Amazon EKS 附加元件AWS Marketplace 附加元件。與混合節點不相容的 Amazon EKS 附加元件會標記為「與混合節點不相容」,並且附加元件具有反親和性規則,可防止其在混合節點上執行。如需詳細資訊,請參閱設定混合節點的附加元件。如果未列出您要安裝的 AWS Marketplace 附加元件,則可以在搜尋方框中輸入文字來搜尋可用的 AWS Marketplace 附加元件。您也可以依 category (類別)、vendor (廠商) 或 pricing model (定價模式) 進行搜尋,然後從搜尋結果中選擇附加元件。

    2. 一些附加元件,例如 CoreDNS 和 kube-proxy,是預設安裝的。如果停用任何預設附加元件,可能會影響您執行 Kubernetes 應用程式的能力。

    3. 完成此頁面後,請選擇 Next

  7. 設定選取的附加元件設定頁面上,選取您要安裝的版本。

    1. 建立叢集後,您隨時皆可更新至更新版本。您可以在建立叢集後更新每個附加元件的組態。如需有關設定附加元件的詳細資訊,請參閱更新 Amazon EKS 附加元件。如需與混合節點相容的附加元件版本,請參閱 設定混合節點的附加元件

    2. 完成此頁面後,請選擇下一步。

  8. Review and create (檢閱並建立) 頁面上,檢閱您在先前頁面上輸入或選取的資訊。如需變更,請選擇 Edit (編輯)。當您感到滿意時,請選擇建立。在佈建叢集時,Status (狀態) 欄位顯示 CREATING (正在建立)。叢集佈建需要幾分鐘的時間。

  9. 繼續進行 步驟 3:更新 kubeconfig

步驟 3:更新 kubeconfig

如果您使用 eksctl 建立叢集,則可以略過此步驟。這是因為 eksctl 已為您完成此步驟。透過向 kubectl 組態檔案新增內容,使 kubectl 能夠與您的叢集通訊。如需建立和更新檔案的詳細資訊,請參閱 透過建立 kubeconfig 檔案將 kubectl 連線至 EKS 叢集

aws eks update-kubeconfig --name CLUSTER_NAME --region AWS_REGION

範例輸出如下。

Added new context arn:aws:eks:AWS_REGION:111122223333:cluster/CLUSTER_NAME to /home/username/.kube/config

透過執行以下命令確認與叢集的通訊。

kubectl get svc

範例輸出如下。

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 28h

步驟 4:叢集設定

下一步,請參閱 準備混合節點的叢集存取,以啟用對混合節點的存取,進而加入叢集。