试图从容器内访问EKS集群



概要:创建EKS集群。尝试从docker容器运行命令。得到错误。

遵循AWS教程设置EKS集群

  1. 通过CFT创建VPC和支持基础设施
  2. 创建IAM角色和策略:myAmazonEKSClusterRole/AmazonEKSClusterPolicy
  3. 通过作为SSO登录的控制台创建EKS集群
  4. 等待集群准备就绪
  5. 从笔记本电脑/CLI认证为SSO,执行

aws eks update-kubeconfig --name my-cluster

  1. 执行kubectl get svc,效果良好

  2. 在IAM中创建身份提供者并关联EKS集群OpenID连接提供者URL

  3. 创建CNI角色和策略:myAmazonEKSCNIRole

  4. 通过aws eks update-addon命令将角色关联到集群

  5. 创建节点角色myAmazonEKSNodeRole并附加策略:AmazonEKSWorkerNodePolicy和AmazonEC2ContainerRegistryReadOnly

  6. 创建AWS密钥对

  7. 将节点组添加到具有上述角色和密钥对的集群

  8. 等待节点组活动

此时,如果我使用kubectl或helm进行测试,我就可以操作集群了。但是,我仍然以SSO用户身份进行身份验证,并且从我的笔记本电脑上运行。

。我想从一个docker容器内操作集群。所以我继续下面的步骤。

EKS集群在AWS账户b中。

  1. 在AWS账户B中创建角色(RoleInAccountB)。角色在账号b中具有管理员访问策略。
  2. 在帐号A和帐号B之间建立信任,使得帐号A中的用户可以承担帐号B中的角色

在本地计算机上,容器外(SSO身份验证)

  1. 下载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
  1. 执行kubectl apply -f aws-auth-cm.yaml
  2. 监视节点以确保它们准备就绪kubectl get nodes –watch
  3. 验证配置kubectl describe configmap -n kube-system aws-auth看起来很好。
  4. SSH到帐号A的EC2
  5. 在EC2上运行docker容器(镜像已经安装了必要的依赖项,如aws cli, kubectl等)

从容器内

  1. 承担账号B角色
  2. 添加角色到kube配置

aws eks update-kubeconfig --name my-cluster --role-arn arn:aws:iam::accountB:role/RoleInAccountB

  1. 执行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-authenticatoraws 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

相关内容

  • 没有找到相关文章

最新更新