準備將管理叢集部署到 AWS

本主題說明如何準備 Amazon Web Services (AWS),以執行 Tanzu Kubernetes Grid。

在使用 Tanzu CLI 或安裝程式介面來部署管理叢集之前,您必須先準備要執行 Tanzu CLI 的啟動機器,並設定 Amazon Web Services (AWS) 帳戶。

如果您要將 Tanzu Kubernetes Grid 安裝在 VMware Cloud on AWS 上,您會安裝到 vSphere 環境中。請參閱〈準備將管理叢集部署到 VMware Cloud 環境〉中的準備 VMware Cloud on AWS,以及準備將管理叢集部署到 vSphere,以部署管理叢集。

重要

Tanzu Kubernetes Grid v2.4.x 是支援在 AWS 上建立獨立 TKG 管理叢集的最後一個 TKG 版本。在 Tanzu Kubernetes Grid v2.5 中,將移除在 AWS 上建立獨立 TKG 管理叢集的功能。

從現在開始,VMware 建議您使用 Tanzu Mission Control 建立原生 AWS EKS 叢集,而不是在 AWS 上建立新的 TKG 管理叢集。有關如何使用 Tanzu Mission Control 原生 AWS EKS 叢集的資訊,請參見《Tanzu Mission Control》說明文件中的管理 AWS EKS 叢集的生命週期

有關詳細資訊,請參見《VMware Tanzu Kubernetes Grid v2.4 發行說明》中的〈棄用 AWS 和 Azure 上的 TKG 管理和工作負載叢集〉

一般需求

  • Tanzu CLI 已安裝在本機。請參閱安裝 Tanzu CLI 和 Kubernetes CLI 以與獨立管理叢集配合使用
  • 您具有作用中 AWS 帳戶,且其具有:
    • 存取金鑰和存取金鑰密碼。如需存取金鑰的詳細資訊,請參閱 AWS 說明文件中的 AWS 帳戶和存取金鑰
    • 需要 AWS 權限中所述的權限。這些權限可讓 Tanzu Kubernetes Grid 在 AWS 上建立和管理叢集。
  • 您要在其中部署管理叢集的可用區域中的 VPC。例如,您手動建立或使用 AWS CloudFormationTerraform 等工具來建立的 VPC。所設定的 VPC 必須具有:
    • 若為開發叢集,則具有兩個子網路;若為生產叢集,則具有六個子網路。
    • NAT 閘道 (如下所示),否則請參閱沒有 NAT 閘道的 Amazon VPC
      • 若為開發叢集,則具有一個 NAT 閘道;若為生產叢集,則具有三個 NAT 閘道。
      • 一個網際網路閘道和對應的路由表。
      • (選用) 設有適當規則的安全群組
  • 您的 AWS 帳戶具有足夠的資源配額以用於彈性 IP (EIP) 位址。預設 EIP 配額是每個帳戶的每一個區域各有 5 個 EIP 位址。
  • 允許在本機啟動機器與您所建立的叢集中所有虛擬機器的連接埠 6443 之間,傳輸流量。依預設,會在連接埠 6443 公開 Kubernetes API。若要針對管理叢集或工作負載叢集變更這個連接埠,請在部署叢集時,設定 CLUSTER_API_SERVER_PORT 變數。
  • 對於 TCP,允許在本機啟動機器與管理叢集用料表清單 (BOM) 檔案中列出的映像存放庫之間,透過連接埠 443 傳輸流量。*

    • BOM 檔案位於 ~/.config/tanzu/tkg/bom/ 下,且其名稱包含 Tanzu Kubernetes Grid 版本,例如 v2.4.0 的 tkg-bom-v2.4.0+vmware.1.yaml
    • 對所有 imageRepository 值 (例如,projects.registry.vmware.com/tkg) 執行 DNS 查閱,以尋找允許存取的 CNAME。
  • AWS CLI 會安裝在本機。

  • jq 安裝在本機。

    AWS CLI 指南會使用 jq,以在建立 SSH 金鑰配對時處理 JSON。當您使用 CLI 來部署 Tanzu Kubernetes Grid 時,它還用來準備環境或組態變數。

  • 若要使用 CAPA 來解決已知問題,請在本機環境或管理叢集組態檔中,設定 EXP_EXTERNAL_RESOURCE_GC=false

