Dashboard 功能:
- 将容器应用部署到 Kubernetes 集群中。
- 对容器应用排错。
- 获取运行在集群中的应用的概览信息。
- 创建或者修改 Kubernetes 资源,如 Deployment,Job,DaemonSet 等等。
- 管理集群资源,如弹性伸缩,滚动升级,重启 Pod 等。
部署 Dashboard UI
先将所有的 worker 节点设置为污点,让 dashboard 只部署在 server 节点上,否则后续访问设置会比较麻烦。
# 设置 k8s-node-1 为污点
$ kubectl taint nodes k8s-node-1 note=void-dashboard:NoSchedule
node/k8s-node-1 tainted
# 设置 k8s-node-2 为污点
$ kubectl taint nodes k8s-node-2 note=void-dashboard:NoSchedule
node/k8s-node-2 tainted
在 kubernetes/dashboard: General-purpose web UI for Kubernetes clusters (github.com) 查看当前 Dashboard 的版本。
使用以下命令部署:
# 下载yaml文件
$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
# 部署dashboard
$ kubectl create -f 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
yaml 是 K8S 的资源清单文件,每个对象拥有哪些属性都可以在 yaml 中编辑。
如果因网络原因无法正常下载,可以在 github 上打开 recommended.yaml,然后复制代码保存到本地再执行。
查看 pod 状态:
$ kubectl get pod --namespace kubernetes-dashboard -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
dashboard-metrics-scraper-c45b7869d-dx4xm 1/1 Running 0 104s 10.42.0.22 k8s-s01 <none>
<none>
kubernetes-dashboard-764b4dd7-vcvkc 1/1 Running 0 104s 10.42.0.23 k8s-s01 <none>
<none>
如果 STATUS 显示 ImagePullBackOff
,表示拉取镜像失败,可以等待自动重试直到状态变为 Running
。Running
表示容器创建完成,并且 Pod 已经被调度到了一个 Node 上。
查看 svc 服务以及端口:
$ kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard ClusterIP 10.43.237.71 <none> 443/TCP 9m51s
dashboard-metrics-scraper ClusterIP 10.43.236.225 <none> 8000/TCP 9m51s
使用 kubectl 命令行工具启用 Dashboard 访问:
# 前台启动,会占用终端窗口
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
注:目前 UI 只能通过执行这条命令的机器进行访问。
新开一个终端窗口,尝试本地访问 Dashboard:
$ curl http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
# 成功会返回页面内容
<!--
Copyright 2017 The Kubernetes Authors.
...
--><!DOCTYPE html><html lang="en" dir="ltr"><head>
<meta charset="utf-8">
<title>Kubernetes Dashboard</title>
...
访问正常,现在可以取消 worker 节点的污点设置:
$ kubectl taint nodes k8s-node-1 note=void-dashboard:NoSchedule-
node/k8s-node-1 untainted
$ kubectl taint nodes k8s-node-2 note=void-dashboard:NoSchedule-
node/k8s-node-2 untainted
仪表盘 RBAC 配置
参考:Kubernetes 仪表盘 | Rancher文档
为了保护集群数据,默认情况下,Dashboard 会使用最少的 RBAC 配置进行部署。 当前,Dashboard 仅支持使用 Bearer 令牌登录。
为演示样本创建登录 Token
创建以下资源清单文件:
dashboard.admin-user.yml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
以上配置将创建名为 admin-user
,归属名称空间为 kubernetes-dashboard
的服务帐号。
dashboard.admin-user-role.yml
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
注:多数情况下,使用 kops、kubeadm、或其它流行工具配置好集群后,ClusterRole cluster-admin
就自动创建了。如果不存在,需要先手工创建,并授予必要权限。
部署以上配置:
$ kubectl create -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
获取 Bearer Token:
$ kubectl -n kubernetes-dashboard describe secret admin-user-token | grep '^token'
token: eyJhbGciOiJSUzI1NiIsImtpZCI6Im5WWmdqdm1RVC0xVTRfOXRwYzJKNnZCVkN4Q1lWcmdYWFZQMldPeFdlbU0ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWhqdGJtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI0ODY2OGM5Yi0zNmNmLTQwNjMtYjVjNi0xZTI0OTI0MzViYTMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.RIFgQHv_wImASJ2uWtGVKvVBu9-C1YNF_bQsn6bEjPYTChbp_ryEkD-qr276HHXrcFM83Ynfg3juXrTTq_NRjqfoHf8CciknZr0l2Ifo0IFalxinAvm8PqYu7_eVU5JEt6vN_u07N3w6zz0DNOBxzxerwyOTZ6mGyTmmHGlfax8iheYevsxSWIftpml975QLx32ZsT6aMVAmO2H0bz0OhOQWh6Ddj3sg8y7hrI2NsJUDJdA9WS8Rrs-lP7viF9e-Eokc5KgvCRwWEyREWnhGfQqkpiFKoBKz8_zkhCH2Vex203JFQHKzYCzMYXn_cZtyKG1fRxecrMPNVdPZbHpxCw
通过端口转发远程访问 dashboard:
# 设置端口转发
$ sudo kubectl port-forward --namespace kubernetes-dashboard --address 0.0.0.0 service/kubernetes-dashboard 10443:443
使用浏览器访问 https://IP:10443/
输入前面获取的 Token,点击登录。
测试完后,可以运行以下命令,移除用于演示的管理员服务帐号和 ClusterRoleBinding:
$ kubectl -n kubernetes-dashboard delete serviceaccount admin-user
$ kubectl -n kubernetes-dashboard delete clusterrolebinding admin-user
参考
- Kubernetes 仪表盘 | Rancher文档
- 访问K8s Dashboard的几种方式 - SegmentFault 思否 2020-07-08