一、概述
Kubernetes 还开发了一个基于 Web 的 Dashboard,用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。
Dashboard 的 GitHub 地址:https://github.com/kubernetes/dashboard
二、系统环境
- Kubernetes 版本:1.18.5
- kubernetes-dashboard 版本:v2.0.3
三、兼容性
Kubernetes版本 | 1.13 | 1.14 | 1.15 | 1.16 | 1.17 | 1.18 |
---|---|---|---|---|---|---|
兼容性 | ? | ? | ? | ? | ? | ✓ |
- ✕ 不支持的版本范围。
- ✓ 完全支持的版本范围。
- ? 由于Kubernetes API版本之间的重大更改,某些功能可能无法在仪表板中正常运行。
四、下载安装
执行安装:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.2/aio/deploy/recommended.yaml
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.2/aio/deploy/recommended.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 集成了一个 metrics-scraper
的组件,可以通过 Kubernetes 的 Metrics API 收集一些基础资源的监控信息,并在 web 页面上展示,所以要想在页面上展示监控信息就需要提供 Metrics API,前提需要安装 Metrics Server。
新版本的 Dashboard 会被默认安装在 kubernetes-dashboard 这个命名空间下面,查看 pod 名称:
$ kubectl get pods --namespace=kubernetes-dashboard -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
dashboard-metrics-scraper-6b4884c9d5-jdw22 1/1 Running 0 7h42m 10.244.3.3 k8s-node2 <none> <none>
kubernetes-dashboard-7bfbb48676-l28c9 1/1 Running 0 7h38m 10.244.2.6 k8s-node3 <none> <none>
五、修改为 NodePort 访问
将 dashboard 改为 NodePort 方式访问,不使用 API Server 访问。因为 API Server 访问特别麻烦,一大串,比如:http://172.16.106.226:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
如果是 NodePort 方式访问,就比较简单了,比如:https://172.16.106.209:32027/
查看 kubernetes-dashboard:
kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard
$ kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard ClusterIP 10.98.194.221 <none> 443/TCP 7h45m
编辑 kubernetes-dashboard
kubectl --namespace=kubernetes-dashboard edit service kubernetes-dashboard
将里面的type: ClusterIP
改为type: NodePort
即可。
保存等一会儿,重新查看,就变为 NodePort 了。
$ kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard NodePort 10.98.194.221 <none> 443:32027/TCP 7h45m
六、证书管理
Dashboard 安装完成,改为 NodePort 形式之后,通过 https://172.16.106.209:32027/
访问,会提示安全信息如下:
这就无法访问了,需要生成证书,这个比较简单,照着下面来就行:
#Step 1: 新建目录:
mkdir key && cd key
#Step 2: 生成 SSL 证书
openssl genrsa -out dashboard.key 2048
#Step 3: 我这里写的自己的 node1 节点,因为我是通过 nodeport 访问的;如果通过 apiserver 访问,可以写成自己的 master 节点 ip
openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=172.16.106.209'
openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
#Step 4: 删除原有的证书 secret
kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
#Step 5: 创建新的证书 secret
kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard
#Step 6: 查看 pod
kubectl get pod -n kubernetes-dashboard
#Step 7: 重启 pod
kubectl delete pod kubernetes-dashboard-7b5bf5d559-gn4ls -n kubernetes-dashboard
执行完成之后,再次访问点开高级之后,有个继续前往的链接,点击即可:
七、创建访问的 ServiceAccount
最后需要创建一个绑定 admin 权限的 ServiceAccount,获取其 Token 用于访问看板。
1、创建用户
新建文件名admin-user.yaml
,复制下面一段:
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
复制到admin-user.yaml
文件后,执行:kubectl create -f admin-user.yaml
2、绑定用户关系
新建文件admin-user-role-binding.yaml
:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
复制到 admin-user-role-binding.yaml
文件后,执行:kubectl create -f admin-user-role-binding.yaml
如果过程中提示存在或者需要删除,只需要 kubectl delete -f
相应的 yaml 文件即可。
八、获取令牌
按照官网提示的获取 token 方法:
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Name: admin-user-token-s5k78
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: kubernetes.io/service-account.name: admin-user
kubernetes.io/service-account.uid: f5d700df-bbba-4425-905e-dc3ff597d535
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 20 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6InJpUEFuZEVpTnZCb1d3cmRIZHdSNDZvUXVVNFZjSWM3ZlpBMEhRWkxMSTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXM1azc4Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJmNWQ3MDBkZi1iYmJhLTQ0MjUtOTA1ZS1kYzNmZjU5N2Q1MzUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.OM_HAmENxAjjH-uzsFLgVpYiH5e7KmU9Y76CL1k1rFZJBctyAyqeOJGJiRcTbaDp10dBS6Qm4bNKfmP2Tq3in5G6odxbibhx6F13XcHMcCMD_UMPjndD0s9Vw4rih0jShJC7uyhE0fV6jBBsPK2iGzx6Z3wyw6RaeZmDUJ6E_gKc3uvjAjBiCZj5DvwVtj-_BQbCNTGGlADm9MLwceuzIXnYCeJMrFFVCOxj0fEdzB59E_x-BCzwyedZfhWC0CSmKkRSw9dqm11rFPWp3mIa_f6APFe69WfMNovpFeme9qhtF7s49WZdOf08fUwznJVK4QFdk0TtKUEigs7SI_aoRw
九、登录新版本 Dashboard 查看
本人的 Kubernetes 集群地址为”172.16.106.209”并且在 Service 中设置了 NodePort 端口为 32027和类型为 NodePort 方式访问 Dashboard ,所以访问地址:https://172.16.106.209:32027
进入 Kubernetes Dashboard 页面,然后输入上一步中创建的 ServiceAccount 的 Token 进入 Dashboard,可以看到新的 Dashboard。
跟上一个版本比较,整体风格更加简洁,并且,可以感受到的是这个页面比以前访问速度更加快速(估计是加了缓存),除了之外还增加了:
- 新增黑色主题
- 新增对 CRD 的管理
- 新增对集群角色的编辑
- 新增对 kubernetes 对象以 yaml 格式进行编辑
- 修改集群资源指标的监控监控信息以及看板样式
示例源码: