创建 Amazon EKS 集群 - Amazon EKS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建 Amazon EKS 集群

本主题说明如何创建 Amazon EKS 集群。如果您是首次创建 Amazon EKS 集群,建议您按照我们的开始使用 Amazon EKS指南之一操作。它们提供了使用节点创建 Amazon EKS 集群的完整的端到端演练。

重要

创建 Amazon EKS 集群后,创建集群的 IAM 实体(用户或角色)将添加到 Kubernetes RBAC 授权表作为管理员(具有 system:masters 权限)。最初,只有IAM该用户可以使用 调用 Kubernetes API 服务器kubectl。 有关更多信息,请参阅管理集群的用户或 IAM 角色。如果使用控制台创建集群,则必须确保在集群上运行 IAM 命令时,相同的 AWS 用户凭证位于 kubectl 开发工具包凭证链中。

您可以使用 eksctl、 AWS 管理控制台或 创建集群AWS CLI。选择带有要用于创建集群的工具名称的选项卡。

eksctl

Prerequisites

  • eksctl 安装了 版本 0.36.0 或更高版本。要安装或升级,请参阅eksctl 命令行实用程序

  • 与要安装的 Kubernetes 版本kubectl匹配的 版本。要安装或升级它,请参阅安装 kubectl

  1. 在您的默认区域中使用Amazon EKS最新的 Kubernetes 版本创建集群。将 <example-values> (包括 <>)替换为您自己的值。您可以将 <1.18> 替换为任何受支持的版本

    eksctl create cluster \ --name <my-cluster> \ --version <1.18> \ --with-oidc \ --without-nodegroup
    注意

    要查看在使用 eksctl 创建集群时可指定的大多数选项,请使用 eksctl create cluster --help 命令。要查看所有选项,您可以使用配置文件。有关更多信息,请参阅 文档中的使用配置文件配置文件架构eksctl。您可以在 上查找配置文件示例GitHub。

    重要

    不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。有关更多信息,请参阅 使用 启动自管理 Windows 节点 AWS 管理控制台

    警告

    如果您使用具有 secretsEncryption 选项的配置文件创建集群(这需要现有AWS Key Management Service密钥),并且您使用的密钥会被删除,则无法恢复集群。如果启用信封加密,将使用您选择的客户主密钥 (CMK) 加密 Kubernetes 密钥。CMK 必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 CMK,则用户必须具有对 CMK 的访问权限。有关更多信息,请参阅 https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html 开发人员指南 中的AWS Key Management Service允许其他账户中的用户使用 CMK。使用 AWS KMS CMK 进行 Kubernetes 密钥加密需要 Kubernetes 版本 1.13 或更高版本。

    默认情况下, create-key 命令使用密钥策略创建一个对称密钥,该密钥策略向账户的根用户管理员授予对 AWS KMS 操作和资源的访问权限。有关更多信息,请参阅创建密钥. 如果要缩小权限的范围,请确保允许对将调用 kms:DescribeKey API 的委托人的密钥策略执行 kms:CreateGrantcreate-cluster 操作。 Amazon EKS 不支持密钥策略条件 kms:GrantIsForAWSResource。 如果此操作位于密钥策略语句中,则创建集群将不起作用。

    集群预配置需要几分钟时间。在集群创建过程中,您将看到几行输出。输出的最后一行类似于以下示例行。

    [✓] EKS cluster "<my-cluster>" in "<region-code>" region is ready
  2. 当您的集群准备就绪时,测试您的 kubectl 配置是否正确。

    kubectl get svc
    注意
    注意

    如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝 (kubectl)

    输出:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
AWS 管理控制台

Prerequisites

