我在GCP中使用GKE Kubernetes。我是GCP,GKE和kubectl的新手。我正在尝试创建新的Kubernetes用户以为其分配ClusterRoleBindings,然后以这些用户身份登录(kubectl)。
我看不到GCP用户和Kubernetes“用户”之间的关系(我知道Kubernetes中没有User对象类型)。
根据https://cloud.google.com/kubernetes-engine/docs/concepts/security-overview的说法,Kubernetes用户帐户是Google帐户。
因此,我创建了一些Google帐户,然后通过IAM将它们与我的GCP帐户相关联。我可以在IAM中看到这些帐户很好。
然后,我对这些新用户执行了gcloud auth登录,然后可以在gcloud auth列表中看到他们。然后,我尝试以各种用户身份访问gcloud资源(gcloud计算磁盘列表)。这按预期工作-遵守了GCP用户权限。
然后,我创建了一个Kubernetes UserRole。下一步是使用UserRoleBinding将这些用户绑定(bind)到那些角色。
ClusterRole.yaml(可以正常创建):
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
name: cluster-role-pod-reader-1
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
ClusterRoleBinding.yaml(可以正常创建):
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cluster-role-binding-pod-reader-1
subjects:
- kind: User
name: MYTESTUSER@gmail.com # not real userid
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-role-pod-reader-1
apiGroup: rbac.authorization.k8s.io
在Kubernetes中,我可以创建绑定(bind),但是我的第一个问题是我可以在现有UserRole和不存在的用户之间创建UserRoleBinding。我以为那会失败。这意味着我缺少重要的东西。
我的第二个问题是我不知道如何以新用户之一身份登录kubectl。
总体而言,我缺少GCP / IAM用户和GKE用户之间的联系。帮助将不胜感激!
最佳答案
Kubernetes没有用户数据库。用户位于群集之外,通常由云提供商控制。
如果您使用的是GKE,则用户由GCP IAM控制。因此,您无法使用kubectl
列出用户。
您可以创建service accounts。但是,了解服务帐户和用户之间的区别很重要。用户是真实人,服务帐户是kubernetes内部和外部的进程。
创建ClusterRoleBinding时,这意味着对kubernetes:
如果用户名为 MYTESTUSER@gmail.com 的用户进入集群,请将其绑定(bind)到ClusterRole cluster-role-pod-reader-1
要将kubernetes与GCP IAM用户一起使用,您必须执行以下操作:
roles/container.viewer
您可以使用以下命令列出各个IAM角色(不要误认为RBAC角色):
gcloud iam roles list | grep 'roles/container\.' -B2 -A2
考虑到最小特权原则,您应该仅向用户授予最小权限才能登录到群集。其他IAM角色(
roles/container.clusterAdmin
除外)将自动向您的项目的所有群集内部的对象授予具有更高特权的访问权限。RBAC仅允许添加特权,因此,您应该选择具有最少特权的IAM角色,然后通过RBAC添加所需的特权。
关于kubernetes - 如何将GCP用户与GKE Kubernetes用户相关联,以进行身份验证和后续授权?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55405241/