k8s角色访问RBAC

1、rbac介绍

    Kubernetes中的两个用于配置信息的重要资源对象:ConfigMap和Secret,其实到这里我们基本上学习的内容已经覆盖到Kubernetes中一些重要的资源对象了,来部署一个应用程序是完全没有问题的了。在我们演示一个完整的示例之前,我们还需要给大家讲解一个重要的概念:RBAC - 基于角色的访问控制。
    RBAC使用rbac.authorization.k8s.io API Group 来实现授权决策,允许管理员通过 Kubernetes API 动态配置策略,要启用RBAC,需要在 apiserver 中添加参数–authorization-mode=RBAC,如果使用的kubeadm安装的集群,1.6 版本以上的都默认开启了RBAC,可以通过查看 Master 节点上 apiserver 的静态Pod定义文件:

2、 kubernetes 关于空间权限赋予

1、获取并查看

  • Role
  • ClusterRole
  • RoleBinding
  • ClusterRoleBinding
  • 1.1、查看kube-system namespace下的所有role

    1
    kubectl get role -n kube-system
  • 1.2、查看某个role定义的资源权限

    1
    kubectl get role <role-name> -n kube-system -o yaml
  • 1.3、查看kube-system namespace下所有的rolebinding

    1
    kubectl get rolebinding -n kube-system
  • 1.4、查看kube-system namespace下的某个rolebinding详细信息(绑定的Role和subject)

    1
    kubectl get rolebinding <rolebind-name> -n kube-system -o yaml
  • 1.5、查看集群所有的clusterrole

    1
    kubectl get clusterrole
  • 1.6、查看某个clusterrole定义的资源权限详细信息

    1
    kubectl get clusterrole <clusterrole-name> -o yaml
  • 1.7、查看所有的clusterrolebinding

    1
    kubectl get clusterrolebinding
  • 1.8、查看某一clusterrolebinding的详细信息

    1
    kubectl get clusterrolebinding <clusterrolebinding-name> -o yaml

2、kubectl命令可以用于在命名空间内或者整个集群内授予角色。

  • 在某一特定名字空间内授予Role或者ClusterRole。示例如下:

    1
    kubectl create rolebinding
  • 在名为”acme”的名字空间中将admin ClusterRole授予用户”bob”:

    1
    kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme
  • 在名为”acme”的名字空间中将view ClusterRole授予服务账户”myapp”:

    1
    2
    kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme
    kubectl create clusterrolebinding

3、在整个集群中授予ClusterRole,包括所有名字空间。示例如下:

  • 在整个集群范围内将cluster-admin ClusterRole授予用户”root”:

    1
    kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
  • 在整个集群范围内将system:node ClusterRole授予用户”kubelet”:

    1
    kubectl create clusterrolebinding kubelet-node-binding --clusterrole=system:node --user=kubelet
  • 在整个集群范围内将view ClusterRole授予名字空间”acme”内的服务账户”myapp”:

    1
    kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp

4、对某一个namespace赋予jenkins部署权限

  • 查看kube-ops 下面的角色

    1
    2
    3
    # kubectl get role -n kube-ops
    NAME AGE
    jenkins2 2d6h
  • 查看role定义的资源权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    # kubectl get role jenkins2 -n kube-ops -o yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
    creationTimestamp: "2019-01-14T03:07:25Z"
    name: jenkins2
    namespace: kube-ops
    resourceVersion: "2389179"
    selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/kube-ops/roles/jenkins2
    uid: 84762132-17a9-11e9-8991-fa163e14c5bd
    rules:
    - apiGroups:
    - ""
    resources:
    - pods
    verbs:
    - create
    - delete
    - get
    - list
    - patch
    - update
    - watch
    - apiGroups:
    - ""
    resources:
    - pods/exec
    verbs:
    - create
    - delete
    - get
    - list
    - patch
    - update
    - watch
    - apiGroups:
    - ""
    resources:
    - pods/log
    verbs:
    - get
    - list
    - watch
    - apiGroups:
    - ""
    resources:
    - secrets
    verbs:
    - get
  • 创建jenkins2的权限

    1
    2
    [root@k8s-zxc-test-3 ~]# kubectl -n kube-system create sa jenkins2
    serviceaccount/jenkins2 created
  • 授权访问

    1
    2
    [root@k8s-zxc-test-3 ~]# kubectl create clusterrolebinding jenkins2 --clusterrole cluster-admin --serviceaccount=kube-ops:jenkins2
    clusterrolebinding.rbac.authorization.k8s.io/jenkins2 created
坚持原创技术分享,您的支持将鼓励我继续创作!
0%