使用控制台创建集群

  1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

  2. 选择 Create Cluster (创建集群).

  3. Configure cluster (配置集群) 页面上,填写以下字段:

    • Name (名称) – 集群的独特名称。

    • Kubernetes version (Kubernetes 版本) – 要用于集群的 Kubernetes 的版本。

    • 集群服务角色 – 选择Amazon EKS集群角色以允许 Kubernetes 控制层面代表您管理 AWS 资源。有关更多信息,请参阅Amazon EKS 集群 IAM 角色.

    • Secrets encryption (密钥加密) –(可选)选择使用 AWS Key Management Service ( (AWS KMS).) 启用 Kubernetes 密钥的信封加密。如果启用信封加密,将使用您选择的客户主密钥 (CMK) 加密 Kubernetes 密钥。CMK 必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 CMK,则用户必须具有对 CMK 的访问权限。有关更多信息,请参阅 https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html 开发人员指南 中的AWS Key Management Service允许其他账户中的用户使用 CMK。

      使用 AWS KMS CMK 进行 Kubernetes 密钥加密需要 Kubernetes 版本 1.13 或更高版本。如果未列出任何密钥,则必须先创建一个密钥。有关更多信息,请参阅创建密钥.

      注意

      默认情况下, create-key 命令使用密钥策略创建一个对称密钥,该密钥策略向账户的根用户管理员授予对 AWS KMS 操作和资源的访问权限。如果要缩小权限的范围,请确保允许对将调用 kms:DescribeKey API 的委托人的密钥策略执行 kms:CreateGrantcreate-cluster 操作。

      Amazon EKS 不支持密钥策略条件 kms:GrantIsForAWSResource。 如果此操作位于密钥策略语句中,则创建集群将不起作用。

      警告

      删除 CMK 会将集群永久性置于降级状态。如果计划删除CMKs用于集群创建的任何 ,请在删除前验证这是预期操作。删除密钥后,将无法恢复集群。

    • Tags (标签) –(可选)将任意标签添加到您的集群。有关更多信息,请参阅给您的 Amazon EKS 资源加标签.

  4. 选择 Next (下一步).

  5. Specify networking (指定联网) 页面上,选择以下字段的值:

    • VPC – 选择要用于集群的现有 VPC。如果未列出任何 ,则您需要先创建一个。有关更多信息,请参阅为 Amazon EKS 集群创建 VPC.

    • Subnets (子网) – 默认情况下,已预先选中在之前字段中指定的 VPC 中的可用子网。取消选择您不希望托管集群资源的任何子网,例如工作线程节点或负载均衡器。子网必须满足 Amazon EKS 集群的要求。有关更多信息,请参阅集群 VPC 注意事项.

      重要

      如果您选择在 March 26, 2020之前使用任一 Amazon EKS AWS CloudFormation VPC 模板创建的子网,请注意 March 26, 2020.引入的默认更改。有关更多信息,请参阅为 Amazon EKS 集群创建 VPC.

      重要

      创建集群时,请勿选择 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中的子网。创建集群后,您可以使用集群名称标记 AWS Outposts AWS Wavelength 或 AWS 本地扩展区子网,这样,您就可以将自行管理的节点部署到子网。有关更多信息,请参阅子网添加标签要求

    • Security groups (安全组–) 创建 VPC SecurityGroups时生成的输出中的AWS CloudFormation为 Amazon EKS 集群创建 VPC值。此安全组在下拉菜单ControlPlaneSecurityGroup名称中具有 。

      重要

      节点AWS CloudFormation模板修改您在此处指定的安全组,因此, Amazon EKS 强烈建议您为每个集群控制层面使用专用安全组 (每个集群一个)。如果此安全组与其他资源共享,您可能会阻止或中断与这些资源的连接。

    • (可选)选择 Configure Kubernetes Service IP address range (配置 Kubernetes 服务 IP 地址范围) 并指定 Service range (服务IPv4范围)(如果要指定 Kubernetes 为哪些 CIDR 块分配服务 IP 地址)。CIDR 块必须满足以下要求:

      • 在以下范围之一中:10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16。

      • 介于 /24 和 /12 之间。

      • 不与 VPC 中指定的任何 CIDR 块重叠。

      我们建议指定一个 CIDR 块,该块不与对等或连接到您的 VPC 的任何其他网络重叠。如果您未启用该功能,Kubernetes 会从 10.100.0.0/16 或 172.20.0.0/16 CIDR 块分配服务 IP 地址。

      重要

      您只能在创建集群时指定自定义 CIDR 块,并且在创建集群后,无法更改此值。

    • 对于 Cluster endpoint access (集群终端节点访问–),选择以下选项之一:

      • Public (公有) – 仅允许对集群的 Kubernetes API 服务器终端节点进行公有访问。来自集群 VPC 外部的 Kubernetes API 请求将使用公有终端节点。默认情况下,允许从任何源 IP 地址访问。您可以选择限制对一个或多个 CIDR 范围(如 192.168.0.0/16)的访问,例如,通过选择 Advanced settings (高级设置),然后选择 Add source (添加源).

      • Private (私有) – 仅允许对集群的 Kubernetes API 服务器终端节点进行私有访问。源自集群的 VPC 内的 Kubernetes API 请求将使用私有 VPC 终端节点。

        重要

        如果您创建了没有出站 Internet 访问的 VPC,则必须启用私有访问。

      • Public and private (公有和私有) – 启用公有和私有访问。

      有关以前选项的更多信息,请参阅修改集群终端节点访问.

  6. 如果您在上一页中选择了 Kubernetes 版本 1.17 或更早版本,请跳到下一步。如果您选择版本 1.18,请接受 Networking add-ons (联网附加组件) 部分中的默认项,以安装最新版本的 AWS VPC CNI Amazon EKS 附加组件。您只能对 1.18 Amazon EKS 集群使用附加组件,因为Amazon EKS附加组件需要服务器端应用 Kubernetes 功能,该功能在 Kubernetes 1.18 之前不可用。如果您为集群选择了其他 Kubernetes 版本,则不会显示此选项。

    重要

    AWS VPC CNI 附加组件配置为使用分配给 IAM 的权限Amazon EKS 节点IAM角色。创建集群后,在将任何Amazon EC2节点部署到集群之前,您必须确保AmazonEKS_CNI_PolicyIAM将策略附加到节点IAM角色,或附加到与附加项运行为于的 Kubernetes 服务账户关联的其他角色。我们建议您按照中的说明操作,将策略分配给与节点IAM角色不同的IAM角色配置 VPC CNI 插件以使用服务账户的 IAM 角色。创建集群和IAM角色后,您可以更新附加组件以使用您创建IAM的角色。

  7. 选择 Next (下一步).

  8. Configure logging (配置日志记录) 页面上,您可以选择要启用的日志类型(可选)。默认情况下,每个日志类型均为已禁用. 有关更多信息,请参阅Amazon EKS 控制层面日志记录.

  9. 选择 Next (下一步).

  10. Review and create (审核和创建) 页面上,查看您在先前页面上输入或选择的信息。如果您需要对任何选择进行更改,请选择 Edit (编辑)。对设置满意后,选择 Create (创建). Status (状态) 字段显示 CREATING (正在创建),直到集群预配置过程完成。

    注意
    注意

    您可能会收到一个错误,指示请求中的可用区之一没有创建 Amazon EKS 集群的足够容量。如果发生这种情况,错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户所支持可用区中的子网创建集群。有关更多信息,请参阅容量不足

    集群预配置需要几分钟时间。

  11. (可选)要使用Amazon EKS附加组件,或要使单个 Kubernetes 工作负载能够具有特定IAM权限,您需要为集群启用 OpenID Connect (OIDC) 提供程序。要为您的集群配置 OIDC 提供商,请参阅为集群创建 IAM OIDC 提供商。您只需为集群启用一次 OIDC 提供商。要了解有关Amazon EKS附加组件的更多信息,请参阅配置附加Amazon EKS组件。要了解有关向工作负载分配特定IAM权限的更多信息,请参阅技术概览

  12. 按照 中的过程kubeconfig 为 创建 Amazon EKS启用与新集群的通信。

  13. (可选)在将节点部署到集群之前,我们建议配置通过集群部署的 AWS VPC CNI 插件,以便为服务账户使用 IAM 角色。有关更多信息,请参阅配置 VPC CNI 插件以使用服务账户的 IAM 角色.

