要创建集群配置文件,您可以将先前部署的现有配置文件复制到 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。
有关如何更新所有目标平台通用的设置的信息,请参见创建管理集群配置文件
有关所有配置文件变量的信息,请参见 Tanzu CLI 配置文件变量参考。
有关如何配置 vSphere 设置的示例,请参见模板下方的部分。
已取消对必填选项的注释。可选设置已注释掉。如果适用,则包括默认值。
#! ---------------------------------------------------------------------
#! 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 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_PROFILE
或 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
的组合,但不能同时使用两者。AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
的值必须采用 base64 编码。默认情况下,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_TYPE
和 NODE_MACHINE_TYPE
选项中设置节点计算机的实例类型。默认情况下,这些设置还用于工作负载集群。最低配置为 2 个 CPU 和 8 GB 内存。兼容的实例类型列表因区域而异。
CONTROL_PLANE_MACHINE_TYPE: "t3.large"
NODE_MACHINE_TYPE: "m5.large"
您可以使用 SIZE
、CONTROLPLANE_SIZE
和 WORKER_SIZE
选项覆盖这些设置。要创建所有控制平面虚拟机和工作节点虚拟机大小相同的 Tanzu Kubernetes 集群,请指定 SIZE
变量。如果设置 SIZE
变量,将使用您设置的配置创建所有节点。有关 Amazon EC2 不同大小节点实例配置的信息,请参见 Amazon EC2 实例类型。
SIZE: "t3.large"
要创建控制平面虚拟机和工作节点虚拟机大小不同工作负载的集群,请指定 CONTROLPLANE_SIZE
和 WORKER_SIZE
选项。
CONTROLPLANE_SIZE: "t3.large"
WORKER_SIZE: "m5.xlarge"
您可以将 CONTROLPLANE_SIZE
和 WORKER_SIZE
选项与 SIZE
选项结合使用。例如,如果指定 SIZE: "t3.large"
和 WORKER_SIZE: "m5.xlarge"
,则控制平面节点将设置为 t3.large
并且工作节点将设置为 m5.xlarge
。
SIZE: "t3.large"
WORKER_SIZE: "m5.xlarge"
取消注释并更新以下行,指定将托管和供独立管理集群使用的 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 管理员应根据应用程序工作负载需求自定义规则集。
更新完管理集群配置文件后,按照从配置文件部署管理集群中的说明创建管理集群。