Kubernetes - Dashboard - 使用自定義 Service Account 登入

# 前言

本篇主要紀錄如何在 Kubernetes 中安裝 Dashboard, 並建立 Server Account, 然後使用該 Service Account 的 token 登入 Dashboard



# 安裝 Dashboard

首先, Dashboard 是一個套件, 作用是可以讓使用者透過 Web UI 介面取代指令的管理 Kubernetes

安裝 Dashboard, 可參考 官方 Github

依照官方 Github 的步驟, 需要使用 kube proxy 來存取 Dashboard, 也可另外建立一個 nodePort service

kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
type: NodePort

我們先來看看 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, 所以我們接下來要做的事情如下:

  1. 建立擁有 cluster-admin 權限的 cluster role
  2. 建立一個 service account
  3. 將擁有 cluster admin 權限的 cluster role, 與該 service account 綁定
  4. 取得該 service account 的 token
  5. 登入

那就一步一步來吧!


# 建立 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 有什麼功能就讓大家自行玩耍啦! 本文到此告一段落, 下台一鞠躬!



# 參考資源

官方文件
JSONPath Syntax



# 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:
    取得 secret cluster-admin-ray-token-rtnnh 的 token
Kubernetes - 部署 WordPress 應用 SQL - Statements

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×