AWS CLI

Prerequisites

使用 创建集群AWS CLI

  1. 使用以下命令创建集群。替换您在中创建的 Amazon 资源名称 (ARN) 集群Amazon EKS角色IAM的 Amazon EKS 集群 IAM 角色 ,以及您在中创建的 IDs VPC 的子网和安全组为 Amazon EKS 集群创建 VPC。替换 <my-cluster> (包括 <><region-code> 替换为您的集群名称,以及支持的区域。您可以将 <1.18> 替换为任何受支持的版本

    aws eks create-cluster \ --region <region-code> \ --name <my-cluster> \ --kubernetes-version <1.18> \ --role-arn <arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-EXAMPLEBKZRQR> \ --resources-vpc-config subnetIds=<subnet-a9189fe2>,<subnet-50432629>,securityGroupIds=<sg-f5c54184>
    重要

    不要在 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中指定子网。仅在区域中指定子网。在部署集群后,使用集群名称标记 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区(要将自行管理的节点部署到的子网)。有关更多信息,请参阅子网添加标签要求

    注意

    如果 IAM 用户没有管理员特权,则必须为该用户显式添加权限以调用 Amazon EKS API 操作。有关更多信息,请参阅Amazon EKS 基于身份的策略示例.

    输出:

    { "cluster": { "name": "<my-cluster>", "arn": "arn:aws:eks:<region-code>:<111122223333>:cluster/<my-cluster>", "createdAt": <1527785885.159>, "version": "<1.18>", "roleArn": "arn:aws:iam::<111122223333>:role/eks-service-role-AWSServiceRoleForAmazonEKS-<AFNL4H8HB71F>", "resourcesVpcConfig": { "subnetIds": [ "<subnet-a9189fe2>", "<subnet-50432629>" ], "securityGroupIds": [ "<sg-f5c54184>" ], "vpcId": "<vpc-a54041dc>", "endpointPublicAccess": true, "endpointPrivateAccess": false }, "status": "CREATING", "certificateAuthority": {} } }
    注意
    注意

    您可能会收到一个错误,指示请求中的可用区之一没有创建 Amazon EKS 集群的足够容量。如果发生这种情况,错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户所支持可用区中的子网创建集群。有关更多信息,请参阅容量不足

    要使用 AWS Key Management Service (AWS KMS) 中的客户主密钥 (CMK) 加密 Kubernetes 密钥,请先使用 create-key 操作创建 CMK。

    MY_KEY_ARN=$(aws kms create-key --query KeyMetadata.Arn —-output text)
    注意

    默认情况下, create-key 命令使用密钥策略创建一个对称密钥,该密钥策略向账户的根用户管理员授予对 AWS KMS 操作和资源的访问权限。如果要缩小权限的范围,请确保允许对将调用 kms:DescribeKey API 的委托人的密钥策略执行 kms:CreateGrantcreate-cluster 操作。

    Amazon EKS 不支持密钥策略条件 kms:GrantIsForAWSResource。 如果此操作位于密钥策略语句中,则创建集群将不起作用。

    --encryption-config 参数添加到 aws eks create-cluster 命令。只有在创建集群时,才能启用 Kubernetes 密钥的加密。

    --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"<$MY_KEY_ARN>"}}]'

    keyArn 成员可以包含您的 CMK 的别名或 ARN。CMK 必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 CMK,则用户必须具有对 CMK 的访问权限。有关更多信息,请参阅 https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html 开发人员指南 中的AWS Key Management Service允许其他账户中的用户使用 CMK。使用 AWS KMS CMK 进行 Kubernetes 密钥加密需要 Kubernetes 版本 1.13 或更高版本。

    警告

    删除 CMK 会将集群永久性置于降级状态。如果计划删除CMKs用于集群创建的任何 ,请在删除前验证这是预期操作。删除密钥后,将无法恢复集群。

  2. 集群预配置需要几分钟时间。可使用以下命令查询集群的状态。如果集群状态为 ACTIVE,则可继续操作。

    aws eks --region <region-code> describe-cluster --name <my-cluster> --query "cluster.status"
  3. 在完成集群配置后,使用以下命令检索 endpointcertificateAuthority.data 值。您必须将这些值添加到kubectl配置中,以便能与您的集群进行通信。

    1. 检索 endpoint.

      aws eks --region <region-code> describe-cluster --name <my-cluster> --query "cluster.endpoint" --output text
    2. 检索 certificateAuthority.data.

      aws eks --region <region-code> describe-cluster --name <my-cluster> --query "cluster.certificateAuthority.data" --output text
  4. 现已创建集群,请按照kubeconfig 为 创建 Amazon EKS 中的过程来启用与新集群的通信。

  5. (可选)如果 AmazonEKS_CNI_Policy 托管IAM策略附加到您的节点IAM角色,我们建议您将其分配给 IAM 角色,以便改为将它分配给 Kubernetes aws-node 服务账户。有关更多信息,请参阅配置 VPC CNI 插件以使用服务账户的 IAM 角色.