【问题标题】:Allow Kubernetes user list/get namespaces允许 Kubernetes 用户列表/获取命名空间
【发布时间】:2020-07-15 17:47:32
【问题描述】:

我有以下用户清单,我想允许 myapp-user 获取集群中所有命名空间的列表。从我查找的内容来看,我应该创建一个 ClusterRole,但我真的找不到足够的细节。是否有所有 apiGroups 以及相应的资源和动词的列表?

apiVersion: v1
kind: ServiceAccount
metadata:
  name: myapp-user
  namespace: myapp

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: myapp-user-role
  namespace: myapp
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]
- apiGroups: ["batch"]
  resources:
  - jobs
  - cronjobs
  verbs: ["*"]
- apiGroups: ["networking.k8s.io"]
  resources:
  - ingress
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: myapp-user
  namespace: myapp
subjects:
- kind: ServiceAccount
  name: myapp-suer
  namespace: myapp
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: myapp-user-role

虽然将其添加到 role.rules 可能会有所帮助,但不幸的是没有

- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["GET"]

【问题讨论】:

    标签: kubernetes rbac


    【解决方案1】:

    您可以通过

    获取API资源
    kubectl api-resources
    
    NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
    bindings                                                                      true         Binding
    componentstatuses                 cs                                          false        ComponentStatus
    configmaps                        cm                                          true         ConfigMap
    endpoints                         ep                                          true         Endpoints
    events                            ev                                          true         Event
    limitranges                       limits                                      true         LimitRange
    namespaces                        ns                                          false        Namespace
    nodes                             no                                          false        Node
    persistentvolumeclaims            pvc                                         true         PersistentVolumeClaim
    persistentvolumes                 pv                                          false        PersistentVolume
    

    对于创建 clusterrole 和 clusterolebinding 下面的命令应该可以工作。

    kubectl create clusterrole cr --verb=get,list --resource=namespaces
    
    kubectl create clusterrolebinding crb --clusterrole=cr --serviceaccount=default:default
    

    然后进行测试

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

    【讨论】:

      【解决方案2】:

      您可以通过此命令列出您的集群支持的所有资源类型:

      ❯❯❯ kubectl api-resources
      NAME                              SHORTNAMES   APIGROUP                           NAMESPACED   KIND
      bindings                                                                          true         Binding
      componentstatuses                 cs                                              false        ComponentStatus
      configmaps                        cm                                              true         ConfigMap
      endpoints                         ep                                              true         Endpoints
      events                            ev                                              true         Event
      limitranges                       limits                                          true         LimitRange
      namespaces                        ns                                              false        Namespace
      nodes                             no                                              false        Node
      persistentvolumeclaims            pvc                                             true         PersistentVolumeClaim
      persistentvolumes                 pv                                              false        PersistentVolume
      

      要查看这些资源支持的所有动作/动词,您需要查找与您相关的版本的 kubernetes 参考文档,例如对于 CronJobs https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#cronjob-v1beta1-batch

      【讨论】:

        【解决方案3】:

        感谢@abhishek-jaisingh 和@arghya-sadhu 的回答,我能够弄清楚并将命令重写为清单。

        ---
        apiVersion: rbac.authorization.k8s.io/v1
        kind: ClusterRole
        metadata:
          name: myapp-user-cr
        rules:
        - apiGroups: [""]
          resources: ["namespaces"]
          verbs: ["get", "list"]
        ---
        apiVersion: rbac.authorization.k8s.io/v1
        kind: ClusterRoleBinding
        metadata:
          name: myapp-user-crb
        subjects:
        - kind: ServiceAccount
          name: myapp-user
        roleRef:
          kind: ClusterRole
          name: myapp-user-cr
          apiGroup: rbac.authorization.k8s.io
        

        【讨论】:

        猜你喜欢
        • 2021-02-28
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        • 2019-09-07
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        相关资源
        最近更新 更多