*或者參閱準備網際網路受限的環境,以便在無法存取外部網路的情況下安裝。

AWS 帳戶中的資源使用狀況

對於您建立的每個叢集,Tanzu Kubernetes Grid 會在您的 AWS 帳戶中各使用一組資源。

資源 Tanzu Kubernetes Grid 使用
VPC 1
彈性 IP 位址 每個可用區域各有 1 個* (AZ)
子網路 連結網際網路的每個 AZ 各有 2 個;內部的每個 AZ 各有 1 個*
EC2 安全群組 (VPC) 4
網際網路閘道 1
NAT 閘道 預設* 部署每個 AZ 各有 1 個
控制平面 EC2 執行個體 每個 AZ 各有 1 個*

*開發叢集會使用一個可用區域,生產叢集會使用 3 個可用區域。

AWS 會對這些資源實作預設限制或配額,並允許您修改限制。一般而言,預設限制足以讓您開始建立和使用叢集,但隨著您增加叢集或工作負載計數,就可能超出這些 AWS 限制,從而阻止 Tanzu Kubernetes Grid 建立新叢集或部署新工作負載。

VMware 建議您定期評估您已在 AWS 帳戶中指定的限制,並視需要要求增加服務配額,以符合您的業務需求。

最相關的服務配額包括:

服務代碼 配額名稱 配額代碼
vpc 每個區域的網際網路閘道數 L-A4707A72
vpc 每個可用區域的 NAT 閘道數 L-FE5A380F
vpc 每個區域的 VPC 數 L-F678F1CE
ec2 執行中的隨需標準 (A、C、D、H、I、M、R、T、Z) 執行個體數 L-1216C47A
ec2 EC2-VPC 彈性 IP 數 L-0263D0A3
elasticloadbalancing 每個區域的傳統負載平衡器數 L-E9E9831D

您可以選擇性地共用 VPC,而不建立新的 VPC,例如:工作負載叢集與其管理叢集共用 VPC。

如需叢集節點執行個體大小的相關資訊,請參閱 AWS 說明文件中的 Amazon EC2 執行個體類型

沒有 NAT 閘道的 Amazon VPC

只要符合下列任一條件,即可將 Tanzu Kubernetes Grid 部署到未連結 NAT 閘道的 VPC:

  • 要在其中部署工作負載叢集的子網路具有路由表,其中 0.0.0.0/0 會路由到網際網路;或者,
  • 您的部署環境中的網際網路受到限制,如準備網際網路受限環境中所述。

Tanzu Kubernetes Grid 不會檢查路由表中是否存在特定路由。因此,支援透過 VPC NAT 閘道、EC2 執行個體或應用裝置、網際網路閘道、傳輸閘道或 DirectConnect 進行網際網路連線。

管理叢集大小調整範例

下表說明 AWS 上的管理叢集大小調整範例。請使用此資料作為指引,以確保管理叢集已調整,而能處理您計劃部署的工作負載叢集數量。工作負載叢集的虛擬機器大小資料行列出用於可以管理… 資料行中範例的虛擬機器大小。

管理叢集計劃 管理叢集的虛擬機器大小 可以管理… 工作負載叢集的虛擬機器大小
3 個控制平面節點和 3 個工作節點
  • 控制平面節點:m4.large (CPU:2;記憶體:8 GB)
  • 工作節點:m4.large (CPU:2;記憶體:8 GB)
