amazon-web-services - 只有创建者用户才能从 kubectl 管理 AWS kubernetes 集群 (EKS)?
问题描述
我们有两个集群,命名为:
- MyCluster(由我创建)
- OtherCluster(不是我创建的)
其中“我”是我自己的 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 问题中遇到相同问题的反馈后,我尝试在最初创建“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 用户与您的集群交互的能力,您必须aws-auth
在 Kubernetes 中编辑 ConfigMap,mapUsers
为您的 ConfigMap 添加一个新条目。此 EKS 文档涵盖了所有过程。
要添加 IAM 用户:将用户详细信息添加到 ConfigMap 的 mapUsers 部分的 data 下。如果文件中不存在此部分,请添加此部分。每个条目都支持以下参数:
- 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
推荐阅读
- webgl - pointSize 大于 1 的顶点的屏幕坐标
- jquery - 获取壁橱的价值select2 jquery
- amazon-dynamodb - DynamoDB Keys - 一个高基数一个低基数?
- angular - 从 API 接收“应用程序/八位字节流”时 JSON 中出现意外令牌
- angular - Angular 5 - httpClient 未按请求发送标头
- algorithm - 使用重复值编码排列
- entity-framework - 自定义实体框架核心迁移脚本?
- java - androidGradle 构建失败任务':app:processDebugResources'的执行失败
- javascript - 使用 WebAudio 的时钟来安排 Cordova 的功能
- r - 数据整理帮助:用所有数据拆分一列