AWS 的管理叢集組態

若要建立叢集組態檔,您可以將先前部署的現有組態檔複製到 Amazon Web Services (AWS),並加以更新。或者,也可以使用空白範本從頭開始建立檔案。

重要

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 管理和工作負載叢集〉

管理叢集組態範本

以下範本包括用來在 AWS 上部署管理叢集的所有相關選項。您可以複製此範本,並用來將管理叢集部署到 AWS。

必要選項會取消註解。選用設定會註解掉。如果適用,會包含預設值。

#! ---------------------------------------------------------------------
#! Basic cluster creation configuration
#! ---------------------------------------------------------------------

CLUSTER_NAME:
CLUSTER_PLAN: dev
INFRASTRUCTURE_PROVIDER: aws
# CLUSTER_API_SERVER_PORT:
ENABLE_CEIP_PARTICIPATION: true
ENABLE_AUDIT_LOGGING: true
CLUSTER_CIDR: 100.96.0.0/11
SERVICE_CIDR: 100.64.0.0/13
# CAPBK_BOOTSTRAP_TOKEN_TTL: 30m

#! ---------------------------------------------------------------------
#! Node configuration
#! AWS-only MACHINE_TYPE settings override cloud-agnostic SIZE settings.
#! ---------------------------------------------------------------------

# SIZE:
# CONTROLPLANE_SIZE:
# WORKER_SIZE:
CONTROL_PLANE_MACHINE_TYPE: t3.large
NODE_MACHINE_TYPE: m5.large
# OS_NAME: ""
# OS_VERSION: ""
# OS_ARCH: ""

#! ---------------------------------------------------------------------
#! AWS configuration
#! ---------------------------------------------------------------------

AWS_REGION:
AWS_NODE_AZ: ""
AWS_ACCESS_KEY_ID:
AWS_SECRET_ACCESS_KEY:
AWS_SSH_KEY_NAME:
BASTION_HOST_ENABLED: true
# AWS_NODE_AZ_1: ""
# AWS_NODE_AZ_2: ""
# AWS_VPC_ID: ""
# AWS_PRIVATE_SUBNET_ID: ""
# AWS_PUBLIC_SUBNET_ID: ""
# AWS_PUBLIC_SUBNET_ID_1: ""
# AWS_PRIVATE_SUBNET_ID_1: ""
# AWS_PUBLIC_SUBNET_ID_2: ""
# AWS_PRIVATE_SUBNET_ID_2: ""
# AWS_PRIVATE_NODE_CIDR: 10.0.0.0/24
# AWS_PUBLIC_NODE_CIDR: 10.0.1.0/24
# AWS_PRIVATE_NODE_CIDR_1: 10.0.2.0/24
# AWS_PUBLIC_NODE_CIDR_1: 10.0.3.0/24
# AWS_PRIVATE_NODE_CIDR_2: 10.0.4.0/24
# AWS_PUBLIC_NODE_CIDR_2: 10.0.5.0/24
# AWS_SECURITY_GROUP_BASTION: sg-12345
# AWS_SECURITY_GROUP_CONTROLPLANE: sg-12346
# AWS_SECURITY_GROUP_APISERVER_LB: sg-12347
# AWS_SECURITY_GROUP_NODE: sg-12348
# AWS_SECURITY_GROUP_LB: sg-12349
# DISABLE_TMC_CLOUD_PERMISSIONS: false # Deactivates IAM permissions required for TMC enablement

#! ---------------------------------------------------------------------
#! Image repository configuration
#! ---------------------------------------------------------------------

# TKG_CUSTOM_IMAGE_REPOSITORY: ""
# TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE: ""

#! ---------------------------------------------------------------------
#! Proxy configuration
#! ---------------------------------------------------------------------

# TKG_HTTP_PROXY: ""
# TKG_HTTPS_PROXY: ""
# TKG_NO_PROXY: ""

#! ---------------------------------------------------------------------
#! Machine Health Check configuration
#! ---------------------------------------------------------------------

ENABLE_MHC:
ENABLE_MHC_CONTROL_PLANE: true
ENABLE_MHC_WORKER_NODE: true
MHC_UNKNOWN_STATUS_TIMEOUT: 5m
MHC_FALSE_STATUS_TIMEOUT: 12m

#! ---------------------------------------------------------------------
#! Identity management configuration
#! ---------------------------------------------------------------------

IDENTITY_MANAGEMENT_TYPE: "none"

