2、 BootStrapping詳解


TLS BootStrapping 官方文檔:
https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#initialization-process

一、kubelet啟動過程

  • 查找kubeconfig文件,文件一般位於/etc/kubernetes/kubelet.kubeconfig
  • 從kubeconfig文件中檢索APIServer的URL和證書
  • 然后去和APIServer進行交互
1、查看kubelet.kubeconfig證書有效期:

首先對kubelet.kubeconfi的certificate-authority-data字段進行解密:

#
echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ0akNDQXNxZ0F3SUJBZ0lVVXdzUHFhWGxWVUdWb3lvYkZyZFpIRmZIQk04d0RRWUpLb1pJaHZjTkFRRUwKQlFBd2R6RUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKb
GFXcHBibWN4RURBT0JnTlZCQWNUQjBKbAphV3BwYm1jeEV6QVJCZ05WQkFvVENrdDFZbVZ5Ym1WMFpYTXhHakFZQmdOVkJBc1RFVXQxWW1WeWJtVjBaWE10CmJXRnVkV0ZzTVJNd0VRWURWUVFERXdwcmRXSmxjbTVsZEdWek1CNFhEVEl3TURrd05UQXlNVFF3TUZvWERUSTEKTU 
Rrd05EQXlNVFF3TUZvd2R6RUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFXcHBibWN4RURBTwpCZ05WQkFjVEIwSmxhV3BwYm1jeEV6QVJCZ05WQkFvVENrdDFZbVZ5Ym1WMFpYTXhHakFZQmdOVkJBc1RFVXQxClltVnlibVYwWlhNdGJXRnVkV0ZzTVJNd0VRWUR 
WUVFERXdwcmRXSmxjbTVsZEdWek1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXUrV291WmpLS1RmUnMwbkY1NTdCUk8wVTlkSUVvRVlydEFHawp5aWZET0s5MGdNeDBRTzlhMGpJOXd0OFlNM284cmpGcmVjdWJ5Q1RzK1JSMTFmd0EvdGIwc0kr 
U1NlRVVYVGo3ClFlaklVK1pBTzdzNGRvM2hveGYrbzBsS2tPbVIvTVZTa2NYUFl2ZzJhc0tGTnI0NkZCSVFZRkh4NzJCcGIreFMKVmViMWhqNTFXTVBmSkdZcW4vRWZYS3hlb3dvNEE5WXJHdXoxVDVGWVNtcjJWa3VIOXEwajRsRE9TbkQ4WnF0eQpDZW1HZVI5M1IraklmTkxCN 
DZHZC9vVm9veEJYb0dPemlvUURLZDM1QllXaExvZzVmT2cyMko4ZmNrTEI0bk9wCnBjb24xZ01vOGtlS0xZSlBxTmp6ZGFuL0hNN1dtaElMb2JIUVF3V0NjK1hjTkxnaUxRSURBUUFCbzJZd1pEQU8KQmdOVkhROEJBZjhFQkFNQ0FRWXdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SU 
JBakFkQmdOVkhRNEVGZ1FVN3NuYQoweGhZUU5wNDJ0ZzhmdGxjVVdiSlE3b3dId1lEVlIwakJCZ3dGb0FVN3NuYTB4aFlRTnA0MnRnOGZ0bGNVV2JKClE3b3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBTEFGdUdiTmNoTGk4aFdWbURRUGlIR2E0Z2JzdG1NWjZ1eC8KVnNqVnF 
IcnkrMXdXcm8rWDc1SDJ6QXV3d3RIMHFYUGhKZjRid2hWMTREb1k0eGpVYW9aTjF0ejU3VEpQUXczNApuT3lRa1VmOFhZcDJpK1BBczZ6ZUgrVUZjQUJqeGIrdFRuYlU0MENqakx6L2ZaRjJURkxscWtTUzVnOSttQnkrCkx1bkVGY1E5Z1hLaHFvbWJ5TkpNcytsY0hacFJ6YmF4 
NE9oeTRZTU1qNENaQjNKZG9TUDR5dkRQMnZWNXZvbmcKcU0rUHl3SVl2TjhUN3hFeTIrbTZxWGNla3gyRmlVeFJDeTMyWkRGbGQrTDhFamdrelN2YVNpQ2thWjF6TlczRwpZWTBFWkhGcGM2S1lrdlJDWWVvMGRDRkwyVSsxckpEMFVWbGRKS0dnUEcyMjh2aUY5cTA9Ci0tLS0tR 
U5EIENFUlRJRklDQVRFLS0tLS0K" | base64 --decode >/tmp/1
2、然后使用OpenSSL即可查看證書過期時間:
openssl x509 -in /tmp/1 -noout -dates

二、TLS Bootstrapping初始化流程

1、Kubelet啟動
2、Kubelet查看kubelet.kubeconfig文件,假設沒有這個文件
3、Kubelet會查看本地的bootstrap.kubeconfig
4、Kubelet讀取bootstrap.kubeconfig文件,檢索apiserver的url和一個token
5、Kubelet鏈接apiserver,使用這個token進行認證

  • Apiserver會識別tokenid,apiserver會查看該tokenid對於的bootstrap的一個secret
  • 找個這個secret中的一個字段,apiserver把這個token識別成一個username,名稱是system:bootstrap: ,屬於system:bootstrappers這個組,這個組具有申請csr的權限,該組的權限綁定在一個叫system:node-bootstrapper的clusterrole
    • clusterrole k8s集群級別的權限控制,它作用整個k8s集群
    • clusterrolebinding 集群權限的綁定,它可以幫某個clusterrole綁定到一個用戶、組或者seviceaccount
    • CSR:相當於一個申請表,可以拿着這個申請表去申請我們的證書。

6、經過上面的認證,kubelet就有了一個創建和檢索CSR的權限
7、Kubelet為自己創建一個CSR,名稱為kubernetes.io/kube-apiserver-client-kubelet
8、CSR被允許有兩種方式:

  • K8s管理員使用kubectl手動的頒發證書
  • 如果配置了相關權限,kube-controller-manager會自動同意。
    • Controller-manager有一個CSRApprovingController。他會校驗kubelet發來的csr的username和group是否有創建csr的權限,而且還要驗證簽發着是否是kubernetes.io/kube-apiserver-client-kubelet
    • Controller-manager同意CSR請求

9、CSR被同意后,controller-manager創建kubelet的證書文件
10、Controller-manager將證書更新至csr的status字段
11、Kubelet從apiserver獲取證書
12、Kubelet從獲取到的key和證書文件創建kubelet.kubeconfig
13、Kubelet啟動完成並正常工作
14、可選:如果配置了自動續期,kubelet會在證書文件過期的時候利用之前的kubeconfig文件去申請一個新的證書,相當於續約。
15、新的證書被同意或簽發,取決於我們的配置

  • Kubelet創建的CSR是屬於一個O:system:nodes
  • CN:system:nodes:主機名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM