概要:创建EKS集群。尝试从docker容器运行命令。得到错误。
。
遵循AWS教程设置EKS集群
- 通过CFT创建VPC和支持基础设施
- 创建IAM角色和策略:myAmazonEKSClusterRole/AmazonEKSClusterPolicy
- 通过作为SSO登录的控制台创建EKS集群
- 等待集群准备就绪
- 从笔记本电脑/CLI认证为SSO,执行
aws eks update-kubeconfig --name my-cluster
-
执行
kubectl get svc
,效果良好 -
在IAM中创建身份提供者并关联EKS集群OpenID连接提供者URL
-
创建CNI角色和策略:myAmazonEKSCNIRole
-
通过
aws eks update-addon
命令将角色关联到集群 -
创建节点角色myAmazonEKSNodeRole并附加策略:AmazonEKSWorkerNodePolicy和AmazonEC2ContainerRegistryReadOnly
-
创建AWS密钥对
-
将节点组添加到具有上述角色和密钥对的集群
-
等待节点组活动
此时,如果我使用kubectl或helm进行测试,我就可以操作集群了。但是,我仍然以SSO用户身份进行身份验证,并且从我的笔记本电脑上运行。
。我想从一个docker容器内操作集群。所以我继续下面的步骤。
EKS集群在AWS账户b中。
- 在AWS账户B中创建角色(RoleInAccountB)。角色在账号b中具有管理员访问策略。
- 在帐号A和帐号B之间建立信任,使得帐号A中的用户可以承担帐号B中的角色
在本地计算机上,容器外(SSO身份验证)
- 下载aws-auth-cm。并自定义它以添加新角色:
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- groups:
- system:masters
rolearn: arn:aws:iam::<Account B>:role/RoleInAccountB
username: DOESNTMATTER
- 执行
kubectl apply -f aws-auth-cm.yaml
- 监视节点以确保它们准备就绪
kubectl get nodes –watch
- 验证配置
kubectl describe configmap -n kube-system aws-auth
看起来很好。 - SSH到帐号A的EC2
- 在EC2上运行docker容器(镜像已经安装了必要的依赖项,如aws cli, kubectl等)
从容器内
- 承担账号B角色
- 添加角色到kube配置
aws eks update-kubeconfig --name my-cluster --role-arn arn:aws:iam::accountB:role/RoleInAccountB
- 执行test检查
kubectl get svc
集群权限
接收错误" error: You must be logged in to server (Unauthorized)">
更新:我从ec2(容器外)尝试了这个。我得到了相同的结果。
想知道下面的指导是我下一步要尝试的。https://github.com/kubernetes-sigs/aws-iam-authenticator/blob/master/README.md
更新3/19/2021仍然没有真正解决问题的办法。我发现,如果我在创建集群之前假设一个角色(控制台或cli),那么我可以稍后在容器/ec2中假设该角色并很好地操作集群。这是意料之中的,但它已经成为我的工作。仍然在寻找正确的方法来更改集群权限,以允许其他角色(没有创建集群)执行命令。
在运行aws eks update-kubeconfig
之前最好先了解您当前的身份上下文,aws sts get-caller-identity
在步骤9之前和之后在帐户A中的输出将是什么?
另一件值得尝试的事情是打开生成的KUBECONFIG文件,查找helper命令(如aws-iam-authenticator
或aws eks get-token
)并直接执行它,绕过kubectl
身份验证处理逻辑
这就是帮助器的样子
aws eks get-token --cluster-name my-cluster --role arn:aws:iam::accountB:role/RoleInAccountB
或
aws-iam-authenticator token -i my-cluster -r arn:aws:iam::accountB:role/RoleInAccountB
输出是什么?
第三件事,您可以使用AWS命名配置文件,以使用role_arn
/source_arn
组合在帐户之间透明地假设AWS IAM角色。
https://docs.aws.amazon.com/cli/latest/topic/config-vars.html using-aws-iam-roles