K8S Dashboard User 詳解

在本指南中,我們將了解如何使用 Kubernetes 的服務(wù)帳戶機(jī)制創(chuàng)建新用戶、授予該用戶管理員權(quán)限并使用與該用戶綁定的承載令牌登錄儀表板。

對(duì)于以下每個(gè)代碼片段ServiceAccount,ClusterRoleBinding您都應(yīng)該將它們復(fù)制到新的清單文件(如)中,dashboard-user.yaml并使用kubectl apply -f dashboard-adminuser.yaml來(lái)創(chuàng)建它們。

創(chuàng)建服務(wù)帳號(hào)

我們首先admin-user在命名空間中創(chuàng)建具有名稱的服務(wù)帳戶。kubernetes-dashboard

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

創(chuàng)建 ClusterRoleBinding

在大多數(shù)情況下,使用kubeadm或任何其他流行工具配置集群后,ClusterRole cluster-admin在集群中已經(jīng)存在。我們可以使用它ClusterRoleBinding為我們的創(chuàng)建一個(gè)ServiceAccount。如果它不存在,那么您需要先創(chuàng)建此角色并手動(dòng)授予所需的權(quán)限。

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

獲取 ServiceAccount 的 Bearer Token

現(xiàn)在我們需要找到可以用來(lái)登錄的令牌。執(zhí)行以下命令:

kubectl -n kubernetes-dashboard create token admin-user

token:

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

查看Kubernetes 文檔有關(guān) ServiceAccount 的 API 令牌的更多信息。

獲取 ServiceAccount 的長(zhǎng)期 Bearer Token

我們還可以創(chuàng)建一個(gè)與服務(wù)賬戶綁定的帶有secret的token,該token會(huì)保存在Secret中:

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創(chuàng)建完成后,我們可以執(zhí)行以下命令來(lái)獲取Secret中保存的Token:

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

查看Kubernetes 文檔有關(guān) ServiceAccount 的長(zhǎng)效 API 令牌的更多信息。

清理步驟

刪除管理員ServiceAccountClusterRoleBinding。

kubectl -n kubernetes-dashboard delete serviceaccount admin-user
kubectl -n kubernetes-dashboard delete clusterrolebinding admin-user

為了了解有關(guān)如何在 Kubernetes 中授予/拒絕權(quán)限的更多信息,請(qǐng)閱讀官方驗(yàn)證&授權(quán)文檔。

更多內(nèi)容

  • 正確獲取 Dashboard 訪問(wèn)令牌的方法
    對(duì)于 Kubernetes v1.24+ 版本(不再自動(dòng)創(chuàng)建 ServiceAccount token Secret):

  • 直接創(chuàng)建 token
    kubectl -n kubernetes-dashboard create token admin-user

  • 對(duì)于舊版本:

獲取 token secret 名稱
kubectl -n kubernetes-dashboard get secret
然后查看解碼后的 token
kubectl -n kubernetes-dashboard get secret <secret-name> -o jsonpath="{.data.token}" | base64 --decode

  • 如果仍然需要手動(dòng)創(chuàng)建 Secret

創(chuàng)建包含 token 的 Secret
kubectl -n kubernetes-dashboard create secret generic admin-user-token
--from-literal=token=$(kubectl -n kubernetes-dashboard create token admin-user)
然后獲取
kubectl -n kubernetes-dashboard get secret admin-user-token -o jsonpath='{.data.token}' | base64 --decode

  • 驗(yàn)證 ServiceAccount 配置

確保 ServiceAccount 和 ClusterRoleBinding 配置正確:
kubectl -n kubernetes-dashboard get serviceaccount admin-user -o yaml
kubectl get clusterrolebinding admin-user -o yaml

  • 完整工作流程示例
  1. 創(chuàng)建 ServiceAccount
    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
    name: admin-user
    namespace: kubernetes-dashboard
    EOF
  2. 創(chuàng)建 ClusterRoleBinding
    cat <<EOF | kubectl apply -f -
    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
    EOF
  • 獲取 Token (Kubernetes v1.24+)
    kubectl -n kubernetes-dashboard create token admin-user
    常見(jiàn)問(wèn)題排查
    如果收到 "no API token found" 錯(cuò)誤:

檢查 secret 是否存在
kubectl -n kubernetes-dashboard get secret | grep admin-user

如果不存在,創(chuàng)建新的 token
kubectl -n kubernetes-dashboard create token admin-user --duration=24h

Token 過(guò)期問(wèn)題:
創(chuàng)建長(zhǎng)期有效的 token (例如 30 天)
kubectl -n kubernetes-dashboard create token admin-user --duration=720h

權(quán)限不足問(wèn)題:
驗(yàn)證權(quán)限
kubectl auth can-i --list --as=system:serviceaccount:kubernetes-dashboard:admin-user

最佳實(shí)踐建議
對(duì)于生產(chǎn)環(huán)境,考慮使用更安全的訪問(wèn)方式:
OIDC 集成
通過(guò) Ingress 配置身份驗(yàn)證代理
使用 kubectl proxy 訪問(wèn)

  • 定期輪換 token:
    刪除舊 token
    kubectl -n kubernetes-dashboard delete secret (kubectl -n kubernetes-dashboard get secret | grep admin-user-token | awk '{print1}')
    創(chuàng)建新 token
    kubectl -n kubernetes-dashboard create token admin-user
  • 監(jiān)控 Dashboard 訪問(wèn):
    查看 Dashboard 訪問(wèn)日志
    kubectl -n kubernetes-dashboard logs -l k8s-app=kubernetes-dashboard
    通過(guò)以上步驟,您應(yīng)該能夠成功獲取有效的 Dashboard 訪問(wèn)令牌。如果問(wèn)題仍然存在,請(qǐng)?zhí)峁┮韵滦畔⒁员氵M(jìn)一步診斷:
    kubectl version
    kubectl -n kubernetes-dashboard get secret 的輸出
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容