AWS 的管理叢集組態

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

管理叢集組態範本

以下範本包括用來在 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"
# 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_USERNAME: userPrincipalName
# LDAP_USER_SEARCH_ID_ATTRIBUTE: DN
# LDAP_USER_SEARCH_EMAIL_ATTRIBUTE: DN
# LDAP_USER_SEARCH_NAME_ATTRIBUTE:
# LDAP_GROUP_SEARCH_BASE_DN:
# LDAP_GROUP_SEARCH_FILTER:
# LDAP_GROUP_SEARCH_USER_ATTRIBUTE: DN
# LDAP_GROUP_SEARCH_GROUP_ATTRIBUTE:
# LDAP_GROUP_SEARCH_NAME_ATTRIBUTE: cn
# 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