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复制进去,登录,就能进去了。

进去后,能看到各种服务信息。如果没有,就是账号权限的问题了。