常用dashboard角色设置-RBAC

3.2. 常用dashboard角色设置

Dashboard 权限设置中,有两个主要集群角色: cluster-admin、view,一个是管理员权限,一个是查看权限。

3.2.1 RBAC

3.2.2. RBAC概述

3.2.3. RBAC实现的原理

RBAC(Role Base Access Controller),基于角色的访问控制,是目前Kubernetes最常用的权限控制插件。

Kubernetes的用户分为两种:User Account,用户账号,给Kubernetes操作人员使用的账号;Service Account,服务账号,给Kubernetes中Pod使用的账号。Kubernetes管理员查看和操作Kubernetes对象都是通过User Account 账号实现,而Pod去访问集群中的资源时使用的是Service Account。Kubernetes中一切皆对象,权限其实是对特定对象操作,如对某个名称空间中Pod的 GET/DELETE/POST 等操作。

不同的权限就是不同Permission的集合,将权限关联到Role上,再通过RoleBinding关联账户和权限,这就是RBAC实现方式。

image.png

2.1.2. 不同类型的授权方式

Role和RoleBinding属于名称空间资源,而Cluster和ClusterRoleBinding是集群层面的资源,Kubernetes允许三种绑定权限的方式(如图):

  • RoleBinding 关联 Role 和 User

User 具备当前NameSpace空间中的权限,不具备跨名称空间权限

  • RoleBinding 关联 ClusterRole 和 User

ClusterRole权限降级,只能对当前名称空间中的资源具备权限,不具备跨名称空间的权限。该方式的意义在于:对不同名称空间管理员授权时,只需要定义一个ClusterRole即可,不需要定义多个基于名称空间的Role

  • ClusterRoleBinding 关联 ClusterRole 和 User

User 具备集群级别权限,可以跨名称空间操作资源对象

image.png

2.2. 模板

2.2.1. Role

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
    name            <string>                # 在一个名称空间不能重复
    namespace       <string>                # 指定名称空间,默认defalut
    labels          <map[string]string>     # 标签
    annotations     <map[string]string>     # 注释
rules:              <[]Object               # role权限
    resources       <[]string>              # 指定资源名称资源对象列表
    apiGroups       <[]string>              # 指定API资源组
    resourceNames   <[]string>              # 指定具体资源的白名单,默认允许所有
    nonResourceURLs <[]string>              # 一种特殊的k8s对象
    verbs           <[]string> -required-   # 权限列表(actions)

2.2.2. ClusterRole

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
    name            <string>                        # 在一个集群内不能重复
    labels          <map[string]string>             # 标签
    annotations     <map[string]string>             # 注释
rules               <[]Object                       # 定义权限
    resources       <[]string>                      # 指定资源名称资源对象列表
    apiGroups       <[]string>                      # 指定API资源组
    resourceNames   <[]string>                      # 指定具体资源的白名单,默认允许所有
    nonResourceURLs <[]string>                      # 一种特殊的k8s对象
    verbs           <[]string> -required-           # 权限列表(actions)
aggregationRule     <Object>                        # 定义聚合规则
    clusterRoleSelectors    <[]Object>              # 集群角色选择器
        matchLabels         <map[string]string>     # key/value 选择器
        matchExpressions    <[]Object>              # 表达式选择器,参考 deployment.spec.selector

2.2.3. RoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
    name            <string>                # 在一个名称空间不能重复
    namespace       <string>                # 指定名称空间,默认defalut
    labels          <map[string]string>     # 标签
    annotations     <map[string]string>     # 注释
roleRef             <Object> -required-     # 待绑定的角色
    kind            <string> -required-     # 资源类型
    name            <string> -required-     # 资源名称
    apiGroup        <string> -required-     # 资源组的APIGroup
subjects            <[]Object>              # 账户
    apiGroup        <string>                # 账户的api组名
        # "" 空字串表示serviceAccount
        # rbac.authorization.k8s.io 表示User或者Group
    kind            <string> -required-     # 账户类型,如User/Group/serviceAccount
    name            <string> -required-     # 账户名称
    namespace       <string>                # 账户的名称空间

2.2.4. ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
    name            <string>                # 在一个集群内不能重复
    labels          <map[string]string>     # 标签
    annotations     <map[string]string>     # 注释
roleRef             <Object> -required-     # 待绑定的角色
    kind            <string> -required-     # 资源类型
    name            <string> -required-     # 资源名称
    apiGroup        <string> -required-     # 资源组的APIGroup
subjects            <[]Object>              # 账户
    apiGroup        <string>                # 账户的api组名
        # "" 空字串表示serviceAccount
        # rbac.authorization.k8s.io 表示User或者Group
    kind            <string> -required-     # 账户类型,如User/Group/serviceAccount
    name            <string> -required-     # 账户名称
    namespace       <string>                # 账户的名称空间