範例:
  • 5 個工作負載叢集,每個叢集各部署了 3 個控制平面和 200 個工作節點;或者
  • 10 個工作負載叢集,每個叢集各部署了 3 個控制平面和 50 個工作節點
  • 控制平面節點:c4.large (CPU:2;記憶體:3.75 GB)
  • 工作節點:c4.large (CPU:2;記憶體:3.75 GB)
3 個控制平面節點和 3 個工作節點
  • 控制平面節點:m4.large (CPU:2;記憶體:8 GB)
  • 工作節點:m4.large (CPU:2;記憶體:8 GB)
範例:一個工作負載叢集,其中部署了 3 個控制平面和 500 個工作節點
  • 控制平面節點:c5.4xlarge (CPU:16;記憶體:32 GB)
  • 工作節點:c5.xlarge (CPU:4;記憶體:8 GB)
3 個控制平面節點和 3 個工作節點
  • 控制平面節點:m4.xlarge (CPU:4;記憶體:16 GB)
  • 工作節點:m4.xlarge (CPU:4;記憶體:16 GB)
範例:200 個工作負載叢集,每個叢集各部署了 3 個控制平面和 5 個工作節點
  • 控制平面節點:c4.large (CPU:2;記憶體:3.75 GB)
  • 工作節點:c4.large (CPU:2;記憶體:3.75 GB)

所需的 AWS 權限

以下小節列出 Tanzu Kubernetes Grid 在 AWS 上部署和管理叢集時所需的權限:

  • Tanzu Kubernetes Grid 所設定的權限:當您執行 tanzu mc permissions aws set 命令,或在安裝程式介面中選取自動建立 AWS CloudFormation 堆疊 (Automate creation of AWS CloudFormation Stack) 核取方塊時,Tanzu Kubernetes Grid 會自動設定這些權限。
    • Tanzu CLI 別名 mcmanagement-cluster 的縮寫。
  • 您設定的權限:您可以手動新增這些權限。

Tanzu Kubernetes Grid 所設定的權限

若要讓 Tanzu Kubernetes Grid 能夠將叢集部署到 AWS,您必須在 AWS 帳戶中建立 CloudFormation 堆疊 tkg-cloud-vmware-com。此 CloudFormation 堆疊定義了 Tanzu Kubernetes Grid 在 AWS 上部署和管理叢集所需的身分識別和存取管理 (IAM) 資源和權限。

若要建立堆疊,請在完成本主題中的步驟後,在部署叢集之前執行 tanzu mc permissions aws set 命令,或在安裝程式介面中選取自動建立 AWS CloudFormation 堆疊 (Automate creation of AWS CloudFormation Stack) 核取方塊,如從組態檔部署管理叢集建立 IAM 資源一節中所述,或使用安裝程式介面部署管理叢集中所述。無論您打算在 Tanzu Kubernetes Grid 環境中使用一個還是多個 AWS 區域,您都只需為每個 AWS 帳戶執行一次此作業即可。

執行 tanzu mc permissions aws set 或選取自動建立 AWS CloudFormation 堆疊 (Automate creation of AWS CloudFormation Stack) 時,會建立以下 IAM 設定檔、角色和原則。對於您在建立堆疊時將其認證提供給 Tanzu Kubernetes Grid 的使用者來說,他必須具有管理員權限,才能在 AWS 帳戶中建立這些 IAM 資源。

  • 設定檔 / AWS::IAM::InstanceProfile

    • 控制平面control-plane.tkg.cloud.vmware.com:供執行 Kubernetes 控制平面元件的 EC2 執行個體使用。
    • 節點nodes.tkg.cloud.vmware.com:供 Tanzu Kubernetes Grid 叢集中的所有非控制平面 EC2 執行個體使用。
    • 控制器controllers.tkg.cloud.vmware.com:可用來從連結了執行個體設定檔的 EC2 中的 Jumpbox,來啟動載入 Tanzu Kubernetes Grid。
  • 角色 / AWS::IAM::Role:這些角色以 1:1 對應至上述的 AWS IAM 執行個體設定檔:

    • 控制平面control-plane.tkg.cloud.vmware.com
    • 節點nodes.tkg.cloud.vmware.com
    • 控制器controllers.tkg.cloud.vmware.com
  • 原則 / AWS::IAM::ManagedPolicy

    • arn:aws:iam::YOUR-ACCOUNT-ID:policy/control-plane.tkg.cloud.vmware.com:會連結到上述控制平面 IAM 角色。
    • arn:aws:iam::YOUR-ACCOUNT-ID:policy/nodes.tkg.cloud.vmware.com:會連結到上述控制平面節點 IAM 角色。
    • arn:aws:iam::YOUR-ACCOUNT-ID:policy/controllers.tkg.cloud.vmware.com:會連結到上述控制平面控制器 IAM 角色。

