准备将管理集群部署到 AWS

本主题介绍了如何准备 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 CLI 本地安装。请参见安装 Tanzu CLI 和其他工具以与独立管理集群配合使用
  • 您有具有以下项的活动 AWS 帐户:
    • 访问密钥和访问密钥。有关访问密钥的详细信息,请参见 AWS 文档中的 AWS 帐户和访问密钥
    • 需要 AWS 权限中所述的权限。这些权限使 Tanzu Kubernetes Grid 能够在 AWS 上创建和管理集群。
  • 要在其中部署管理集群的可用区中的 VPC。例如,您手动或使用 AWS CloudFormationTerraform 等工具创建的 VPC。必须为 VPC 进行以下配置:
  • 您的 AWS 帐户具有足够的弹性 IP (EIP) 地址资源配额。默认 EIP 配额是每个区域、每个帐户 5 个 EIP 地址。
  • 允许在本地引导计算机与所创建集群中所有虚拟机的端口 6443 之间传输流量。端口 6443 是默认公开 Kubernetes API 的位置。要更改管理集群或工作负载集群的此端口,请在部署集群时设置 CLUSTER_API_SERVER_PORT 变量。
  • 对于 TCP,允许在本地引导计算机与管理集群物料清单 (BOM) 文件中列出的映像存储库之间通过端口 443 传输流量。*

    • BOM 文件位于 ~/.config/tanzu/tkg/bom/ 下,并且其名称包含 Tanzu Kubernetes Grid 版本,例如 v2.1.1 的 tkg-bom-2.1.1+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 受限环境以便在无法访问外部网络的情况下可以进行安装。

AWS 帐户中的资源使用情况

对于创建的每个集群,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 实例类型

没有 NAT 网关的 Amazon VPC

如果因为满足以下任一条件,Tanzu Kubernetes Grid 可以部署到未连接 NAT 网关的 VPC:

  • 工作负载集群部署到的子网的路由表具有到 Internet 的 0.0.0.0/0 路由,或者,
  • 您的部署环境受 Internet 限制,如准备 Internet 受限环境中所述。

Tanzu Kubernetes Grid 不会检查路由表中是否存在特定路由。因此,支持通过 VPC NAT 网关、EC2 实例或设备、Internet 网关、中转网关或 DirectConnect 进行 Internet 连接。

管理集群大小调整示例

下表介绍了 AWS 上的管理集群的大小调整示例。使用此数据作为指导,确保扩展管理集群以处理您计划部署的工作负载集群数量。工作负载集群虚拟机大小列中列出了用于可以管理…列中示例的虚拟机大小。

管理集群计划 管理集群虚拟机大小 可以管理… 工作负载集群虚拟机大小
3 个控制平面节点和 3 个工作节点
  • 控制平面节点:m4.large(CPU:2;内存:8 GB)
  • 工作节点:m4.large(CPU:2;内存:8 GB)
示例:
  • 5 个工作负载集群,每个集群部署 3 个控制平面和 200 个工作节点;或
  • 10 个工作负载集群,每个集群部署有 3 个控制平面和 50 个工作节点
  • 控制平面节点:c4.large(CPU:2;内存:3.75 GB)
  • 工作节点:c4.large(CPU:2;内存:3.75 GB)
3 个控制平面节点和 3 个工作节点
  • 控制平面节点:m4.large(CPU:2;内存:8 GB)
  • 工作节点:m4.large(CPU:2;内存:8 GB)
例如:一个工作负载集群,部署有 3 个控制平面和 500 个工作节点
  • 控制平面节点:c5.4xlarge(CPU:16;内存:32 GB)
  • 工作节点:c5.xlarge(CPU:4;内存:8 GB)
3 个控制平面节点和 3 个工作节点
  • 控制平面节点:m4.xlarge(CPU:4;内存:16 GB)
  • 工作节点:m4.xlarge(CPU:4;内存:16 GB)
例如:200 个工作负载集群,每个集群部署有 3 个控制平面和 5 个工作节点
  • 控制平面节点:c4.large(CPU:2;内存:3.75 GB)
  • 工作节点:c4.large(CPU:2;内存:3.75 GB)

所需的 AWS 权限

以下部分列出了 Tanzu Kubernetes Grid 在 AWS 上部署和管理集群所需的权限:

  • Tanzu Kubernetes Grid 设置的权限:当您运行 tanzu mc permissions aws set 命令或在安装程序界面中选中自动创建 AWS CloudFormation 堆栈 (Automate creation of AWS CloudFormation Stack) 复选框时,Tanzu Kubernetes Grid 会自动设置这些权限。
    • Tanzu CLI 别名 mcmanagement-cluster 的缩写。
  • 您设置的权限:您可以手动添加这些权限。

由 Tanzu Kubernetes Grid 设置的权限

要使 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 所需的权限

仅当您打算在 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" 权限。如果您的用户当前没有这些权限,则可以创建一个包含这些权限的自定义策略并将其附加到您的用户。

配置 AWS 帐户凭据

要使 Tanzu Kubernetes Grid 能够在 Amazon EC2 上创建和管理虚拟机,它必须具有 AWS 帐户以及:

  • AWS 帐户的凭据
  • 您计划在其中部署管理集群的每个 AWS 区域的帐户中注册的 SSH 密钥对

您必须设置帐户凭据,以便为计划部署 Tanzu Kubernetes Grid 集群的区域创建 SSH 密钥对。

有多个选项可用于配置用于访问 EC2 的 AWS 帐户凭据。下面的小节介绍了不同的选项。

VMware 建议使用“凭据配置文件”选项,该选项使用 aws configure 命令进行管理。这些配置文件将保存到本地共享的配置文件中,通常位于 ~/.aws/config 中。

使用多个凭据时,按优先级降序排列,可能的凭据配置选项包括:

  1. 工作负载集群配置文件变量(仅用于工作负载集群创建)。请参见下面的集群配置文件

  2. 本地静态环境变量。请参见下面的本地环境变量

  3. (推荐)凭据配置文件,在运行 aws configure 时更新。这些内容将保存到位于 Linux 或 macOS 上的 ~/.aws/config,或 Windows 上的 C:\Users\USERNAME\.aws\config,也可以命名为 credentials。请参见下面的凭据配置文件

  4. 实例配置文件凭据。您可以将 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-eastus-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_IDAWS_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 的凭据。

注册 EC2 密钥对

使用本地环境变量或在凭据文件和配置文件中设置 AWS 帐户凭据后,必须为 AWS 帐户生成EC2密钥对。Tanzu Kubernetes Grid 将此密钥对的公钥部分传递到 AWS,以便在每个区域中进行身份验证。

注意

AWS 仅支持 RSA 密钥。AWS 所需的密钥的格式与 vSphere 所需的密钥的不同。不能对 vSphere 部署和 AWS 部署使用相同的密钥对。

如果用于部署管理集群的帐户和区域还没有 EC2 密钥对,请执行以下步骤创建一个密钥对:

  1. 对于计划与 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 选项。

  2. 登录到 Amazon EC2 仪表板,然后转到网络和安全 > 秘钥对以验证创建的密钥对是否已在您的帐户中注册。

下一步操作

对于生产部署,强烈建议为集群启用身份管理:

如果在具有外部 Internet 连接的环境中使用 Tanzu Kubernetes Grid,在设置身份管理后,即可将管理集群部署到 AWS。

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