#! Settings for IDENTITY_MANAGEMENT_TYPE: "oidc"
# CERT_DURATION: 2160h
# CERT_RENEW_BEFORE: 360h
# OIDC_IDENTITY_PROVIDER_CLIENT_ID:
# OIDC_IDENTITY_PROVIDER_CLIENT_SECRET:
# OIDC_IDENTITY_PROVIDER_GROUPS_CLAIM: groups
# OIDC_IDENTITY_PROVIDER_ISSUER_URL:
# OIDC_IDENTITY_PROVIDER_SCOPES: "email,profile,groups,offline_access"
# OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM: email

#! The following two variables are used to configure Pinniped JWTAuthenticator for workload clusters
# SUPERVISOR_ISSUER_URL:
# SUPERVISOR_ISSUER_CA_BUNDLE_DATA:

#! Settings for IDENTITY_MANAGEMENT_TYPE: "ldap"
# LDAP_BIND_DN:
# LDAP_BIND_PASSWORD:
# LDAP_HOST:
# LDAP_USER_SEARCH_BASE_DN:
# LDAP_USER_SEARCH_FILTER:
# LDAP_USER_SEARCH_ID_ATTRIBUTE: dn
# LDAP_USER_SEARCH_NAME_ATTRIBUTE:
# LDAP_GROUP_SEARCH_BASE_DN:
# LDAP_GROUP_SEARCH_FILTER:
# LDAP_GROUP_SEARCH_NAME_ATTRIBUTE: dn
# LDAP_GROUP_SEARCH_USER_ATTRIBUTE: dn
# LDAP_ROOT_CA_DATA_B64:

#! ---------------------------------------------------------------------
#! Antrea CNI configuration
#! ---------------------------------------------------------------------

# ANTREA_NO_SNAT: true
# ANTREA_NODEPORTLOCAL: true
# ANTREA_NODEPORTLOCAL_ENABLED: true
# ANTREA_NODEPORTLOCAL_PORTRANGE: 61000-62000
# ANTREA_TRAFFIC_ENCAP_MODE: "encap"
# ANTREA_PROXY: true
# ANTREA_PROXY_ALL: true
# ANTREA_PROXY_LOAD_BALANCER_IPS: false
# ANTREA_PROXY_NODEPORT_ADDRS:
# ANTREA_PROXY_SKIP_SERVICES: ""
# ANTREA_POLICY: true
# ANTREA_TRACEFLOW: true
# ANTREA_DISABLE_UDP_TUNNEL_OFFLOAD: false
# ANTREA_ENABLE_USAGE_REPORTING: false
# ANTREA_EGRESS: true
# ANTREA_EGRESS_EXCEPT_CIDRS: ""
# ANTREA_FLOWEXPORTER: false
# ANTREA_FLOWEXPORTER_COLLECTOR_ADDRESS: "flow-aggregator.flow-aggregator.svc:4739:tls"
# ANTREA_FLOWEXPORTER_POLL_INTERVAL: "5s"
# ANTREA_FLOWEXPORTER_ACTIVE_TIMEOUT: "5s"
# ANTREA_FLOWEXPORTER_IDLE_TIMEOUT: "15s"
# ANTREA_IPAM: false
# ANTREA_KUBE_APISERVER_OVERRIDE: ""
# ANTREA_MULTICAST: false
# ANTREA_MULTICAST_INTERFACES: ""
# ANTREA_NETWORKPOLICY_STATS: true
# ANTREA_SERVICE_EXTERNALIP: true
# ANTREA_TRANSPORT_INTERFACE: ""
# ANTREA_TRANSPORT_INTERFACE_CIDRS: ""

AWS 連線設定

若要提供 AWS 帳戶以及要在其中部署叢集的區域和可用區域的相關資訊,請執行下列其中一個動作:

  • (建議) 使用 AWS CLI 來設定 AWS 認證設定檔,並將環境變數 AWS_PROFILE 設定為啟動機器上的設定檔名稱。

  • 將帳戶認證和其他資訊包含在叢集組態檔中。例如:

    AWS_REGION: eu-west-1
    AWS_NODE_AZ: "eu-west-1a"
    # Only use AWS_PROFILE OR combination of AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, but not both.
    AWS_PROFILE: tkg
    # AWS_ACCESS_KEY_ID:  <encoded:QUtJQVQ[...]SU82TTM=>
    # AWS_SECRET_ACCESS_KEY: <encoded:eGN4RHJmLzZ[...]SR08yY2ticQ==>
    AWS_SSH_KEY_NAME: default
    BASTION_HOST_ENABLED: true
    
    • 只能使用 AWS_PROFILEAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 的組合,但不能同時使用兩者。
    • AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 的值必須是 base64 編碼。

將內部負載平衡器用於 API 伺服器

依預設,AWS 上的 Tanzu Kubernetes Grid 會為管理叢集的 Kubernetes API 伺服器建立公用的負載平衡器。