當 Tanzu Kubernetes Grid 在您的 AWS 帳戶中建立 CloudFormation 堆疊後,您可以在 AWS 主控台中導覽至 CloudFormation > 堆疊 (Stacks),來擷取其範本。如需 CloudFormation 堆疊的詳細資訊,請參閱 AWS 說明文件中的使用堆疊

或者,您可以擷取 Tanzu Kubernetes Grid 用來建立上述 IAM 資源的範本,並在 AWS 帳戶中直接建立 tkg-cloud-vmware-com 堆疊,而不是執行 tanzu mc permissions aws set 或選取自動建立 AWS CloudFormation 堆疊 (Automate creation of AWS CloudFormation Stack)。若要擷取範本,請執行 tanzu mc permissions aws generate-cloudformation-template

Tanzu Mission Control 所需的權限

僅當您打算向 Tanzu Mission Control 登錄管理叢集時,才需要以下 IAM 權限。執行 tanzu mc permissions aws set 命令時,會自動將這些權限新增到 nodes.tkg.cloud.vmware.com IAM 角色。

{
  "Action": [
    "servicequotas:ListServiceQuotas",
    "ec2:DescribeKeyPairs",
    "ec2:DescribeInstanceTypeOfferings",
    "ec2:DescribeInstanceTypes",
    "ec2:DescribeAvailabiilityZones",
    "ec2:DescribeRegions",
    "ec2:DescribeSubnets",
    "ec2:DescribeRouteTables",
    "ec2:DescribeVpcs",
    "ec2:DescribeNatGateways",
    "ec2:DescribeAddresses",
    "elasticloadbalancing:DescribeLoadBalancers"
  ],
  "Resource": [
    "*"
  ],
  "Effect": "Allow"
}

在您執行 tanzu mc permissions aws set 之前,可以將 DISABLE_TMC_CLOUD_PERMISSIONS 設定為 true,來停用這些權限。如需詳細資訊,請參閱向 Tanzu Mission Control 登錄管理叢集

您設定的權限

您必須為每個 AWS 帳戶手動設定一次下列權限。

安裝程式介面

如果要從安裝程式介面來部署管理叢集,對於您在部署叢集時將其認證提供給 Tanzu Kubernetes Grid 的使用者來說,他必須具有 "ec2:DescribeInstanceTypeOfferings""ec2:DescribeInstanceTypes" 權限。如果您的使用者目前沒有這些權限,您可以建立一項包含這些權限的自訂原則,並將其連結至您的使用者。

設定 AWS 帳戶認證

若要使 Tanzu Kubernetes Grid 能夠在 Amazon EC2 上建立和管理虛擬機器,它必須具有 AWS 帳戶以及:

  • AWS 帳戶的認證
  • SSH 金鑰配對,並已登錄在您計劃部署管理叢集的每一個 AWS 區域的帳戶中

您必須設定帳戶認證,以便針對您計劃部署 Tanzu Kubernetes Grid 叢集的區域,建立 SSH 金鑰配對。

在您設定用來存取 EC2 的 AWS 帳戶認證時,有多個選項可選。以下小節說明不同的選項。

