附004.Kubernetes Dashboard簡介及使用

木二發表於2019-06-25

一 Kubernetes dashboard簡介

1.1 Web UI簡介

dashboard是基於Web的Kubernetes使用者介面。可以使用dashboard將容器化應用程式部署到Kubernetes叢集,對容器化應用程式進行故障排除,以及管理叢集資源。可以使用dashboard來概述群集上執行的應用程式,以及建立或修改單個Kubernetes資源(例如部署、任務、守護程式等)。可以使用部署嚮導擴充套件部署,啟動滾動更新,重新啟動Pod或部署新應用程式。
dashboard還提供有關群集中Kubernetes資源狀態以及可能發生的任何錯誤的資訊。

二 dashboard部署

2.1 下載yaml

  1 [root@master ~]# mkdir dashboard					#建議將yaml儲存到本地
  2 [root@master ~]# cd dashboard/
  3 [root@master dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
 

2.2 修改為國內源

  1 [root@master ~]# cd dashboard/
  2 [root@master dashboard]# vi kubernetes-dashboard.yaml
  3 ……
  4 image: mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
  5 ……
 
提示:將yaml檔案中的image欄位修改為mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1。

2.3 安裝

  1 [root@master dashboard]# kubectl apply -f kubernetes-dashboard.yaml
  2 [root@master ~]# kubectl get pod --all-namespaces -o wide| grep kubernetes-dashboard			#確認驗證
  3 kube-system	kubernetes-dashboard-68ddcc97fc-c5thv	0/1	Running	0	30s	<none>	node2	<none>	<none>
 

三 dashboard訪問方式

3.1 訪問方式概述

安裝dashboard後,需要為使用者配置對群集資源的訪問控制。從版本1.7開始,dashboard不再具有預設授予的完全管理員許可權。預設所有許可權都被撤銷,並且只授予了使Dashboard工作所需的最小許可權。
提示:本說明僅針對使用Dashboard 1.7及更高版本的使用者。如果確信dashboard需要授予管理員許可權,可參考:《附006.Kubernetes身份認證》
通常,其他應用程式不應直接訪問dashboard。
dashboard有以下三種訪問方式:
kubectl proxy:只能在localhost上訪問。訪問地址:http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
NodePort:編輯 kubernetes-dashboard.yaml檔案中,將 type: ClusterIP 改為 type: NodePort,確認dashboard執行在哪個節點後。訪問地址:https://<node-ip>:<nodePort>
apiserver:需要在瀏覽器中安裝使用者證書。訪問地址: https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
提示:kubectl proxy方式不推薦,建議使用有效證書來建立安全的HTTPS連線。

3.2 kubectl proxy

  1 [root@master ~]# kubectl proxy
  2 [root@master ~]# curl http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/	#訪問
 
提示:建議通過後端形式,並且允許所有主機訪問的方式:
  1 [root@master ~]# nohup kubectl proxy --address='0.0.0.0' --accept-hosts='^*$' &

3.3 NodePort

NodePort訪問儀表板的方式僅建議用於單節點設定中的Kubernetes環境。
  1 [root@master ~]# kubectl -n kube-system edit service kubernetes-dashboard
  2 ……
  3    type: NodePort
  4 ……
  5 #將type: ClusterIP  修改為 type: NodePort。
 
提示:以上操作也可通過以下命令一步完成:
  1 [root@master ~]# kubectl get pods --namespace=kube-system | grep dashboard
  2 kubernetes-dashboard-68ddcc97fc-c5thv   1/1     Running   0          3h14m
  3 [root@master ~]# kubectl describe pod kubernetes-dashboard-68ddcc97fc-c5thv --namespace=kube-system | grep Node
  4 Node:               node2/172.24.8.73
 
測試訪問:
瀏覽器訪問:http://172.24.8.73:30343/
提示:若部署的Kubernetes叢集為多節點叢集,需要通過以上方式查詢dashboard所在的node節點,若為單節點叢集,則直接訪問http://<master>:<port>即可。

3.4 apiserver

若Kubernetes API伺服器公開並可從外部訪問,可瀏覽器直接訪問:https://172.24.8.71:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
注意:apiserver預設情況下使用system:anonymous使用者進行訪問,因此沒有許可權開啟相應資源。只有在選擇在瀏覽器中安裝使用者證書時,才能使用這種訪​​問儀表板的方式。
NodePort和apiserver都需要配置相應的認證才可訪問,確定某種方式方式後需要配置認證型別。

3.5 Ingress

dashboard也可以使用ingress進行資源公開。
可參考:https://kubernetes.io/docs/concepts/services-networking/ingress/

四 dashboard驗證方式

瀏覽器訪問的時候需要載入相應證書,部署完成後預設已經建立相應證書,可參考附01進行匯出。由於Kubernetes預設證書可能過期導致無法訪問dashboard,本實驗在已成功部署Kubernetes後手動重新建立證書。

4.1 建立證書

  1 [root@master ~]# mkdir /etc/kubernetes/dash_pki
  2 [root@master ~]# cd /etc/kubernetes/dash_pki/
  3 [root@master dash_pki]# openssl genrsa -out ca.key 2048				#生成一個 2048 bit 的 ca.key
  4 [root@master dash_pki]# openssl req -x509 -new -nodes -key ca.key -subj "/CN=172.24.8.71" -days 10000 -out ca.crt	                #根據 ca.key 生成一個 ca.crt(使用 -days 設定證書的有效時間)
  5 [root@master dash_pki]# openssl genrsa -out server.key 2048			        #生成一個 2048 bit 的 server.key
  6 [root@master dash_pki]# openssl req -new -key server.key -subj "/CN=172.24.8.71" -out server.csr			                #根據 server.key 生成一個 server.csr
  7 [root@master dash_pki]# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000	#根據 ca.key、ca.crt 和 server.csr 生成 server.crt
  8 subject=/CN=172.24.8.71
  9 Getting CA Private Key
 10 [root@master dash_pki]# openssl x509  -noout -text -in ./server.crt		        #檢視證書
 

4.2 修改預設證書配置

  1 [root@master ~]# cd dashboard/
  2 [root@master dashboard]# kubectl delete -f kubernetes-dashboard.yaml		#刪除使用預設證書所建立的dashboard
  3 [root@master dashboard]# ll /etc/kubernetes/dash_pki/
  4 [root@master dashboard]# kubectl create secret generic kubernetes-dashboard-certs --from-file="/etc/kubernetes/dash_pki/server.crt,/etc/kubernetes/dash_pki/server.key" -n kube-system	#掛載新證書到dashboard
  5 [root@master dashboard]# kubectl get secret kubernetes-dashboard-certs -n kube-system -o yaml	#檢視新證書
 

4.3 重新部署dashboard

  1 [root@master dashboard]# kubectl apply -f kubernetes-dashboard.yaml
  2 [root@master dashboard]# kubectl get pods --namespace=kube-system | grep dashboard		#確認驗證
 

4.4 匯入證書

將server.crt匯入IE瀏覽器,匯入操作略。

4.5 訪問測試

本試驗基於apiserver訪問方式+Kubeconfig身份驗證進行登入。
通過apiserver形式訪問:https://172.24.8.71:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
001
提示:dashboard登入整個流程可參考:https://www.cnadn.net/post/2613.htm
提示:apiserver方式見3.4,Kubeconfig驗證方式見《附006.Kubernetes身份認證》中的3.5。
 

附001:匯出當前Kubernetes證書

[root@master ~]# grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
[root@master ~]# grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
[root@master ~]# openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out k8s.crt -name "kubernetes-client"
Enter Export Password:[x120952576]
Verifying - Enter Export Password:[x120952576]
使用相應的密碼,將k8s.crt匯入IE瀏覽器,匯入操作略。

相關文章