iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
Kubernetes

Kubernetes三十天就上手系列 第 29

Day 29- 使用 Kubernetes Dashboard 圖形介面管理 Cluster

  • 分享至 

  • xImage
  •  

使用 Kubernetes Dashboard 圖形介面管理Cluster

介紹 Kubernetes Dashboard

Kubernetes Dashboard 是一個基於 Web 的用戶界面,允許用戶直接在瀏覽器中管理和監控 Kubernetes Cluster。它提供了一個直觀的方式來查看 Cluster 的狀態、部署應用程式、排查問題以及管理資源。這使得即使是不熟悉命令行操作的用戶,也可以輕鬆地與 Kubernetes 進行互動。

Kubernetes Dashboard 的功能

  • Cluster概覽:查看整個 Kubernetes Cluster的健康狀況,包括節點的可用性、Pod 的狀態以及各種資源的使用情況。
  • 工作負載管理:創建、更新和刪除 Deployment、ReplicaSet、DaemonSet、StatefulSet 等 Kubernetes 資源,並監控它們的運行狀況。
  • Pod 和容器管理:查看 Pod 的日誌,排查容器的啟動錯誤,進行故障排除和重啟操作。
  • 資源管理:管理 ConfigMaps、Secrets、PersistentVolumeClaims 等 Kubernetes 資源,輕鬆調整應用程式的設定和敏感資訊。
  • 應用部署:使用 YAML 檔案或 UI 中的表單部署應用程式,簡化應用程式的管理流程。

安裝 Kubernetes Dashboard

a. 部署 Dashboard

從版本 7.0.0 開始,官方放棄了對 Manifest-based 的安裝支援。目前僅支援基於 Helm 的安裝。由於多容器設定和對 Kong gateway API 代理程式的相依性,輕鬆支援 Manifest-based 的安裝是不可行的。

可以使用以下命令在 Kubernetes Cluster 中部署 Dashboard:

helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm repo update
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard

上列的指令會新增 kubernetes-dashboard 儲存庫並使用 kubernetes-dashboard chart 部署名為「kubernetes-dashboard」的 Helm Release,成功執行後的訊息如下:

Release "kubernetes-dashboard" does not exist. Installing it now.
NAME: kubernetes-dashboard
LAST DEPLOYED: Mon Aug 12 16:19:24 2024
NAMESPACE: kubernetes-dashboard
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
*************************************************************************************************
*** PLEASE BE PATIENT: Kubernetes Dashboard may need a few minutes to get up and become ready ***
*************************************************************************************************

Congratulations! You have just installed Kubernetes Dashboard in your cluster.

To access Dashboard run:
  kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443

NOTE: In case port-forward command does not work, make sure that kong service name is correct.
      Check the services in Kubernetes Dashboard namespace using:
        kubectl -n kubernetes-dashboard get svc

Dashboard will be available at:
  https://localhost:8443

這將會在 Kubernetes Cluster 中創建相關的資源到 kubernetes-dashboard 這個命名空間中。

b. 存取 Dashboard

1. 編輯 Kubernetes Dashboard Service

預設的情況下,Kubernetes Dashboard 通過 ClusterIP 暴露,只能在 Cluster 內部存取。你需要將其修改為 NodePort 或是LoadBalancer,以便從外部存取。

本範例中選擇使用NodePort的方式,首先,找到 Dashboard Service:

kubectl -n kubernetes-dashboard get svc

然後,編輯該 Service 將類型更改為 NodePort

kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard-kong-proxy

在編輯器中找到 spec.type,將其更改為 NodePort

spec:
  type: NodePort

保存並退出。

2. 確認 NodePort

當你將 Service 的類型設置為 NodePort 之後,Kubernetes 會自動為其分配一個端口號(範圍在 30000-32767 之間)。你可以使用以下命令確認 Dashboard 所使用的 NodePort:

kubectl -n kubernetes-dashboard get svc kubernetes-dashboard-kong-proxy

輸出的 PORT(S) 列將顯示分配的 NodePort,例如:

NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
kubernetes-dashboard-kong-proxy   NodePort    10.107.152.50   <none>        443:32433/TCP                10m

在這個例子中,NodePort 是 32433

3. 存取 Dashboard

現在,你可以使用Cluster中任意節點的 IP 地址加上 NodePort 來存取 Kubernetes Dashboard。

