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
浏览器访问: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只能创建,不能更新,如果需要更新,只能删掉重来。)
来源:https://www.cnblogs.com/cmxu/p/12240502.html