云原生學習路線導航頁(持續更新中)
- kubernetes學習系列快捷鏈接
- Kubernetes架構原則和對象設計(一)
- Kubernetes架構原則和對象設計(二)
- Kubernetes架構原則和對象設計(三)
- Kubernetes控制平面組件:etcd(一)
- Kubernetes控制平面組件:etcd(二)
- Kubernetes控制平面組件:etcd常用配置參數
- Kubernetes控制平面組件:etcd高可用集群搭建
- Kubernetes控制平面組件:etcd高可用解決方案
- Kubernetes控制平面組件:Kubernetes如何使用etcd
- kubectl 和 kubeconfig 基本原理
- kubeadm 升級 k8s集群 1.17到1.20
- Kubernetes常見問題解答
- 查看云機器的一些常用配置
本文主要對kubernetes API Server 認證機制中的 引導Token 認證方式進行介紹,包括 引導Token 的設計理念、實現原理、認證流程,以及在 Kubernetes 中的具體應用
1.引導Token的認證方式簡介
- Kubernetes 的引導 Token(Bootstrap Token)認證是一種用于簡化集群節點加入和初始化的機制。
- 它允許新節點或組件通過臨時 Token 加入集群,并在完成初始化后自動失效。
- 這種方式常用于集群的自動化部署和擴展。
2.引導 Token 認證的工作原理
-
引導 Token 是一種短期的、臨時的 Token,用于以下場景:
- 節點加入集群:新節點使用引導 Token 向 API Server 認證并加入集群。
- 初始化組件:如 kubeadm 初始化集群時,使用引導 Token 完成初始配置。
-
引導 Token 的特點:
- 短期有效:Token 有明確的過期時間,通常為 24 小時。
- 自動失效:使用后會自動失效,避免長期暴露。
- RBAC 支持:可以為引導 Token 綁定特定的 RBAC 權限,限制其使用范圍。
3.引導 Token 的結構
- 引導 Token 是一個由兩部分組成的字符串,格式為:
<token-id>.<token-secret>
- 例如:
abcdef.0123456789abcdef
- Token ID:6 個字符的隨機字符串,用于標識 Token。
- Token Secret:16 個字符的隨機字符串,用于驗證 Token。
- 例如:
4.創建引導 Token
4.1.使用 kubeadm
創建引導 Token
kubeadm
提供了創建和管理引導 Token 的工具。
kubeadm token create
輸出示例:
abcdef.0123456789abcdef
4.2.查看已創建的 Token
kubeadm token list
輸出示例:
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
abcdef.0123456789abcdef 23h 2025-02-19T12:34:56Z authentication,signing <none> system:bootstrappers:kubeadm:default-node-token
4.3.手動創建引導 Token
-
如果需要手動創建引導 Token,可以按照以下步驟操作:
-
生成 Token ID 和 Token Secret:
TOKEN_ID=$(head -c 6 /dev/urandom | base64 | tr -d '/+' | head -c 6) TOKEN_SECRET=$(head -c 16 /dev/urandom | base64 | tr -d '/+' | head -c 16) BOOTSTRAP_TOKEN="${TOKEN_ID}.${TOKEN_SECRET}" echo "Bootstrap Token: ${BOOTSTRAP_TOKEN}"
-
將 Token 寫入 Kubernetes Secret:
kubectl create secret generic bootstrap-token-${TOKEN_ID} \--namespace=kube-system \--type=bootstrap.kubernetes.io/token \--from-literal=token-id=${TOKEN_ID} \--from-literal=token-secret=${TOKEN_SECRET} \--from-literal=usage-bootstrap-authentication=true \--from-literal=usage-bootstrap-signing=true \--from-literal=expiration=$(date -d "+24 hours" -u +"%Y-%m-%dT%H:%M:%SZ")
-
5.使用引導 Token 加入集群
5.1.獲取集群信息
- 在 Master 節點上運行以下命令,獲取集群的 CA 證書哈希和 API Server 地址:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' kubectl cluster-info
5.2.在新節點上使用引導 Token 加入集群
-
在新節點上運行以下命令,使用引導 Token 加入集群:
kubeadm join <api-server-address>:<port> \--token <bootstrap-token> \--discovery-token-ca-cert-hash sha256:<ca-cert-hash>
-
例如:
kubeadm join 192.168.1.100:6443 \--token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
6.引導 Token 的 RBAC 配置
-
引導 Token 默認綁定到
system:bootstrappers:kubeadm:default-node-token
組,可以通過 RBAC 為其分配權限。 -
例如,為新節點分配必要的權限:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata:name: kubeadm:node-autoapprove-bootstrap roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:node-bootstrapper subjects: - apiGroup: rbac.authorization.k8s.iokind: Groupname: system:bootstrappers:kubeadm:default-node-token
7.引導 Token 的過期和清理
- 引導 Token 在過期后會自動失效,也可以通過以下命令手動刪除:
kubeadm token delete <token-id>
- 例如:
kubeadm token delete abcdef
8.總結
- 引導 Token 認證是 Kubernetes 中一種簡單且安全的機制,適用于集群節點的初始化和自動化部署。
- 通過
kubeadm
工具可以輕松創建和管理引導 Token,并結合 RBAC 實現權限控制。 - 在實際操作中,建議:
- 定期清理過期的 Token。
- 結合自動化工具(如 Ansible、Terraform)實現集群的自動化部署。
- 在生產環境中使用更安全的認證方式(如 TLS 證書)替代引導 Token。