创建 Amazon EC2 集群

在本节中,你将学习如何使用 Rancher 在 Amazon EC2 中安装 RKE Kubernetes 集群。

首先,在 Rancher 中设置你的 EC2 云凭证。然后,使用云凭证创建一个节点模板,Rancher 将使用该模板在 EC2 中配置新节点。

然后,在 Rancher 中创建一个 EC2 集群,并在配置新集群时为集群定义节点池。每个节点池都有一个 etcd、controlplane 或 worker 的 Kubernetes 角色。Rancher 会在新节点上安装 RKE Kubernetes,并为每个节点设置节点池定义的 Kubernetes 角色。

先决条件

创建 EC2 集群

创建集群的步骤因 Rancher 版本而异。

  • RKE

  • RKE2

1. 创建云凭证

  1. 点击 ☰ > 集群管理。

  2. 单击云凭证。

  3. 单击创建。

  4. 单击 Amazon。

  5. 输入云凭证的名称。

  6. 在默认区域字段中,选择集群节点所在的 AWS 区域。

  7. 输入 AWS EC2 Access Key 和 Secret Key。

  8. 单击创建。

结果:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。

2. 使用云凭证和 EC2 的信息来创建节点模板

为 EC2 创建节点模板会允许 Rancher 在 EC2 中配置新节点。其他集群可以复用节点模板。

  1. 点击 ☰ > 集群管理。

  2. 单击 menu:RKE1 配置[节点模板]。

  3. 单击添加模板。

  4. 填写 EC2 的节点模板。有关填写表单的帮助,请参阅 EC2 节点模板配置。

  5. 单击创建。

    如果要使用双栈功能,请关注其他额外的要求。

3. 使用节点模板创建具有节点池的集群

将一个或多个节点池添加到你的集群。有关节点池的更多信息,请参阅本节。

  1. 点击 ☰ > 集群管理。

  2. 在集群页面上,单击创建。

  3. 单击 Amazon EC2。

  4. 为每个 Kubernetes 角色创建一个节点池。为每个节点池选择你已创建的节点模板。有关节点池的更多信息,包括为节点分配 Kubernetes 角色的最佳实践,请参阅本节。

  5. 点击添加成员添加可以访问集群的用户。使用角色下拉菜单为每个用户设置权限。

  6. 使用集群选项选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。参见选择云提供商来配置 Kubernetes 云提供商。如需获取配置集群的帮助,请参阅 RKE 集群配置参考。

    如果要使用双栈功能,请关注其他额外的要求。

  7. 单击创建。

1. 创建云凭证

如果你已经有一组可用的云凭证,请跳过此部分。

  1. 点击 ☰ > 集群管理。

  2. 单击云凭证。

  3. 单击创建。

  4. 单击 Amazon。

  5. 输入云凭证的名称。

  6. 在默认区域字段中,选择集群节点所在的 AWS 区域。

  7. 输入 AWS EC2 Access Key 和 Secret Key。

  8. 单击创建。

结果:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。

2. 创建你的集群

  1. 点击 ☰ > 集群管理。

  2. 在集群页面上,单击创建。

  3. 将开关切换到 RKE2/K3s。

  4. 单击 Amazon EC2。

  5. 选择一个云凭证。如果存在多个则需要选择。否则,它是预选的。

  6. 输入集群名称。

  7. 为每个 Kubernetes 角色创建一个主机池。请参阅最佳实践了解角色分配和计数的建议。

    1. 为每个主机池定义主机配置。有关配置选项的信息,请参阅 EC2 主机配置参考。

  8. 使用集群配置,选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。有关配置集群的帮助,请参阅 RKE2 集群配置参考。

  9. 使用成员角色为集群配置用户授权。点击添加成员添加可以访问集群的用户。使用角色下拉菜单为每个用户设置权限。

  10. 单击创建。

结果:

你已创建集群,集群的状态是配置中。Rancher 已在你的集群中。

当集群状态变为 Active 后,你可访问集群。

Active 状态的集群会分配到两个项目:

  • Default:包含 default 命名空间

  • System:包含 cattle-system,ingress-nginx,kube-public 和 kube-system 命名空间。

可选的后续步骤

创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式:

  • 通过 kubectl CLI 访问你的集群:按照这些步骤在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。

  • 通过 kubectl CLI 使用授权的集群端点访问你的集群:按照这些步骤直接使用 kubectl 访问集群,而无需通过 Rancher 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。

IAM 策略

IAM 策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:Describe*",
                "ec2:ImportKeyPair",
                "ec2:CreateKeyPair",
                "ec2:CreateSecurityGroup",
                "ec2:CreateTags",
                "ec2:DeleteKeyPair",
                "ec2:ModifyInstanceMetadataOptions"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:REGION::image/ami-*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*"
            ]
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:TerminateInstances",
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
        }
    ]
}

带有 PassRole 的 IAM 策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:Describe*",
                "ec2:ImportKeyPair",
                "ec2:CreateKeyPair",
                "ec2:CreateSecurityGroup",
                "ec2:CreateTags",
                "ec2:DeleteKeyPair",
                "ec2:ModifyInstanceMetadataOptions"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:REGION::image/ami-*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
                "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*",
                "arn:aws:iam::AWS_ACCOUNT_ID:role/YOUR_ROLE_NAME"
            ]
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:TerminateInstances",
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
        }
    ]
}

允许加密 EBS 卷的 IAM 策略示例

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:Encrypt",
        "kms:DescribeKey",
        "kms:CreateGrant",
        "ec2:DetachVolume",
        "ec2:AttachVolume",
        "ec2:DeleteSnapshot",
        "ec2:DeleteTags",
        "ec2:CreateTags",
        "ec2:CreateVolume",
        "ec2:DeleteVolume",
        "ec2:CreateSnapshot"
      ],
      "Resource": [
        "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
        "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
        "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:snapshot/*",
        "arn:aws:kms:REGION:AWS_ACCOUNT_ID:key/KMS_KEY_ID"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances",
        "ec2:DescribeTags",
        "ec2:DescribeVolumes",
        "ec2:DescribeSnapshots"
      ],
      "Resource": "*"
    }
  ]
}