Amazon web services 如何从EC2实例概要文件管理EKS?
我们的系统有EKS-kubernetes集群。我们从EC2实例“bastion hosts”管理它们,在那里我们使用ssh连接,配置凭据,并使用kubectl管理集群 我们不想继续在EC2主机上手动配置凭据 因此,我试图将EC2实例概要文件与具有管理集群的适当权限的EC2主机相关联。但是,它不起作用 EC2实例有一个IAM实例配置文件,该配置文件与包含此策略(完整EKS权限)的角色关联 因此,当我运行以下命令时,我希望能够列出EKS上的活动服务:Amazon web services 如何从EC2实例概要文件管理EKS?,amazon-web-services,kubernetes,amazon-ec2,amazon-iam,amazon-eks,Amazon Web Services,Kubernetes,Amazon Ec2,Amazon Iam,Amazon Eks,我们的系统有EKS-kubernetes集群。我们从EC2实例“bastion hosts”管理它们,在那里我们使用ssh连接,配置凭据,并使用kubectl管理集群 我们不想继续在EC2主机上手动配置凭据 因此,我试图将EC2实例概要文件与具有管理集群的适当权限的EC2主机相关联。但是,它不起作用 EC2实例有一个IAM实例配置文件,该配置文件与包含此策略(完整EKS权限)的角色关联 因此,当我运行以下命令时,我希望能够列出EKS上的活动服务: [ec2-user@ip-10-0-0-72 ~
[ec2-user@ip-10-0-0-72 ~]$ aws eks update-kubeconfig --name my_eks_cluster_name
[ec2-user@ip-10-0-0-72 ~]$ kubectl get svc
error: the server doesn't have a resource type "svc"
这个错误意味着我没有权限。我通过在主机上配置一些AWS凭据证明了这一点:
[ec2-user@ip-10-0-0-72 ~]$ export AWS_ACCESS_KEY_ID=...
[ec2-user@ip-10-0-0-72 ~]$ export AWS_SECRET_ACCESS_KEY=...
[ec2-user@ip-10-0-0-72 ~]$ export AWS_SESSION_TOKEN=...
现在,我尝试列出svc:
[ec2-user@ip-10-0-0-72 ~]$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 85d
[ec2-user@ip-10-0-0-72~]$kubectl获得svc
名称类型CLUSTER-IP外部IP端口年龄
kubernetes ClusterIP 172.20.0.1 443/TCP 85d
它起作用了
为什么IAM实例角色不足以让我通过kubectl管理EKS群集?感谢@jordanm指出EKS使用configmap来处理授权 我能够编辑configmap,添加一个条目来映射EC2实例概要文件的IAM角色,
arn:aws:IAM::111111111:role/eks\u management\u host\u jw\u jw
,到kubernetes系统:masters
组(admins)
#请编辑下面的对象。以“#”开头的行将被忽略,
#空文件将中止编辑。如果在保存此文件时发生错误,将删除此文件
#在出现相关故障时重新打开。
#
版本:v1
数据:
地图角色:|
-小组:
-系统:引导程序
-系统:节点
rolearn:arn:aws:iam::111111111:role/eks\u node\u jw\u jw
用户名:系统:节点:{{EC2PrivateDNSName}
-组:#默认情况下,只有集群创建者有权访问集群内的资源,而没有任何其他用户或角色。
为了向任何其他用户/角色授予集群权限,EKS在kube system
命名空间中有一个名为aws ath
的配置映射。您必须在其中定义mapRoles
,才能向其他角色授予权限。与向其他用户授予权限类似,应定义mapUsers
范例
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- rolearn: <ARN of instance role (not instance profile)>
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
- system:masters
apiVersion:v1
种类:配置地图
元数据:
名称:aws auth
名称空间:kube系统
数据:
地图角色:|
-rolearn:IAM策略实际上不是群集用于授权API调用的策略。它使用将IAM角色映射到k8s群集角色的configmap@jordanm感谢这个链接帮助我找到了添加角色映射(EC2实例配置文件角色系统:masters k8s权限)的方法,现在EC2可以与EKS对话了
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::111111111111:role/eks_node_jw_jw
username: system:node:{{EC2PrivateDNSName}}
- groups: # <-- I added this
- system:masters
rolearn: arn:aws:iam::111111111111:role/eks_management_host_jw_jw
username: system:admin
kind: ConfigMap
metadata:
# ...
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- rolearn: <ARN of instance role (not instance profile)>
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
- system:masters