VMware 建議使用 [認證設定檔 (Credential Profiles)] 選項,該選項使用 aws configure 命令進行管理。這些設定檔會儲存到本機共用組態檔中,通常位於 ~/.aws/config

當使用多個認證時,依遞減優先順序排序,可能的認證組態選項包括:

  1. 工作負載叢集組態檔變數 (僅用來建立工作負載叢集)。請參閱下方的叢集組態檔

  2. 本機靜態環境變數。請參閱下方的本機環境變數

  3. (建議) 認證設定檔,會在執行 aws configure 時更新。這些項目會儲存到 ~/.aws/config (若為 Linux 或 macOS) 或 C:\Users\USERNAME\.aws\config (若為 Windows),或者可將它命名為 credentials。請參閱下方的認證設定檔

  4. 執行個體設定檔認證。您可以讓 IAM 角色與每個 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體產生關聯。之後,該角色的臨時認證可供正在執行個體中執行的程式碼使用。認證是透過 Amazon EC2 中繼資料服務傳遞。如需詳細資訊,請參閱《適用於 Linux 執行個體的 Amazon EC2 使用者指南》中的〈AWS 的 IAM 角色〉以及《IAM 使用者指南》中的〈使用執行個體設定檔〉。

本機環境變數

當設定 AWS 認證時,其中一個選項是在啟動機器上設定本機環境變數。若要使用本機環境變數,請為您的 AWS 帳戶設定以下環境變數:

  • export AWS_ACCESS_KEY_ID=aws_access_key,其中 aws_access_key 是 AWS 存取金鑰。

  • export AWS_SECRET_ACCESS_KEY=aws_access_key_secret,其中 aws_access_key_secret 是 AWS 存取金鑰密碼。

  • export AWS_SESSION_TOKEN=aws_session_token,其中 aws_session_token 是授與您帳戶的 AWS 工作階段 Token。僅當需要使用臨時存取金鑰時,才需要指定此變數。如需使用臨時存取金鑰的詳細資訊,請參閱瞭解並取得 AWS 認證

  • export AWS_REGION=aws_region,其中 aws_region 是您要在其中部署叢集的 AWS 區域。例如,us-west-2

    如需 AWS 區域完整清單,請參閱 AWS 服務端點。除了一般的 AWS 區域外,您還可以在 AWS GovCloud 中指定 us-gov-eastus-gov-west 區域。

Tanzu Kubernetes Grid 支援以下 AWS CLI 環境變數:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN
  • AWS_SHARED_CREDENTIALS_FILE
  • AWS_CONFIG_FILE
  • AWS_REGION
  • AWS_PROFILE

如需這些變數的進一步資訊,請參閱《AWS 命令列介面使用者指南》

認證設定檔

使用 Tanzu Kubernetes Grid 的建議方法是使用 aws configure 命令,將 AWS 認證儲存在本機認證或組態檔中。AWS 組態檔可以支援一系列驗證機制,範圍從靜態認證到透過外部認證協助程式來進行 SSO。

AWS 認證檔可以處理多個帳戶,包括預設設定檔和其他的具名設定檔。認證檔和設定檔會納入上述的認證優先順序中,而在本機環境變數之後套用。

若要在啟動機器上為 AWS 帳戶設定認證檔和設定檔,可以使用 aws configure CLI 命令。

若要自訂要使用的 AWS 認證檔和設定檔,您可以設定以下環境變數:

  • export AWS_PROFILE=profile_name,其中 profile_name 是包含您要使用的 AWS 存取金鑰的設定檔名稱。如果沒有指定此變數的值,則會使用設定檔名稱 default。如需使用具名設定檔的詳細資訊,請參閱 AWS 說明文件中的具名設定檔

  • export AWS_SHARED_CREDENTIAL_FILE=path_to_credentials_file,其中,path_to_credentials_file 是包含 AWS 存取金鑰資訊的認證檔的位置和名稱。如果您未定義此環境變數,則預設位置和檔案名稱為 $HOME/.aws/credentials

  • export AWS_CONFIG=path_to_config_file,其中,path_to_config_file 是包含設定檔組態的組態檔的位置和名稱。如果您未定義此環境變數,則預設位置和檔案名稱為 $HOME/.aws/config。如果您要指定明確的認證來源,或使用外部認證程序,將需要使用此檔案。

