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 服务器

默认情况下,Tanzu Kubernetes Grid on AWS 为管理集群的 Kubernetes API 服务器创建面向公众的负载均衡器。

对于 Internet 受限的环境(如气隙或代理),可以通过在集群配置文件中将 AWS_LOAD_BALANCER_SCHEME_INTERNAL 设置为 true 来避免创建面向公众的负载均衡器:

AWS_LOAD_BALANCER_SCHEME_INTERNAL: true

此设置可将管理集群的负载均衡器自定义为使用内部方案,这意味着将无法通过 Internet 访问和路由其 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 不应解释为可访问 Internet。只要是管理员,就可以同时更改节点端口服务的端口范围和输入规则,而不用于运行集群。

  • 组: 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-控制平面和 <cluster-name>-apiserver-节点
    etcd TCP 2379 2379 安全组 <cluster-name>-控制平面
    etcd 对等 TCP 2380 2380 安全组 <cluster-name>-控制平面
    addons-manager TCP 9865 9865 安全组 <cluster-name>-控制平面
    kapp-controller TCP 10100 10100 安全组 <cluster-name>-控制平面

    * 如果设置 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 规则可以访问 Internet。如果负载均衡器是内部负载均衡器,则必须可从管理集群(对于工作负载集群)或引导计算机(对于管理集群)访问该负载均衡器。此规则可以锁定,但如果锁定,则必须添加以下规则:

    描述 协议 从端口 到端口 允许输入来自 强制性
    集群中的 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