本主题介绍了如何准备 Amazon Web Services (AWS) 以运行 Tanzu Kubernetes Grid。
在使用 Tanzu CLI 或安装程序界面部署管理集群之前,必须先准备运行 Tanzu CLI 的引导计算机并设置 Amazon Web Services (AWS) 帐户。
如果要在 VMware Cloud on AWS 上安装 Tanzu Kubernetes Grid,则安装到 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 管理和工作负载集群。
CLUSTER_API_SERVER_PORT
变量。对于 TCP,允许在本地引导计算机与管理集群物料清单 (BOM) 文件中列出的映像存储库之间通过端口 443 传输流量。*
~/.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
。
*或者参见准备 Internet 受限环境以便在无法访问外部网络的情况下可以进行安装。
对于创建的每个集群,Tanzu Kubernetes Grid 在您的 AWS 帐户中使用一组资源。
资源 | Tanzu Kubernetes Grid 使用 |
---|---|
VPC | 1 |
弹性 IP 地址 | 每个可用区 1 个* (AZ) |
子网 | 面向 Internet 的每个 AZ 2 个,内部的每个 AZ 1 个* |
EC2 安全组 (VPC) | 4 |
Internet 网关 | 1 |
NAT 网关 | 默认*部署每个 AZ 1 个 |
控制平面 EC2 实例 | 每个 AZ 1 个* |
*开发集群使用一个可用区,生产集群使用 3 个可用区。
AWS 对这些资源实施默认限制或配额,并允许您修改限制。默认限制通常足以允许您开始创建和使用集群,但随着您增加集群或工作负载计数,可能会超出这些 AWS 限制,从而阻止 Tanzu Kubernetes Grid 创建新集群或部署新工作负载。
VMware 建议您定期评估在 AWS 帐户中指定的限制,并根据需要请求增加服务配额以满足您的业务需求。
最相关的服务配额包括:
服务代码 | 配额名称 | 配额代码 |
---|---|---|
vpc | 每个区域的 Internet 网关 | 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 |
弹性负载均衡 | 每个区域的经典负载均衡器 | L-E9E9831D |
您可以选择性地共享 VPC,而不是创建新的 VPC,例如工作负载集群与其管理集群共享 VPC。
有关集群节点实例大小的信息,请参见 AWS 文档中的 Amazon EC2 实例类型。
如果因为满足以下任一条件,Tanzu Kubernetes Grid 可以部署到未连接 NAT 网关的 VPC:
Tanzu Kubernetes Grid 不会检查路由表中是否存在特定路由。因此,支持通过 VPC NAT 网关、EC2 实例或设备、Internet 网关、中转网关或 DirectConnect 进行 Internet 连接。
下表介绍了 AWS 上的管理集群的大小调整示例。使用此数据作为指导,确保扩展管理集群以处理您计划部署的工作负载集群数量。工作负载集群虚拟机大小列中列出了用于可以管理…列中示例的虚拟机大小。
管理集群计划 | 管理集群虚拟机大小 | 可以管理… | 工作负载集群虚拟机大小 |
---|---|---|---|
3 个控制平面节点和 3 个工作节点 |
|
示例:
|
|
3 个控制平面节点和 3 个工作节点 |
|
例如:一个工作负载集群,部署有 3 个控制平面和 500 个工作节点 |
|
3 个控制平面节点和 3 个工作节点 |
|
例如:200 个工作负载集群,每个集群部署有 3 个控制平面和 5 个工作节点 |
|
以下部分列出了 Tanzu Kubernetes Grid 在 AWS 上部署和管理集群所需的权限:
tanzu mc permissions aws set
命令或在安装程序界面中选中自动创建 AWS CloudFormation 堆栈 (Automate creation of AWS CloudFormation Stack) 复选框时,Tanzu Kubernetes Grid 会自动设置这些权限。
mc
是 management-cluster
的缩写。要使 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) 复选框,如从配置文件部署管理集群的创建 IMA 资源部分或使用安装程序界面部署管理集群中所述。无论打算对 Tanzu Kubernetes Grid 环境使用一个还是多个 AWS 区域,您都只需为每个 AWS 帐户执行一次此操作。
运行 tanzu mc permissions aws set
或选择自动创建 AWS CloudFormation 堆栈将创建以下 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 中的 jump box 引导 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 > 堆栈来检索其模板。有关 CloudFormation 堆栈的详细信息,请参见 AWS 文档中的使用堆栈。
或者,您可以检索Tanzu Kubernetes Grid 用于创建上述 IAM 资源的模板和在 AWS 帐户中直接创建 tkg-cloud-vmware-com
堆栈,而不是运行 tanzu mc permissions aws set
或选择自动创建 AWS CloudFormation 堆栈。要检索模板,请运行 tanzu mc permissions aws generate-cloudformation-template
。
仅当您打算在 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"
权限。如果您的用户当前没有这些权限,则可以创建一个包含这些权限的自定义策略并将其附加到您的用户。
要使 Tanzu Kubernetes Grid 能够在 Amazon EC2 上创建和管理虚拟机,它必须具有 AWS 帐户以及:
您必须设置帐户凭据,以便为计划部署 Tanzu Kubernetes Grid 集群的区域创建 SSH 密钥对。
有多个选项可用于配置用于访问 EC2 的 AWS 帐户凭据。下面的小节介绍了不同的选项。
VMware 建议使用“凭据配置文件”选项,该选项使用 aws configure
命令进行管理。这些配置文件将保存到本地共享的配置文件中,通常位于 ~/.aws/config
中。
使用多个凭据时,按优先级降序排列,可能的凭据配置选项包括:
工作负载集群配置文件变量(仅用于工作负载集群创建)。请参见下面的集群配置文件。
本地静态环境变量。请参见下面的本地环境变量。
(推荐)凭据配置文件,在运行 aws configure
时更新。这些内容将保存到位于 Linux 或 macOS 上的 ~/.aws/config
,或 Windows 上的 C:\Users\USERNAME\.aws\config
,也可以命名为 credentials
。请参见下面的凭据配置文件。
实例配置文件凭据。您可以将 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 会话令牌。仅当需要使用临时访问密钥时,才需要指定此变量。有关使用临时访问密钥的详细信息,请参见了解和获取 AWS 凭据。
export AWS_REGION=aws_region
,其中 aws_region
是您要在其中部署集群的 AWS 区域。例如,us-west-2
。
有关 AWS 区域的完整列表,请参见 AWS 服务端点。除了常规 AWS 区域外,您还可以在 AWS GovCloud 中指定 us-gov-east
和 us-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 凭据和默认 AWS 凭据提供程序链的详细信息,请参见 AWS 文档中的管理 AWS 访问密钥的最佳实践。
可以通过设置以下变量,在用于创建集群的配置文件中指定 AWS 凭据:
AWS_ACCESS_KEY_ID
(base 64 编码)AWS_SECRET_ACCESS_KEY
(base 64 编码)AWS_SESSION_TOKEN
(可选)AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
必须以 <encoded:(base64 encoded value)>
形式传递,例如,如果您的 AWS 访问密钥 ID 为 AKIAIOSFODNN7EXAMPLE
,私有访问密钥为 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
以及会话令牌为 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 的凭据。
使用本地环境变量或在凭据文件和配置文件中设置 AWS 帐户凭据后,必须为 AWS 帐户生成EC2密钥对。Tanzu Kubernetes Grid 将此密钥对的公钥部分传递到 AWS,以便在每个区域中进行身份验证。
注意AWS 仅支持 RSA 密钥。AWS 所需的密钥的格式与 vSphere 所需的密钥的不同。不能对 vSphere 部署和 AWS 部署使用相同的密钥对。
如果用于部署管理集群的帐户和区域还没有 EC2 密钥对,请执行以下步骤创建一个密钥对:
对于计划与 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
选项。
登录到 Amazon EC2 仪表板,然后转到网络和安全 > 秘钥对以验证创建的密钥对是否已在您的帐户中注册。
对于生产部署,强烈建议为集群启用身份管理:
如果在具有外部 Internet 连接的环境中使用 Tanzu Kubernetes Grid,在设置身份管理后,即可将管理集群部署到 AWS。