总结:创建 EKS 集群。尝试从 docker 容器运行命令。获取错误。
设置。
按照 AWS 教程设置 EKS 集群
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 中。
在本地计算机上,容器外(SSO 身份验证)
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
看起来不错。从容器内
aws eks update-kubeconfig --name my-cluster --role-arn arn:aws:iam::accountB:role/RoleInAccountB
kubectl get svc
的权限收到错误“错误:您必须登录到服务器(未经授权)”
更新:我从 ec2(容器外)尝试了这个。我得到了相同的结果。
想知道以下指导是否是我接下来必须尝试的。 https://github.com/kubernetes-sigs/aws-iam-authenticator/blob/master/README.md
2021 年 3 月 19 日更新 仍然没有真正解决问题。我发现如果我在创建集群之前承担一个角色(控制台或 cli),那么我可以稍后在容器/ec2 中承担该角色并很好地操作集群。这是意料之中的,但它已成为我的工作。仍在寻找更改集群权限以允许其他角色(未创建集群)执行命令的正确方法。
答案 0 :(得分:0)
在运行 aws eks update-kubeconfig
之前最好先了解您当前的身份上下文,在第 9 步之前和之后帐户 A 中 aws sts get-caller-identity
的输出是什么?
另一件值得尝试的事情是打开生成的 KUBECONFIG 文件,查找辅助命令(如 aws-iam-authenticator
或 aws eks get-token
)并直接绕过 kubectl
身份验证处理逻辑执行它< /p>
这就是助手的样子
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