附註

您在 AWS 認證或組態檔中所建立的任何具名設定檔,會在適用於 AWS 的 Tanzu Kubernetes Grid 安裝程式 UI 中的 AWS 認證設定檔 (AWS Credential Profile) 下拉式功能表中顯示為可選選項。

如需有效 AWS 認證和預設 AWS 認證提供者鏈結的詳細資訊,請參閱 AWS 說明文件中的管理 AWS 存取金鑰的最佳做法

叢集組態檔

您可以設定以下變數,以便在用來建立叢集的組態檔中指定 AWS 認證:

  • AWS_ACCESS_KEY_ID (base 64 編碼)
  • AWS_SECRET_ACCESS_KEY (base 64 編碼)
  • AWS_SESSION_TOKEN (選用)

AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 必須以 <encoded:(base64 encoded value)> 形式傳遞,例如,如果您的 AWS 存取金鑰識別碼為 AKIAIOSFODNN7EXAMPLE,密碼存取金鑰為 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY,工作階段 Token 為 AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OP,則必須在組態檔中設定成如下:

AWS_ACCESS_KEY_ID: <encoded:QUtJQUlPU0ZPRE5ON0VYQU1QTEU=>
AWS_SECRET_ACCESS_KEY: <encoded:d0phbHJYVXRuRkVNSS9LN01ERU5HL2JQeFJmaUNZRVhBTVBMRUtFWQ==>
AWS_SESSION_TOKEN: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

舊版 Tanzu Kubernetes Grid 會將認證儲存在叢集組態檔中。依預設,Tanzu Kubernetes Grid 1.4 及更新版本不會將 AWS 的認證儲存在組態檔中。

登錄 EC2 金鑰配對

在您使用本機環境變數或在認證檔和設定檔中設定 AWS 帳戶認證後,必須為 AWS 帳戶產生 EC2 金鑰配對。Tanzu Kubernetes Grid 會將此金鑰配對中的公開金鑰部分傳遞給 AWS,以便在每個區域中進行驗證。

附註

AWS 僅支援 RSA 金鑰。AWS 所需金鑰的格式不同於 vSphere 所需的金鑰。您不能將相同的金鑰配對同時用於 vSphere 部署和 AWS 部署。

如果用來部署管理叢集的帳戶和區域還沒有 EC2 金鑰配對,請執行以下步驟來建立一個金鑰配對:

  1. 針對要與 Tanzu Kubernetes Grid 搭配使用的每個區域,建立一個具名金鑰配對,並輸出一個包含名稱的 .pem 檔案。例如,以下命令使用 default,並將檔案儲存為 default.pem

    aws ec2 create-key-pair --key-name default --output json | jq .KeyMaterial -r > default.pem
    

    若要針對不是您設定檔中的預設區域的區域或是在本機設定為 AWS_DEFAULT_REGION 的區域,建立金鑰配對,請包含 --region 選項。

  2. 登入 Amazon EC2 儀表板,然後移至網路和安全性 (Network & Security) > 金鑰配對 (Key Pairs),以驗證所建立的金鑰配對已登錄在您的帳戶中。

後續步驟

對於生產部署,強烈建議為叢集啟用身分識別管理:

如果您在具有外部網際網路連線的環境中使用 Tanzu Kubernetes Grid,一旦設定身分識別管理後,即可準備將管理叢集部署到 AWS。

check-circle-line exclamation-circle-line close-line
Scroll to top icon