Kubernetes的web管理:dashboard的安装
k8s在使用时,不仅是运维人员需要使用,很多时候还需要给开发人员来使用。 给开发人员使用,就不可能让他们用命令行去使用,这个时候就需要有web页面这种管理方式。 k8s的web管理方式其实不只有dashboard这一种,还有很多其它的解决方案,比如Rancher,其实就比dashboard更好用。
一、查询kubernetes版本,下载对应的dashboard版本
安装前要先确认自己的kubernetes版本,因为dashboard要对应不同的kubernetes版本来进行安装使用,如果版本不对应,安装完打开可能会报错。
# kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:23:04Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
这里kubernetes是1.19.0,然后根据这个去找到相对应的dashboard版本安装。
版本对应关系,可以去https://github.com/kubernetes/dashboard/releases上去查,我这里列几个常用的版本对应关系。(点击可以下载)
dashboard v2.0.0-beta5 ---> kubernetes 1.16
dashboard v2.0.0 ---> kubernetes 1.18
dashboard v2.0.1 ---> kubernetes 1.18
dashboard v2.0.2 ---> kubernetes 1.18
dashboard v2.0.3 ---> kubernetes 1.18
dashboard v2.0.4 ---> kubernetes 1.19
dashboard v2.0.5 ---> kubernetes 1.19
dashboard v2.1.0 ---> kubernetes 1.20
dashboard v2.2.0 ---> kubernetes 1.20
dashboard v2.3.0 ---> kubernetes 1.21
dashboard v2.3.1 ---> kubernetes 1.21
kubernetes是1.19.0对应的dashboard分别是v2.0.4和v2.0.5,装其中一个版本就可以了。
二、下载dashboard.yaml并修改
修改一下dashboard-v2.0.5.yaml文件中Service部分,修改为nodePort模式访问。(访问方式:集群内任意节点ip加nodePort所配端口号就可以访问)
#增加直接访问端口
# vim dashboard-v2.0.5.yaml
.......
.......
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort #新添加的
ports:
- port: 443
targetPort: 8443
nodePort: 30003 #新添加的(可以改成其它的端口号,要大于30000)
selector:
k8s-app: kubernetes-dashboard
---
.......
.......
三、安装dashboard
在安装前,如果有旧的dashboard,要先删掉旧的版本:可以根据创建yaml文件来进行删除
kubectl delete -f dashboard.yaml
kubectl delete -f dashboard-svc.yaml
kubectl delete -f dashboard-svc-account.yaml
如果是比较新的dashboard版本,可能是在单独在kubernetes-dashboard这个命名空间中的,这种直接把kubernetes-dashboard这个命名空间删掉就行了。
kubectl delete ns kubernetes-dashboard
执行yaml文件开始安装
# kubectl apply -f dashboard-v2.0.5.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
新的dashboard版本服务都是统一在kubernetes-dashboard这个命名空间中。
# kubectl get pods -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-79c5968bdc-6dbp5 1/1 Running 0 71s
kubernetes-dashboard-6f65cb5c64-f4qp7 1/1 Running 0 71s
# kubectl get deploy -n kubernetes-dashboard
NAME READY UP-TO-DATE AVAILABLE AGE
dashboard-metrics-scraper 1/1 1 1 84s
kubernetes-dashboard 1/1 1 1 84s
# kubectl get service -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.101.111.29 <none> 8000/TCP 93s
kubernetes-dashboard ClusterIP 10.101.7.248 <none> 443/TCP 93s
查看dashboard在哪个节点上,我的是在master上面。
# kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kubernetes-dashboard dashboard-metrics-scraper-79c5968bdc-6dbp5 1/1 Running 0 18m 10.244.0.6 master <none> <none>
kubernetes-dashboard kubernetes-dashboard-6f65cb5c64-f4qp7 1/1 Running 0 18m 10.244.0.5 master <none> <none>
四、创建dashboard用户及权限
创建dashboard管理员。(没有管理员也可以用一个token进web页面,但很多权限是没有的)
创建账号:
# vim dashboard-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: dashboard-admin
namespace: kubernetes-dashboard
dashboard-admin就是创建的管理员账号。
保存退出后执行
kubectl create -f dashboard-admin.yaml
为用户分配角色权限:
# vim dashboard-admin-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin-role
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
给dashboard-admin账号分配了cluster-admin集群管理员的权限。
保存退出后执行
kubectl create -f dashboard-admin-role.yaml
查看token
# kubectl get secret -n kubernetes-dashboard
NAME TYPE DATA AGE
dashboard-admin-token-fj9v6 kubernetes.io/service-account-token 3 95s
default-token-lj7xg kubernetes.io/service-account-token 3 33m
kubernetes-dashboard-certs Opaque 0 33m
kubernetes-dashboard-csrf Opaque 1 33m
kubernetes-dashboard-key-holder Opaque 2 33m
kubernetes-dashboard-token-cdkzc kubernetes.io/service-account-token 3 33m
这个dashboard-admin-token-fj9v6是我们创建的,查看它的信息筛选出token。
# kubectl describe -n kubernetes-dashboard secret/dashboard-admin-token-fj9v6|grep token:
token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImJyYjJDR18tMDQtdkc3MzBBN0RwQU8zTlVjV01PM2w0dGRBWVh5UXhPN3MifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tZmo5djYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMzhjYzU0MDktNGZhNy00ZGE2LTk0OTEtZjA3ODg4NTUxN2VjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.h-dfDHlmpeclQkRo5qqHD_QlFz9kn-WJTkndwau5K_bAoFVG3Nc_5E3wi9irxS-OhsivL8aFZje-1D02xDboXFmx14-88ZCt4vgmNcUdqp3iB6WkzKOIOGGPo-0Xal9vdiGFSm0liskhS4698hDIOqf50hwggECPVQzeXDbCcFiGqZAY8BEcC1Sz4cQZPIPt0pU66z6-pip8eHmmiwt4l6j5BmxQgcpBewXM3OITA-cdcq9iOMIGJkoqfiaCJ1Tk-oEnSmrkRFVdXxYoNgqePPg037FbrzNkJi3z7s-TmOzrgkcbMOK97VF_ED8X0nSek66bDFj8ivqFCGSxL8JDpQ
访问dashboard,我的是master节点IP:30003。
注意:因为https证书的原因,有些浏览器可能会打不开。chrome浏览器打开也会提示不安全,而且没有“下一步”访问的链接,
这个时候在页面上盲打”thisisunsafe"这个英文词组(不是在地址栏,就是在页面上盲打),浏览器就会跳转了。
把上面查出来的token复制进去,登录,就能进去了。
进去后,能看到各种服务信息。如果没有,就是账号权限的问题了。