08-3. 部署 dashboard 插件

如果没有特殊指明,本文档的所有操作均在 zhangjun-k8s-01 节点上执行

下载和修改配置文件

  1. cd /opt/k8s/work
  2. wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc4/aio/deploy/recommended.yaml
  3. mv recommended.yaml dashboard-recommended.yaml

执行所有定义文件

  1. cd /opt/k8s/work
  2. kubectl apply -f dashboard-recommended.yaml

查看运行状态

  1. $ kubectl get pods -n kubernetes-dashboard
  2. NAME READY STATUS RESTARTS AGE
  3. dashboard-metrics-scraper-7b8b58dc8b-dlk5t 1/1 Running 0 70s
  4. kubernetes-dashboard-6cfc8c4c9-j8vcm 1/1 Running 0 70s

访问 dashboard

从 1.7 开始,dashboard 只允许通过 https 访问,如果使用 kube proxy 则必须监听 localhost 或 127.0.0.1。对于 NodePort 没有这个限制,但是仅建议在开发环境中使用。对于不满足这些条件的登录访问,在登录成功后浏览器不跳转,始终停在登录界面

通过 port forward 访问 dashboard

启动端口转发:

  1. [root@zhangjun-k8s-01 work] kubectl port-forward -n kubernetes-dashboard svc/kubernetes-dashboard 4443:443 --address 0.0.0.0

浏览器访问 URL:https://172.27.138.251:4443

dashboard-login

创建登录 Dashboard 的 token 和 kubeconfig 配置文件

dashboard 默认只支持 token 认证(不支持 client 证书认证),所以如果使用 Kubeconfig 文件,需要将 token 写入到该文件。

创建登录 token

  1. kubectl create sa dashboard-admin -n kube-system
  2. kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
  3. ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}')
  4. DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
  5. echo ${DASHBOARD_LOGIN_TOKEN}

使用输出的 token 登录 Dashboard。

创建使用 token 的 KubeConfig 文件

  1. source /opt/k8s/bin/environment.sh
  2. # 设置集群参数
  3. kubectl config set-cluster kubernetes \
  4. --certificate-authority=/etc/kubernetes/cert/ca.pem \
  5. --embed-certs=true \
  6. --server=${KUBE_APISERVER} \
  7. --kubeconfig=dashboard.kubeconfig
  8. # 设置客户端认证参数,使用上面创建的 Token
  9. kubectl config set-credentials dashboard_user \
  10. --token=${DASHBOARD_LOGIN_TOKEN} \
  11. --kubeconfig=dashboard.kubeconfig
  12. # 设置上下文参数
  13. kubectl config set-context default \
  14. --cluster=kubernetes \
  15. --user=dashboard_user \
  16. --kubeconfig=dashboard.kubeconfig
  17. # 设置默认上下文
  18. kubectl config use-context default --kubeconfig=dashboard.kubeconfig

用生成的 dashboard.kubeconfig 登录 Dashboard。

/projects/follow-me-install-kubernetes-cluster-1.16.6-zh/images/dashboard.png

参考

  1. https://github.com/kubernetes/dashboard/wiki/Access-control
  2. https://github.com/kubernetes/dashboard/issues/2558
  3. https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/
  4. https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above
  5. https://github.com/kubernetes/dashboard/issues/2540