修改配置文件
1 | cd /opt/k8s/work/kubernetes/cluster/addons/dashboard |
修改 service 定义,指定端口类型为 NodePort,这样外界可以通过地址 NodeIP:NodePort 访问 dashboard;
1 | cat dashboard-service.yaml |
修改镜像地址mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1在dashboard-controller.yaml中
执行所有定义文件
1 | kubectl apply -f . |
查看分配的 NodePort
1 | [root@node1 dashboard]# kubectl get deployment kubernetes-dashboard -n kube-system |
访问 dashboard
1 | https://192.168.6.101:32681 |
创建登录 Dashboard 的 token 和 kubeconfig 配置文件
dashboard 默认只支持 token 认证(不支持 client 证书认证),所以如果使用 Kubeconfig 文件,需要将 token 写入到该文件。
创建登录 token
1 | kubectl create sa dashboard-admin -n kube-system |
使用输出的 token 登录 Dashboard。
创建使用 token 的 KubeConfig 文件
1 | source /opt/k8s/bin/environment.sh |
用生成的 dashboard.kubeconfig 登录 Dashboard。
为kubernetes dashboard访问用户添加权限控制
Role
Role
表示是一组规则权限,只能累加,Role
可以定义在一个namespace
中,只能用于授予对单个命名空间中的资源访问的权限。比如我们新建一个对默认命名空间中Pods
具有访问权限的角色:
1 | kind: Role |
ClusterRole
ClusterRole
具有与Role
相同的权限角色控制能力,不同的是ClusterRole
是集群级别的,可以用于:
- 集群级别的资源控制(例如 node 访问权限)
- 非资源型 endpoints(例如 /healthz 访问)
- 所有命名空间资源控制(例如 pods)
比如我们要创建一个授权某个特定命名空间或全部命名空间(取决于绑定方式)访问secrets的集群角色:
1 | kind: ClusterRole |
RoleBinding和ClusterRoleBinding
RoloBinding
可以将角色中定义的权限授予用户或用户组,RoleBinding
包含一组权限列表(subjects
),权限列表中包含有不同形式的待授予权限资源类型(users、groups、service accounts),RoleBinding
适用于某个命名空间内授权,而 ClusterRoleBinding
适用于集群范围内的授权。
比如我们将默认命名空间的pod-reader
角色授予用户jane,这样以后该用户在默认命名空间中将具有pod-reader
的权限:
1 | # This role binding allows "jane" to read pods in the "default" namespace. |
RoleBinding
同样可以引用ClusterRole
来对当前 namespace 内用户、用户组或 ServiceAccount 进行授权,这种操作允许集群管理员在整个集群内定义一些通用的 ClusterRole,然后在不同的 namespace 中使用 RoleBinding 来引用
例如,以下 RoleBinding 引用了一个 ClusterRole,这个 ClusterRole 具有整个集群内对 secrets 的访问权限;但是其授权用户 dave 只能访问 development 空间中的 secrets(因为 RoleBinding 定义在 development 命名空间)
1 | # This role binding allows "dave" to read secrets in the "development" namespace. |
最后,使用 ClusterRoleBinding 可以对整个集群中的所有命名空间资源权限进行授权;以下 ClusterRoleBinding 样例展示了授权 manager 组内所有用户在全部命名空间中对 secrets 进行访问
1 | # This cluster role binding allows anyone in the "manager" group to read secrets in any namespace. |
例子
- 新增一个新的用户sy
- 该用户只能对命名空间
kube-system
下面的pods
和deployments
进行管理
第一步新建一个ServiceAccount
:
1 | [root@node1 dashboard]# kubectl create sa sy -n kube-system |
然后我们新建一个角色role-sy:(role.yaml)
1 | kind: Role |
注意上面的rules
规则:管理pods
和deployments
的权限。
然后我们创建一个角色绑定,将上面的角色role-sy绑定到**sy**的
ServiceAccount`上:(role-bind.yaml)
1 | kind: RoleBinding |
分别执行上面两个yaml
文件:
1 | [root@node1 dashboard]# kubectl create -f role.yaml |
接下来该怎么做?和前面一样的,我们只需要拿到sy这个ServiceAccount
的token
就可以登录Dashboard
了:
1 | [root@node1 dashboard]# kubectl get secret -n kube-system |grep sy |
这样就可以控制权限了,需要将登录地址改为namespace=kube-system