本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

创建Amazon EC2集群

在本节中,您将学习如何在Amazon EC2中部署https://documentation.suse.com/cloudnative/rke2/[RKE2]或https://documentation.suse.com/cloudnative/k3s/[K3s] Kubernetes集群。

首先,您需要在Rancher中设置您的EC2云凭证。

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

先决条件

创建EC2集群

创建集群的步骤根据您的Rancher版本而有所不同。

创建您的云凭据

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

  1. 单击 ☰ > 集群管理

  2. 点击 云凭据

  3. 单击*创建*。

  4. 点击*Amazon*。

  5. 输入云凭证的名称。

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

  7. 输入您的AWS EC2 访问密钥*和*秘密密钥

  8. 单击*创建*。

*结果:*您已创建用于在集群中部署节点的云凭证。

创建您的集群

  1. 单击 ☰ > 集群管理

  2. 在*集群*页面,点击*创建*。

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

  4. 点击*Amazon EC2*。

  5. 选择一个*云凭证*(如果存在多个)。否则,它会被预选。

  6. 输入*集群名称*。

  7. 为每个Kubernetes角色创建一个机器池。请参考最佳实践,以获取角色分配和数量的建议。

    1. 为每个机器池定义机器配置。请参考EC2机器配置参考以获取有关配置选项的信息。

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

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

  10. 单击*创建*。

结果:

您的集群已创建并被分配为*正在配置*状态。Rancher 正在启动您的集群。

在集群状态更新为*活动*后,您可以访问您的集群。

*活动*集群被分配两个项目:

  • Default,包含`default`名称空间

  • System,包含 cattle-systemtraefikkube-publickube-system 名称空间

可选的后续步骤

创建集群后,您可以通过Rancher UI访问它。作为最佳实践,我们建议设置这些访问集群的替代方法:

  • *使用kubectl CLI访问您的集群:*按照这些步骤,在您的工作站上使用kubectl访问集群。在这种情况下,您将通过Rancher服务器的身份验证代理进行身份验证,然后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": "*"
    }
  ]
}