我们有两个集群,命名为:
“我”是我自己的AWS IAM用户。
我可以使用kubectl管理我创建的集群:
>>> aws eks update-kubeconfig --name MyCluster –profile MyUser
>>> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 59d
但是,我无法管理“OtherCluster”集群(不是由我创建的):
>>> aws eks update-kubeconfig --name OtherCluster --profile MyUser
>>> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
error: the server doesn't have a resource type "svc"
在阅读了这个github issue中遇到同样问题的人的反馈后,我尝试在最初创建“OtherCluster”的用户的上下文中进行此操作。
我通过编辑“〜/ .kube / config”,在“users.user.env”中添加“AWS_PROFILE”值来完成此操作。该配置文件表示创建群集的用户。
〜/ .kube /配置:
…
users
- name: OtherCluster
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
args:
- token
- -i
- OtherCluster
command: aws-iam-authenticator
env:
- name: AWS_PROFILE
value: OTHER_USER_PROFILE
…
这有效:
# ~/.kube/config is currently pointing to OtherCluster
>>> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 1d
在管理集群时,模仿他人显然不是很理想。我更愿意授予自己的用户访问权限,以通过kubectl管理集群。有没有什么办法可以授予管理群集给原始创建者以外的用户的权限?这似乎过于严格
创建Amazon EKS群集时,创建群集的IAM实体(用户或角色)将作为管理员添加到Kubernetes RBAC授权表中。最初,只有IAM用户可以使用kubectl调用Kubernetes API服务器。
要授予其他AWS用户与群集交互的能力,您必须在Kubernetes中编辑aws-auth
ConfigMap,为ConfigMap添加新的mapUsers
条目。 This EKS doc涵盖了所有过程。
要添加IAM用户:将用户详细信息添加到ConfigMap的mapUsers部分下的数据下。如果文件中尚不存在此部分,请添加此部分。每个条目都支持以下参数:
- userarn:要添加的IAM用户的ARN。
- username:Kubernetes中用于映射到IAM用户的用户名。默认情况下,用户名是IAM用户的ARN。
- groups:用户映射到的Kubernetes中的组列表。有关更多信息,请参阅默认角色和角色绑定 在Kubernetes文档中。
例:
apiVersion: v1
data:
mapRoles: |
- rolearn: arn:aws:iam::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
mapUsers: |
- userarn: arn:aws:iam::555555555555:user/my-new-admin-user
username: my-new-admin-user
groups:
- system:masters
使用适用于新用户的AWS身份验证配置文件为EKS重新配置kubectl似乎可以解决问题。
aws eks update-kubeconfig --name ${CLUSTER_NAME} --profile ${OTHER_USER}
其中${OTHER_USER}
是新用户,我试图授予对EKS群集的访问权限,以及谁不是最初创建cluter的用户。
我无法解释为什么这一步现在适用于我,但是当我发布这个问题时,我之前没有用。但希望这有助于其他人。