文章

03-AWS创建EKS集群

创建EKS前的准备

1
2
1. 网络: VPC、子网、路由表;
2. 授予IAM用户指定的权限;

创建集群

登录web控制台

EKS控制台: Amazon Elastic Kubernetes Service

Image

创建集群

1.根据情况,选择配置选项:

快速配置(EKS)

自定义配置 (选择)

Image

2.禁用 EKS自治模式

Image

3.集群配置: 集群名称;提前创建好IAM角色(可根据后面的 推荐创建的角色)

Image

4.kubernetes版本配置: 版本选择最新;升级策略: 选择已扩展

Image

5.自治模式计算-全新,默认

6.集群访问权限: 禁用集群管理员访问权限

启用集群管理员访问权限: 授予 本次创建集群的IAM角色 管理员权限;

禁用集群管理员访问权限: 禁止授予 当前IAM角色为本次创建集群的管理员权限;避免权限太乱,选此项

集群身份验证: EKS API 和 ConfigMap

EKS API: 该集群将仅从 EKS 访问条目 API 中获取经过身份验证的 IAM 主体

EKS API 和 ConfigMap: 该集群将从 EKS 访问条目 API 和 aws-auth ConfigMap 中获取经过身份验证的 IAM 主体。

Image

7.信封加密、ARC可用区转移、标签 根据需要设置,全部默认即可

Image

8.下一步,指定联网:

选择提前创建好的 VPC、子网、安全组(非必要,创建集群后会自动创建一个集群安全组)

其他默认即可

Image

9.集群端点访问: 公网和私网。根据需要设置,默认即可

Image

10.配置可观测性:默认

指标: Prometheus、CloudWatch 根据需要安装,一般默认即可

Image

11.控制面板日志: 集群核心组件的日志,默认即可,也可以全选利于排查问题

Image,如图

12.插件安装: 默认。安装默认已选择的插件即可,如图

Image

注意:

  1. Amazon VPC CNI 插件需要单独的IAM角色,根据 <创建推荐的角色>进行创建,创建的时候需要注意:

可信实体类型: AWS服务,默认

使用案例: EKS-Pod Identity,默认

Image

权限策略: 选择 AmazonEKS_CNI_Policy Image

13.下一步 –> 确认安装的内容 –> 创建。

需要等5-10min进程创建

创建节点池

前提条件:

使用的子网,需要能访问互联网,两种方式:

NAT网关统一出口网络: 02-AWS-使用NAT网关出口

直接互联网网关

1.创建节点池,点击: 添加节点组

Image

2.节点组配置:名称、IAM角色(没有创建按照<创建推荐的角色>创建)

Image

3.启动模版: 禁用,默认

Image

4.其他的默认

Kubernetes 标注: k8s中node的label

Kubernetes 污点: k8s中node的 污点标签

标签: 当前节点池的标签,非k8s节点标签

Image

5.下一步,设置计算和扩展配置

除了下面几项,其他默认:

实例类型: 根据需求选择实例类型

磁盘大小: 根据需要选择大小

节点组扩缩容: 所需: 1或0;最小:0;最大: 3

Image

6.下一步,指定联网

Image

7.下一步 –> 确认资源后 –> 创建。

需要等5-10min进程创建

如果有问题,可以看 遇到的问题

连接集群

授予IAM连接集群

1.配置IAM访问条目

Image

2.创建访问条目: 以AWS管理员账户为例

IAM主体: arn:aws:iam::<UID>:root

类型: 标准

其他可选配置默认

Image

3.下一步,访问策略: AmazonEKSClusterAdminPolicy(集群管理员)

访问范围: 集群

点击 添加策略,显示如下

Image

4.下一步 -> 创建。

配置kubeconfig配置文件

获取kubeconfig

测试连接

1
kubectl get nodes

遇到的问题

Container runtime network not ready: cni config uninitialized [closed]

1
2
3
4
5
6
7
8
9
10
现象: 添加节点组后,节点已加入集群,但是 一直报这个错误;

问题: CNI插件未安装或者安装之后无法生效

解决: CNI插件安装 需要绑定一个 IAM账号 或 EKS容器组身份,目的是为了绑定一个权限策略: AmazonEKS_CNI_Policy

AmazonEKS_CNI_Policy: 此策略为 Amazon VPC CNI 插件 (amazon-vpc-cni-k8s) 提供了修改您的 EKS 工作节点上的 IP 地址配置所需的权限;
https://docs.aws.amazon.com/zh_cn/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html

注意: 在创建 IAM 或 EKS创建容器组 身份的时候,需要手动筛选 AmazonEKS_CNI_Policy,并绑定,才可生效;

error: You must be logged in to the server (Unauthorized)

AWS官方文档: 未经授权或访问被拒绝 (kubectl)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
问题及现象: 
1. 已经使用命令:
aws eks update-kubeconfig --name <集群名称> --kubeconfig <kubeconfig path>
导出kubeconfig文件,但是kubectl连接时一直报验证失败的错误

原因: 与AWS k8s集群的访问权限有关,新创建的k8s集群默认有: API、API和ConfigMap 两种模式,不管是哪一种都需要将指定用户加入当前的集群

API模式: 即仅访问条目方式,使用 EKS 访问条目向 IAM 用户授予对 Kubernetes 的访问权限,
API和ConfigMap模式: 

ConfigMap: 即使用k8s集群中ConfigMap进行授权
 配置文件cm: kubectl -n kube-system get  configmap aws-auth


身份验证模式: 向 IAM 用户和角色授予对 Kubernetes APIs 的访问权限

身份验证模式 方法
仅 ConfigMap (CONFIG_MAP) aws-auth ConfigMap
EKS API 和 ConfigMap (API_AND_CONFIG_MAP) 访问 EKS API、AWS 命令行界面、AWS SDK、AWS CloudFormation AWS Management Console 和 aws-auth ConfigMap 中的条目
仅 EKS API (API) 访问 EKS API、AWS 命令行界面、AWS SDK、AWS CloudFormation 和 AWS Management Console中的条目

配置IAM访问条目

Image

配置集群管理员权限

1
2
3
# 配置IAM用户授予 管理员权限
IAM: arn:aws:iam::******:<用户名>
访问策略: AmazonEKSClusterAdminPolicy
本文由作者按照 CC BY 4.0 进行授权