10.kubernetes danshboard认证及分级授权

Kubernetes dashbord自身不做认证,认证都是k8s集群来做的。

一、部署

参照官方文档:https://github.com/kubernetes/dashboard

[kubelet@master ~]$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

Tips:需要下载下来修改镜像路径,国内不允许访问镜像,可修改为阿里云的镜像仓库地址。registry.cn-shanghai.aliyuncs.com/yingzhuo/kubernetes-dashboard-amd64:v1.10.1

1、部署中修改的地方

避免在安装过程中出错,或者安装后各种各样的问题。如果想一次性安装部署成功,并且能够进入首页,需手动下载kubernetes-dashboard.yaml资源清单,并修改三个地方。

(1)deployment镜像地址

需要下载下来修改镜像路径,国内不允许访问镜像,可修改为阿里云的镜像仓库地址。registry.cn-shanghai.aliyuncs.com/yingzhuo/kubernetes-dashboard-amd64:v1.10.1

 

(2)service通过NodePort暴露端口。

(3)deployment更改证书挂载目录

 

证书可以自签,参照问题排查中的自签证书一栏。

2、外网暴露方式

(1)nodePort

Kubernetes dashboard默认已经创建了ClusterIP类型的service,只需要将service类型修改为NodePort,则会随机暴露一个端口到外网。

[kubelet@master dashboard]$ kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system

扫描二维码关注公众号,回复: 8925349 查看本文章

浏览器访问:https://192.168.42.128:30757/

登录的认证账号需要是认证的ServiceAccount,因为dashboard是以pod来运行的,所以直接用kubectl使用的kubeconfig是不行的。

(2)Ingress-controller

3、问题排查

问题描述:NET::ERR_CERT_INVALID

当使用上述两种方式之一暴露端口到外网后,使用浏览器访问出现NET::ERR_CERT_INVALID错误,无法正确加载页面。

问题现象

 

问题原因:出现此种情况是因为kubernetes dashboard使用的证书有问题。

解决方法:自签证书来认证

1、自签证书:

[root@master pki]# (umask 077;openssl genrsa -out dashboard.key 2048)
[root@master pki]# openssl req -new -key dashboard.key -out dashboard.csr -subj "/O=magedu,/CN=dashboard"
[root@master pki]# openssl x509 -req -in dashboard.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out dashboard.crt -days 365

2、找到对应的容器调度节点。

 

3、在对应的节点宿主机上,查看docker信息,找到kubernetes-dashboard这个容器对应的containerID,找到挂载证书的宿主机目录。

[root@master ~]# docker ps | grep dashboard
[root@master ~]# docker inspect 2c0ce1311e10 | grep "/certs"

此时访问https://192.168.42.128:30757/ 页面如下,直接继续前往即可。

 

二、认证

认证时的账号必须为ServiceAccount,被dashboard拿来由kubernetes集群认证。

1、Token认证

创建ServiceAccount,根据其管理目标,使用rolebinding或clusterrolebinding绑定至合理的role或clusterrole;

获取此ServiceAccount的secret,查看secret的详细信息,找到认证token。

创建sa及绑定为集群管理员

[root@master ~]# kubectl create serviceaccount dashboard-admin -n kube-system
[kubelet@master ~]$ kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

获取认证token

[kubelet@master dashboard]$ kubectl describe sa dashboard-admin  -n kube-system

[kubelet@master ~]$ kubectl describe secret dashboard-admin-token-kqslx -n kube-system

此token即为具有clusteradmin权限的token,可用此来登录dashboard。

 

使用此token登录的dashboard具有所有命名空间的管理权限。

2、kubeconfig认证

把ServiceAccount的token封装为Kubeconfig文件

创建serviceAccount及绑定为admin

仅具有default名称空间的管理权限。

[kubelet@master dashboard]$ kubectl create serviceaccount def-ns-admin -n default

[kubelet@master dashboard]$ kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin

编写配置文件

[root@master ~]# kubectl config set-cluster kubernetes --server=https://192.168.42.128:6443 --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --kubeconfig=/root/def-ns-admin.conf

[root@master ~]# kubectl config set-credentials –h  # 可以用证书创建配置,也可以用token创建配置。
[root@master ~]$ TOKEN=$(kubectl get secret def-ns-admin-token-dplwg -o jsonpath={.data.token} | base64 -d)   #可直接用 $ kubectl describe secret def-ns-admin-token-dplwg,展示的就是解码的token。
[root@master ~]# kubectl config set-credentials def-ns-admin --token=${TOKEN} --kubeconfig=/root/def-ns-admin.conf

[root@master ~]# kubectl config set-context def-ns-admin@kubernetes --cluster=kubernetes --user=def-ns-admin --kubeconfig=/root/def-ns-admin.conf
[root@master ~]# kubectl config view --kubeconfig=/root/def-ns-admin.conf
[root@master ~]# kubectl config use-context def-ns-admin@kubernetes

此时/root/def-ns-admin.conf可用来登录dashboard,并且只具有default名称空间的管理员权限。

 

此时dashboard仅有default名称空间的管理权限。

三、Tips

Kubernetes集群的管理方式:

命令式:create ,run,delete,expose,edit

命令式配置文件:kubectl create -f ,delete –f , replace -f

声明式配置文件:kubectl apply –f,patch

(apply可创建可更新,create只能创建,不能更新,如果需要更新,只能删掉重来。)

猜你喜欢

转载自www.cnblogs.com/cmxu/p/12240502.html