如果你的節點 IP 是 192.168.1.100,NodePort 是 32433,那麼你可以在瀏覽器中存取:

https://192.168.1.100:32433/

請注意,由於 Dashboard 使用 HTTPS,你可能會收到一個瀏覽器的安全警告,因為使用的是自簽的憑證。你可以選擇繼續存取 Dashboard。

4. 使用 Token 登錄

當你首次存取 Dashboard 時,系統會要求你提供一個 Token 來進行身份驗證。

p1

你可以通過創建並提取一個具有適當權限的服務帳戶 Token 來登錄,如下所述:
我們首先在命名空間 kubernetes-dashboard 中建立名為 admin-user 的服務帳號。

YAML範例如下:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

下一步為 ServiceAccount 建立 ClusterRoleBinding,這個 ClusterRoleBinding 將名為 cluster-admin 的 Cluster 角色授權給 kubernetes-dashboard 命名空間中的 admin-user 服務帳戶。這樣,該服務帳戶將擁有 Cluster 中所有資源的完全控制權(cluster-admin 的權限),使得它可以用於 Kubernetes Dashboard 的管理操作。

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

將以上的YAML檔案套用之後,你就可以透過下列指令來取的登入需要的Bearer Token:

kubectl -n kubernetes-dashboard create token admin-user

輸出結果如下:

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXY1N253Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwMzAzMjQzYy00MDQwLTRhNTgtOGE0Ny04NDllZTliYTc5YzEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.Z2JrQlitASVwWbc-s6deLRFVk5DWD3P_vjUFXsqVSY10pbjFLG4njoZwh8p3tLxnX_VBsr7_6bwxhWSYChp9hwxznemD5x5HLtjb16kI9Z7yFWLtohzkTwuFbqmQaMoget_nYcQBUC5fDmBHRfFvNKePh_vSSb2h_aYXa8GV5AcfPQpY7r461itme1EXHQJqv-SN-zUnguDguCTjD80pFZ_CmnSE1z9QdMHPB8hoB4V68gtswR1VLa6mSYdgPwCHauuOobojALSaMc3RH7MmFUumAgguhqAkX3Omqd3rJbYOMRuMjhANqd08piDC3aIabINX6gP5-Tuuw2svnV6NYQ

將的 Token 複製並貼到 Dashboard 的登錄頁面中。
成功登入的第一個畫面如下:

p2

上列的token在過期或服務帳戶被刪除之前一直有效。在 Kubernetes v1.30以後的版本,使用此方法獲得的token具有有限的生命週期,並且當它們掛載到的 Pod 被刪除時會自動失效。

5. 為 ServiceAccount 取得永不過期的Token

我們也可以使用綁定服務帳戶的 Secret 建立一個token,該token將保存在 Secret 中,請套用下列範例的YAML檔:

apiVersion: v1
kind: Secret
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/service-account.name: "admin-user"   
type: kubernetes.io/service-account-token  

創建Secret後,我們可以執行以下命令來取得Secret中保存的token:

kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d

使用 Dashboard 進行 Cluster 管理

一旦登錄進入 Dashboard,你可以使用該界面執行各種操作,如:

  • 查看並管理 Pod:監控 Pod 的運行情況,查看日誌,重啟或終止 Pod。
  • 管理命名空間:查看和切換不同的命名空間,隔離資源和應用程式。
  • 創建和編輯資源:使用 Dashboard 的表單或直接編輯 YAML 檔案來創建和管理 Kubernetes 資源。

安全性考量

由於 Dashboard 提供了強大的管理功能,因此需要特別注意安全性:

  • 限制存取權限:避免將 cluster-admin 權限授予過多的用戶,僅授權必要的權限給特定的服務帳戶。
  • 使用 HTTPS 和 RBAC:確保通過 HTTPS 進行存取,並且使用 Kubernetes 的 RBAC 機制來細化權限控制。

總結

Kubernetes Dashboard 為管理和監控 Kubernetes Cluster 提供了一個直觀且強大的界面,使得運維和開發人員能夠更高效地管理 Cluster 中的資源。儘管它簡化了很多操作,但使用時必須注意其潛在的安全風險,並採取相應的措施來保護 Cluster 的安全。


上一篇
Day 28- 使用 Prometheus 與 Grafana 監控 Kubernetes
下一篇
Day 30- 使用 kubeadm 進行 Cluster 升級與維護
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言