aws EKS 配置

通过 AWS 管理控制台部署 EKS 集群

  • Kubernetes 版本: v1.35

本示例中使用 EKS 自治模式

EKS 自治模式 接管了原本需要手动管理的节点、存储和网络配置,因此它需要一组非常具体且强大的权限
EKS 自治模式 有额外的费用,大概比 EC2 价格高 12%
EKS 自治模式 在集群创建完成后可修改(编辑)

  1. 创建 EKS 集群 IAM 角色

    每个集群都需要一个 Amazon EKS 集群 IAM 角色。由 Amazon EKS 管理的 Kubernetes 集群会使用此角色来管理节点
    AWS 官方参考文档: https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/cluster-iam-role.html#create-service-role

    1. 进入 IAM 控制台 -> 角色 -> 创建角色。

    2. 选择 AWS 服务,找到 EKS。

    3. 选择 EKS - Cluster 用例。

    4. 确保关联了以下权限策略。

      • AmazonEKSClusterPolicy
      • AmazonEKSComputePolicy
      • AmazonEKSBlockStoragePolicy
      • AmazonEKSNetworkingPolicy
      • AmazonEKSLoadBalancingPolicy
    5. 修改角色 信任关系 (Trust relationships) ,在 Action 列表中添加 sts:TagSession

      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Effect": "Allow",
      "Principal": {
      "Service": "eks.amazonaws.com"
      },
      "Action": ["sts:AssumeRole",
      "sts:TagSession"
      ]}
      ]
      }
    6. 命名为 eksClusterRole 并保存。

  2. 创建 EKS 节点 IAM 角色

    Amazon EKS 节点 kubelet 守护进程代表您调用 AWS API。节点通过 IAM 实例配置文件和关联的策略获得这些 API 调用的权限。您必须先为节点创建 IAM 角色以在启动它们时使用,然后才能启动这些节点并在集群中注册它们。
    AWS 官方参考文档: https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/create-node-role.html

    1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

    2. 在左侧导航窗格中,选择 Roles(角色)

    3. 在 Roles(角色)页面上,选择 Create role(创建角色)

    4. Select trusted entity(选择受信任的实体) 页面上,请执行以下操作:

      1. 在可信实体类型部分中,选择 AWS 服务。
        2, 在 Use case(使用案例)下,选择 EC2。
      2. 选择下一步。
    5. 在添加权限页面上,附加自定义策略或执行以下操作:

      1. Filter policies (筛选器策略) 框中,输入 AmazonEKSWorkerNodePolicy
      2. 选中搜索结果中的 AmazonEKSWorkerNodePolicy 左侧的复选框。
      3. 请选择 Clear filters(清除筛选条件)
      4. Filter policies (筛选器策略) 框中,输入 AmazonEC2ContainerRegistryPullOnly
      5. 选中搜索结果中的 AmazonEC2ContainerRegistryPullOnly 左侧的复选框。
      6. 选择下一步。
    6. Name, review, and create(命名、查看和创建)页面中 ,对角色(Role)命名,本示例使用 eksNodeRole

    7. 选择 创建角色

  3. 创建集群控制平面

    1. 进入 EKS 控制台 -> 集群 -> 添加集群 -> 创建。
    2. 配置集群:输入名称,选择 Kubernetes 版本,并选择已经创建的 集群 IAM 角色 eksClusterRole节点 IAM 角色 eksNodeRole
    3. 其他配置使用默认即可。

常见错误

集群角色缺少建议的托管策略

EKS 自治模式 的集群创建过程中缺少必要的权限

集群角色缺少建议的托管策略
集群角色必须具有以下托管策略或等效权限才能使用 EKS 自治模式:
- AmazonEKSBlockStoragePolicy
- AmazonEKSComputePolicy
- AmazonEKSLoadBalancingPolicy
- AmazonEKSNetworkingPolicy

EKS 自治模式 接管了原本需要手动管理的节点、存储和网络配置,因此它需要一组非常具体且强大的权限. 解决方法如下

  1. 登录 IAM 控制台,找到“角色 (Roles)”。

  2. 搜索并点击你为 EKS 集群创建的角色名称,本示例中为 eksClusterRole

  3. 权限 (Permissions) 选项卡下,点击 添加权限 (Add permissions) -> 附加策略 (Attach policies)

  4. 在搜索框中分别搜索并勾选上述四个策略:

    • AmazonEKSComputePolicy
    • AmazonEKSBlockStoragePolicy
    • AmazonEKSNetworkingPolicy
    • AmazonEKSLoadBalancingPolicy

最终的 权限策略 如下图所示:

集群角色信任策略缺少必需的操作

EKS 自治模式 的集群创建过程中缺少必要的权限

集群角色信任策略缺少必需的操作
集群角色必须具有其信任策略中指定的以下操作才能使用 EKS 自治模式:
- sts:TagSession

在 EKS 自治模式下,EKS 需要使用 sts:TagSession 来为它替你创建的资源(如自动生成的节点)进行身份标识和追踪。

修改 IAM 角色的 信任关系 (Trust relationships) ,将 sts:TagSession 操作添加到允许列表中。

  1. 进入 IAM 控制台 -> 角色 (Roles)。
  2. 搜索并点击你的 EKS 集群角色,本示例中为 eksClusterRole
  3. 点击 信任关系 (Trust relationships) 选项卡。
  4. 点击 编辑信任策略 (Edit trust policy) 。默认内容如下
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "Service": "eks.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
    }
    ]
    }
    修改为以下内容,在 Action 列表中添加 sts:TagSession
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "Service": "eks.amazonaws.com"
    },
    "Action": ["sts:AssumeRole",
    "sts:TagSession"
    ]}
    ]
    }
  5. 修改完成后,点击 更新策略 (Update policy)