2.2.5. ServiceAccount

2. RBAC
2.1. RBAC概述
2.1.1. RBAC实现的原理
RBAC(Role Base Access Controller),基于角色的访问控制,是目前Kubernetes最常用的权限控制插件。
Kubernetes的用户分为两种:User Account,用户账号,给Kubernetes操作人员使用的账号;Service Account,服务账号,给Kubernetes中Pod使用的账号。Kubernetes管理员查看和操作Kubernetes对象都是通过User Account 账号实现,而Pod去访问集群中的资源时使用的是Service Account。Kubernetes中一切皆对象,权限其实是对特定对象操作,如对某个名称空间中Pod的 GET/DELETE/POST 等操作。
不同的权限就是不同Permission的集合,将权限关联到Role上,再通过RoleBinding关联账户和权限,这就是RBAC实现方式。
2.1.2. 不同类型的授权方式
Role和RoleBinding属于名称空间资源,而Cluster和ClusterRoleBinding是集群层面的资源,Kubernetes允许三种绑定权限的方式(如图):
• RoleBinding 关联 Role 和 User
User 具备当前NameSpace空间中的权限,不具备跨名称空间权限
• RoleBinding 关联 ClusterRole 和 User
ClusterRole权限降级,只能对当前名称空间中的资源具备权限,不具备跨名称空间的权限。该方式的意义在于:对不同名称空间管理员授权时,只需要定义一个ClusterRole即可,不需要定义多个基于名称空间的Role
• ClusterRoleBinding 关联 ClusterRole 和 User
User 具备集群级别权限,可以跨名称空间操作资源对象
2.2. 模板
2.2.1. Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
    name            <string>                # 在一个名称空间不能重复
    namespace       <string>                # 指定名称空间,默认defalut
    labels          <map[string]string>     # 标签
    annotations     <map[string]string>     # 注释
rules:              <[]Object               # role权限
    resources       <[]string>              # 指定资源名称资源对象列表
    apiGroups       <[]string>              # 指定API资源组
    resourceNames   <[]string>              # 指定具体资源的白名单,默认允许所有
    nonResourceURLs <[]string>              # 一种特殊的k8s对象
    verbs           <[]string> -required-   # 权限列表(actions)
2.2.2. ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
    name            <string>                        # 在一个集群内不能重复
    labels          <map[string]string>             # 标签
    annotations     <map[string]string>             # 注释
rules               <[]Object                       # 定义权限
    resources       <[]string>                      # 指定资源名称资源对象列表
    apiGroups       <[]string>                      # 指定API资源组
    resourceNames   <[]string>                      # 指定具体资源的白名单,默认允许所有
    nonResourceURLs <[]string>                      # 一种特殊的k8s对象
    verbs           <[]string> -required-           # 权限列表(actions)
aggregationRule     <Object>                        # 定义聚合规则
    clusterRoleSelectors    <[]Object>              # 集群角色选择器
        matchLabels         <map[string]string>     # key/value 选择器
        matchExpressions    <[]Object>              # 表达式选择器,参考 deployment.spec.selector
2.2.3. RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
    name            <string>                # 在一个名称空间不能重复
    namespace       <string>                # 指定名称空间,默认defalut
    labels          <map[string]string>     # 标签
    annotations     <map[string]string>     # 注释
roleRef             <Object> -required-     # 待绑定的角色
    kind            <string> -required-     # 资源类型
    name            <string> -required-     # 资源名称
    apiGroup        <string> -required-     # 资源组的APIGroup
subjects            <[]Object>              # 账户
    apiGroup        <string>                # 账户的api组名
        # "" 空字串表示serviceAccount
        # rbac.authorization.k8s.io 表示User或者Group
    kind            <string> -required-     # 账户类型,如User/Group/serviceAccount
    name            <string> -required-     # 账户名称
    namespace       <string>                # 账户的名称空间
2.2.4. ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
    name            <string>                # 在一个集群内不能重复
    labels          <map[string]string>     # 标签
    annotations     <map[string]string>     # 注释
roleRef             <Object> -required-     # 待绑定的角色
    kind            <string> -required-     # 资源类型
    name            <string> -required-     # 资源名称
    apiGroup        <string> -required-     # 资源组的APIGroup
subjects            <[]Object>              # 账户
    apiGroup        <string>                # 账户的api组名
        # "" 空字串表示serviceAccount
        # rbac.authorization.k8s.io 表示User或者Group
    kind            <string> -required-     # 账户类型,如User/Group/serviceAccount
    name            <string> -required-     # 账户名称
    namespace       <string>                # 账户的名称空间
