# 前言
本篇主要紀錄如何在 Kubernetes 中安裝 Dashboard, 並建立 Server Account, 然後使用該 Service Account 的 token 登入 Dashboard
# 安裝 Dashboard
首先, Dashboard 是一個套件, 作用是可以讓使用者透過 Web UI 介面取代指令的管理 Kubernetes
安裝 Dashboard, 可參考 官方 Github
依照官方 Github 的步驟, 需要使用 kube proxy
來存取 Dashboard, 也可另外建立一個 nodePort service
kind: Service |
我們先來看看 Dashboard 的一些詳細資料, 本篇查看 Pod, 查看 Deployment 也可
取得 Dashboard pod 名稱
kubectl get pods -n kubernetes-dashboard
查看 Dashboard 的詳細資料
kubectl describe pod yourDashboardPodName -n kubernetes-dashboard
從 description 中可看到 Dashboard Pod 是 Listen 8443 port, 因此我們 yaml 中才會 listen 8443 port
建立 service
kubectl apply -f nodePortServiceName
查看 nodePort
kubectl get services -n kubernetes-dashboard
這時應該看到我們剛剛建立的 service, 後面會有一個 port binding, 像是 443:31831/TCP
, 這就表示該 service 已經跟 Node 的 31831 port 對應了, 這時只要用瀏覽器開啟 http://myNodeIp:31831
, 就可以進入 dashboard 登入頁面了
# 使用自定義的 service account 登入
本文中會使用 token 的方式登入
Kubernetes 中, 每個 service account
都會綁定一個 secret
資源, 而 secret
中會有一組 base64 加密的 token, 所以我們接下來要做的事情如下:
- 建立擁有 cluster-admin 權限的 cluster role
- 建立一個 service account
- 將擁有 cluster admin 權限的 cluster role, 與該 service account 綁定
- 取得該 service account 的 token
- 登入
那就一步一步來吧!
# 建立 role
因為 Kubernetes 預設就幫我們建立了 cluster-admin 這個 role, 所以我們就不用再自己另外建立, 直接使用即可
# 建立 service account
那我們就建立一個 service account, 名為 cluster-admin-ray
kubectl create sa cluster-admin-ray -n kube-system |
# 建立 role binding
接下來我們要綁定上面提到的系統預設的 cluster role, 與上面建立 service account cluster-admin-ray
綁定, 這樣 cluster-admin-ray
就可以擁有該 cluster role 的權限
建立 yaml 檔
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cluster-admin-binding
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
# 這邊我們並沒有特別建立這個 cluster role, 因為這是 Kubernetes 預設建立的
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: cluster-admin-ray
namespace: kube-system建立 clusterRoleBinding
kubectl create -f yourYamlName
# 取得 Server Account 的 token
上面已經完成綁定, 接下來我們便要取得 service account 的 token
- 首先, 我們先來看看 service account
kubectl get sa cluster-admin-ray -n kube-system -o=yaml
輸出如下:
從上面的圖片可以看到, service account 中有一個 secrets
- 接下來, 我們來看看這個 secret
kubectl get secret cluster-admin-ray-token-rtnnh -n kube-system -o=yaml
可以看到 secret 的詳細資料, 由於太多資料我就不貼圖了
裡頭有個 token 就是我們要的
所以, 我們來取得 token
kubectl get secret cluster-admin-ray-token-rtnnh -o jsonpath={.data.token} -n kube-system
然而, 之前提過, Kubernetes secret 的內容會使用 base64 encode, 因此, 我們需要對 token 做 base64 decode
kubectl get secret cluster-admin-ray-token-rtnnh -o jsonpath={.data.token} -n kube-system | base64 -d
若是你是使用 MacOS, 也可以使用下面一行搞定, 不過請記得將 service account 改成你自己的
SECRET=`kubectl get serviceAccount yourServiceAccountName -n kube-system -o jsonpath={.secrets\[0\].name}` && kubectl get secret $SECRET -n kube-system -o jsonpath={.data.token}|base64 -d|pbcopy
# 登入
這一步很簡單, 使用上面拿到的 token, 使用 token 方式登入就行了
# 結語
至於 Dashboard 有什麼功能就讓大家自行玩耍啦! 本文到此告一段落, 下台一鞠躬!
# 參考資源
# Questions and Answers
以下的 Kubernetes example command 代表什麼意思?
- Example:
kubectl get secret cluster-admin-ray-token-rtnnh -o jsonpath={.data.token} -n kube-system | base64 -d
- Answer:
取得 secretcluster-admin-ray-token-rtnnh
的 token
留言