對於網際網路受限的環境 (例如氣隙或 Proxy),您可以在叢集組態檔中將 AWS_LOAD_BALANCER_SCHEME_INTERNAL 設定為 true,來避免建立公用的負載平衡器:

AWS_LOAD_BALANCER_SCHEME_INTERNAL: true

此設定可將管理叢集的負載平衡器自訂為使用內部配置,表示將無法透過網際網路來存取及路由其 Kubernetes API 伺服器。

設定節點大小

Tanzu CLI 會根據您在組態檔中提供的設定,來建立工作負載叢集的個別節點。在 AWS 上,您可以將所有節點虛擬機器設定為具有相同的預先定義組態,或者為控制平面和工作節點設定不同的預先定義組態。藉由使用這些設定,您可以建立 Tanzu Kubernetes 叢集,且其中的節點具有與管理叢集節點不同的組態。您還可以建立叢集,且其中的控制平面節點和工作節點具有不同的組態。

在您建立管理叢集時,會在 CONTROL_PLANE_MACHINE_TYPENODE_MACHINE_TYPE 選項中設定節點機器的執行個體類型。依預設,這些設定也會用於工作負載叢集。最低組態為 2 個 CPU 和 8 GB 記憶體。相容的執行個體類型清單會因區域而異。

CONTROL_PLANE_MACHINE_TYPE: "t3.large"
NODE_MACHINE_TYPE: "m5.large"

您可以使用 SIZECONTROLPLANE_SIZEWORKER_SIZE 選項來覆寫這些設定。若要建立所有控制平面和工作節點虛擬機器大小相同的 Tanzu Kubernetes 叢集,請指定 SIZE 變數。如果您設定 SIZE 變數,將使用您設定的組態來建立所有節點。如需 Amazon EC2 各種不同大小的節點執行個體的組態資訊,請參閱 Amazon EC2 執行個體類型

SIZE: "t3.large"

若要建立工作負載叢集,且其中含有不同大小的控制平面虛擬機器和工作節點虛擬機器,請指定 CONTROLPLANE_SIZEWORKER_SIZE 選項。

CONTROLPLANE_SIZE: "t3.large"
WORKER_SIZE: "m5.xlarge"

您可以將 CONTROLPLANE_SIZEWORKER_SIZE 選項與 SIZE 選項合併使用。例如,如果指定 SIZE: "t3.large"WORKER_SIZE: "m5.xlarge",則會將控制平面節點設定為 t3.large,將工作節點設定為 m5.xlarge

SIZE: "t3.large"
WORKER_SIZE: "m5.xlarge"

設定 VPC

取消註解並更新下列資料列,以指定負責主控的 VPC 和其他 AWS 基礎結構,並供獨立管理叢集使用

AWS_REGION:
AWS_NODE_AZ:
AWS_PRIVATE_SUBNET_ID:
AWS_PUBLIC_SUBNET_ID:
AWS_SSH_KEY_NAME:
AWS_VPC_ID:
BASTION_HOST_ENABLED:
CONTROL_PLANE_MACHINE_TYPE:
NODE_MACHINE_TYPE:
SERVICE_CIDR:
CLUSTER_CIDR:

如果要部署生產管理叢集,另請針對其他兩個控制平面節點,取消註解並填入以下內容:

AWS_NODE_AZ_1:
AWS_NODE_AZ_2:
AWS_PRIVATE_SUBNET_ID_1:
AWS_PRIVATE_SUBNET_ID_2:
AWS_PUBLIC_SUBNET_ID_1:
AWS_PUBLIC_SUBNET_ID_2:

例如,現有 VPC 上的生產管理叢集的組態可能如下所示:

AWS_REGION: us-west-2
AWS_NODE_AZ: us-west-2a
AWS_NODE_AZ_1: us-west-2b
AWS_NODE_AZ_2: us-west-2c
AWS_PRIVATE_SUBNET_ID: subnet-ID
AWS_PRIVATE_SUBNET_ID_1: subnet-ID
AWS_PRIVATE_SUBNET_ID_2: subnet-ID
AWS_PUBLIC_SUBNET_ID: subnet-ID
AWS_PUBLIC_SUBNET_ID_1: subnet-ID
AWS_PUBLIC_SUBNET_ID_2: subnet-ID
AWS_SSH_KEY_NAME: tkg
AWS_VPC_ID: vpc-ID
BASTION_HOST_ENABLED: "true"
CONTROL_PLANE_MACHINE_TYPE: m5.large
NODE_MACHINE_TYPE: m5.large
SERVICE_CIDR: 100.64.0.0/13
CLUSTER_CIDR: 100.96.0.0/11

依預設,Tanzu Kubernetes Grid 會建立新的安全群組,以連接控制平面、工作節點和負載平衡器。如果需要自訂規則,您可以預先佈建安全群組,新增規則集,並將叢集設定為使用自訂安全群組,如下所述。