2.2.5. ServiceAccount
# 一般只需要指定serviceaccount的名称即可
# 除了基础字段之外的其它字段很少使用,需要时手动查询
apiVersion: v1
kind: ServiceAccount        
metadata
    name            <string>                # 在一个名称空间不能重复
    namespace       <string>                # 指定名称空间,默认defalut
    labels          <map[string]string>     # 标签
    annotations     <map[string]string>     # 注释# 一般只需要指定serviceaccount的名称即可
# 除了基础字段之外的其它字段很少使用,需要时手动查询
apiVersion: v1
kind: ServiceAccount        
metadata
    name            <string>                # 在一个名称空间不能重复
    namespace       <string>                # 指定名称空间,默认defalut
    labels          <map[string]string>     # 标签
    annotations     <map[string]string>     # 注释

3.2.1. 集群管理员

参考:https://www.yuque.com/duduniao/ww8pmw/myrwhq#X4UlI

3.2.2. 名称空间管理员

  • 创建能列出名称空间的集群角色

因为dashboard默认进入的界面是default,名称空间级别用户无法查看和切换到其它名称空间

[root@hdss7-200 ~]# cat /data/k8s-yaml/dashboard/dashboard_1.10.1/list-namespace.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata: 
  name: list-namespace
rules:
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - list
  • RBAC授权
[root@hdss7-200 ~]# cat /data/k8s-yaml/dashboard/dashboard_1.10.1/namespace-admin.yaml 
# 创建service account 账户
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
  name: ns-admin
  namespace: kube-system
---
# 授权default名称空间的管理员权限
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ns-admin-default
  namespace: default
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: ns-admin
  namespace: kube-system
---
# 授予app名称空间的管理员权限
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ns-admin-app
  namespace: app
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: ns-admin
  namespace: kube-system
---
# 可以查到到其它名称空间,方便切换。不受该权限时,需要手动修改URL中namespace完成切换
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: ns-admin-list-namespace
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: list-namespace
subjects:
- kind: ServiceAccount
  name: ns-admin
  namespace: kube-system

3.2.3. 名称空间浏览权限

[root@hdss7-200 ~]# cat /data/k8s-yaml/dashboard/dashboard_1.10.1/namespace-view.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
  name: ns-view
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ns-view-default
  namespace: default
  labels:
    k8s-app: kubernetes-dashboard
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: view
subjects:
- kind: ServiceAccount
  name: ns-view
  namespace: kube-system

kubernetes的dashboard监控小插件-heapster

hdss7-200

*准备headpter镜像

[root@hdss7-200 k8s-yaml]# mkdir heapster
[root@hdss7-200 k8s-yaml]# cd heapster/
[root@hdss7-200 heapster]# docker pull quay.io/bitnami/heapster:1.5.4
[root@hdss7-200 heapster]# docker images |grep heapster
quay.io/bitnami/heapster    1.5.4         c359b95ad38b        12 months ago       136MB
[root@zdd211-200 heapster]# docker tag c359b95ad38b harbor.od.com/public/heapster:1.5.4
[root@zdd211-200 heapster]# docker push harbor.od.com/public/heapster:1.5.4
  • 准备资源配置清单
[root@hdss7-200 heapster]# vim heapster.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: heapster
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: heapster
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:heapster
subjects:
- kind: ServiceAccount
  name: heapster
  namespace: kube-system
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: heapster
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: heapster
    spec:
      serviceAccountName: heapster
      containers:
      - name: heapster
        image: harbor.od.com/public/heapster:v1.5.4
        imagePullPolicy: IfNotPresent
        command:
        - /opt/bitnami/heapster/bin/heapster
        - --source=kubernetes:https://kubernetes.default	
---
apiVersion: v1
kind: Service
metadata:
  labels:
    task: monitoring
    # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
    # If you are NOT using this as an addon, you should comment out this line.
    kubernetes.io/cluster-service: 'true'
    kubernetes.io/name: Heapster
  name: heapster
  namespace: kube-system
spec:
  ports:
  - port: 80
    targetPort: 8082
  selector:
    k8s-app: heapster
  • 应用资源配置清单
[root@hdss7-21 ~]# kubectl apply -f http://k8s-yaml.od.com/heapster/heapster.yaml
[root@hdss7-21 ~]# kubectl get pod -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
coredns-6b6c4f9648-5sclg                1/1     Running   0          3h57m
heapster-7cb6dc7b94-vmcf5               1/1     Running   0          5s
kubernetes-dashboard-747c5cdb5d-h7w4c   1/1     Running   0          80m
traefik-ingress-9927c                   1/1     Running   0          3h26m
traefik-ingress-sqt2n                   1/1     Running   0          3h26m
  • 重启dashborad验证

重新登陆以后可以看到pod的资源使用情况,之前的文章有介绍使用promethus监控k8s中集群资源

1595995418182

posted @ 2020-09-07 17:11  爱可耐  阅读(478)  评论(0编辑  收藏  举报