【问题标题】:Kubernetes : How to make another person access kubernetes cluster with edit clusterRole permissions?Kubernetes:如何让另一个人使用编辑 clusterRole 权限访问 Kubernetes 集群?
【发布时间】:2020-11-25 20:01:12
【问题描述】:

我这样做了:

  1. 我创建了一个服务帐号
cat <<EOF | kubectl create -f -
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: myname
...
  1. 我从服务帐户中创建的秘密生成令牌:

token=$(kubectl get secrets myname-xxxx-xxxx -o jsonpath={.data.token} | base64 --decode)

  1. 我为创建的 serviceAccount myname 设置凭据:
    kubectl config set-credentials myname --token=$token

  2. 我创建了一个上下文 kubectl config set-context myname-context --cluster=my-cluster --user=myname

  3. 然后我创建了 ~/.kube/config 的副本并删除了 cluster-admin 条目(只允许用户 myname)

  4. 我将用户角色绑定到具有编辑 clusterRole 权限的特定命名空间:

cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata: 
  name: dev-access
  namespace: my-ns
roleRef: 
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: edit
subjects: 
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: myname
EOF
  1. 我将编辑后的~/.kube/config 发送给想要访问集群的人,现在他可以列出 pod 但不能执行到其中:

错误

(Forbidden): pods "pod-xxxxx-xxxx" is forbidden: User "system:serviceaccount:default:myname" cannot create resource "pods/exec" in API group "" in the namespace "my-ns"

我想从一台非主机上执行此操作,该主机已将主机 ~/.kube/config 复制到其中。

谢谢

【问题讨论】:

    标签: authentication kubernetes


    【解决方案1】:

    您拥有的RoleBindingClusterRole 绑定到User 而不是ServiceAccount。错误清楚地显示了 ServiceAccount system:serviceaccount:default:myuser 所以RoleBinding 应该如下

    cat <<EOF | kubectl create -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata: 
      name: dev-access
      namespace: my-ns
    roleRef: 
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: edit
    subjects: 
      - kind: ServiceAccount
        name: myuser
        namespace: default
    EOF
    

    要验证ServiceAccount myuser 的所有权限,请使用以下命令

    kubectl auth can-i --list --as=system:serviceaccount:default:myuser
    

    要验证pods/execServiceAccount myuser 的特定权限,请使用以下命令

    kubectl auth can-i create pods/exec --as=system:serviceaccount:default:myuser
    

    【讨论】:

    • 对pod的sa权限为:``` pods [] [] [get list watch] ```
    • 你想从一个 pod 做点什么吗?这将默认使用服务帐户,您需要像我在回答中那样将 RoleBinding 提供给服务帐户
    • 对了,谢谢我把主题类型改为ServiceAccount,并从主题中删除了apiGroup: rbac.authorization.k8s.io
    • 我也将“命名空间:默认”添加到主题
    • 我遇到了一个问题,我在执行到 Pod 后的几秒钟内就断开了与 Pod 的连接,我的互联网连接很稳定。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2023-03-09
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多