設定自訂安全群組

依預設,Tanzu Kubernetes Grid 會在 VPC 內建立五個安全群組。

若要防止 Tanzu Kubernetes Grid 建立新的安全群組,而改用具有自訂規則集的現有預先佈建安全群組,您可以:

  • 建立具有自訂規則集的安全群組,並盡可能與預設規則集極為相符。
  • AWS_SECURITY_GROUP_* 變數設定為安全群組名稱,以便在叢集組態檔中指定自訂安全群組。例如:

    AWS_SECURITY_GROUP_BASTION: sg-12345
    

下面列出五個安全群組及其預設規則和對應的叢集組態變數:

  • 群組:CLUSTER-NAME-bastion

    使用叢集組態變數 AWS_SECURITY_GROUP_BASTION 來設定。

    規則:

    說明 通訊協定 從連接埠 到連接埠 允許入口來自 必要
    SSH TCP 22 22 0.0.0.0/0
  • 群組:CLUSTER-NAME-node

    使用叢集組態變數 AWS_SECURITY_GROUP_NODE 來設定。

    規則:

    說明 通訊協定 從連接埠 到連接埠 允許入口來自 必要
    SSH TCP 22 22 安全群組 <cluster-name>-bastion
    節點連接埠服務 TCP 30000 32767 0.0.0.0/0 否 (請參閱下方附註)
    Kubelet API TCP 10250 10250 安全群組 <cluster-name>-控制平面和 <cluster-name>-節點
    Antrea CNI TCP 10349-10351 10349-10351 安全群組 <cluster-name>-節點
    GENEVE UDP 6081 6081 安全群組 <cluster-name>-節點
    附註

    0.0.0.0/0 是輸入,並且僅來自 VPC、對等 VPC 以及任何透過 VPN 或 DirectConnect 連線的網路。0.0.0.0/0 不應解譯為可從網際網路存取。只要是管理員,就可以同時變更節點連接埠服務的連接埠範圍和入口規則,而不用來使叢集正常運作。

  • 群組:CLUSTER-NAME-controlplane

    使用叢集組態變數 AWS_SECURITY_GROUP_CONTROLPLANE 來設定。

    規則:

    說明 通訊協定 從連接埠 到連接埠 允許入口來自 必要
    SSH TCP 22 22 安全群組 <cluster-name>-bastion
    Kubernetes API TCP 6443* 6443* 安全群組 <cluster-name>-apiserver-lb、<cluster-name>-apiserver-controlplane 和 <cluster-name>-apiserver-node
    etcd TCP 2379 2379 安全群組 <cluster-name>-controlplane
    etcd 對等 TCP 2380 2380 安全群組 <cluster-name>-controlplane
    addons-manager TCP 9865 9865 安全群組 <cluster-name>-controlplane
    kapp-controller TCP 10100 10100 安全群組 <cluster-name>-controlplane

    * 如果您設定 CLUSTER_API_SERVER_PORT,請將 6443 取代為您在變數中設定的連接埠號碼。

  • 群組:CLUSTER-NAME-apiserver-lb

    使用叢集組態變數 AWS_SECURITY_GROUP_APISERVER_LB 來設定。

    規則:

    說明 通訊協定 從連接埠 到連接埠 允許入口來自 必要
    Kubernetes API TCP 6443* 6443* 0.0.0.0/0 否 (請參閱下方附註)

    * 如果您設定 CLUSTER_API_SERVER_PORT,請將 6443 取代為您在變數中設定的連接埠號碼。

    附註

    如果未指定成在內部佈建負載平衡器,依預設,0.0.0.0/0 規則可從網際網路存取。如果負載平衡器是內部負載平衡器,則必須可從管理叢集 (對於工作負載叢集) 或啟動機器 (對於管理叢集) 存取它。此規則可以鎖定,但如果鎖定,則必須新增以下規則:

    說明 通訊協定 從連接埠 到連接埠 允許入口來自 必要
    叢集中的 Kubernetes API TCP 6443* 6443* 安全群組 <cluster-name>-控制平面和 <cluster-name>-節點

    * 如果您設定 CLUSTER_API_SERVER_PORT,請將 6443 取代為您在變數中設定的連接埠號碼。

  • 群組:CLUSTER-NAME-lb

    使用叢集組態變數 AWS_SECURITY_GROUP_LB 來設定。

    此安全群組用於工作負載負載平衡器。不會在此安全群組中新增任何規則,AWS 管理員應根據應用程式工作負載需求來自訂規則集。

後續步驟

管理叢集組態檔更新完成後,請依照從組態檔來部署管理叢集中的指示來建立管理叢集。

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