目錄
1、TLS Bootstrapping一些理解
如果對 TLS Bootstrapping 完全沒接觸過推薦:
https://blog.csdn.net/paopaohll/article/details/89022920
衆所周知 TLS 的作用就是對通訊加密,防止中間人竊聽;同時如果證書不信任的話根本就無法與 apiserver建立連接,更不用提有沒有權限向 apiserver 請求指定內容。在開啓了 TLS 的集羣中,每當與集羣交互的時候少不了的是身份認證,使用 kubeconfig(即證書) 和 token 兩種認證方式是最簡單也最通用的認證方式。
當集羣開啓了 TLS 認證後,每個節點的 kubelet 組件都要使用由 apiserver 使用的 CA 簽發的有效證書才能與 apiserver 通訊;此時如果節點多起來,爲每個節點單獨簽署證書將是一件非常繁瑣的事情;TLS bootstrapping 功能就是讓 kubelet 先使用一個預定的低權限用戶連接到 apiserver,然後向 apiserver 申請證書,kubelet 的證書由 apiserver 動態簽署;
TLS Bootstrapping ,使用 Token 時整個啓動引導過程:
1、在集羣內創建特定的 Bootstrap Token Secret ,該 Secret 將替代以前的 token.csv 內置用戶聲明文件
2、在集羣內創建首次 TLS Bootstrap 申請證書的 ClusterRole、後續 renew Kubelet client/server 的 ClusterRole,以及其相關對應的 ClusterRoleBinding;並綁定到對應的組或用戶
3、調整 Controller Manager 配置,以使其能自動簽署相關證書和自動清理過期的 TLS Bootstrapping Token
4、生成特定的包含 TLS Bootstrapping Token 的 bootstrap.kubeconfig 以供 kubelet 啓動時使用
5、調整 Kubelet 配置,使其首次啓動加載 bootstrap.kubeconfig 並使用其中的 TLS Bootstrapping Token 完成首次證書申請
6、證書被 Controller Manager 簽署,成功下發,Kubelet 自動重載完成引導流程
7、後續 Kubelet 自動 renew 相關證書
--#!
就個人目前理解:想要實現K8s集羣每個節點的Kubelet與管理機器Apiserver之間的通訊,首先需要TLS證書,這個之前已經利用CFSSL
工具生成並分發好了;其次還需要每臺節點向apiserver申請證書並同意,我們現在要做的就是讓每臺節點自動向管理機器申請通訊,master
直接簽署就可以了,不必讓管理機器一臺一臺挨個確認。
2、部署Kubeconfig
#Kubeconfig 需要配置如下TLS Bootstrapping Token、kubelet kubeconfig、kube-proxy kubeconfig
#下載kubectl
kubectl下載地址:https://kubernetes.io/docs/tasks/tools/install-kubectl/
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/linux/amd64/kubectl
[root@master ssl]# chmod +x kubectl
[root@master ssl]# mv kubectl /opt/kubernetes/bin/
#kubeconfig配置文件創建,直接用下面kubeconfig.sh腳本文件生成 注意:export KUBE_APISERVER設置master的ip
# 創建 TLS Bootstrapping Token
export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
cat > token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
#----------------------
# 創建kubelet bootstrapping kubeconfig
export KUBE_APISERVER="https://192.168.10.60:6443"
# 設置集羣參數
kubectl config set-cluster kubernetes \
--certificate-authority=./ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=bootstrap.kubeconfig
# 設置客戶端認證參數
kubectl config set-credentials kubelet-bootstrap \
--token=${BOOTSTRAP_TOKEN} \
--kubeconfig=bootstrap.kubeconfig
# 設置上下文參數
kubectl config set-context default \
--cluster=kubernetes \
--user=kubelet-bootstrap \
--kubeconfig=bootstrap.kubeconfig
# 設置默認上下文
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
#----------------------
# 創建kube-proxy kubeconfig文件
kubectl config set-cluster kubernetes \
--certificate-authority=./ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials kube-proxy \
--client-certificate=./kube-proxy.pem \
--client-key=./kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
3、運行上面腳本
#設置環境
[root@master ssl]# vi /etc/profile
#在文件最後一行加上
PATH=$PATH:/opt/kubernetes/bin
[root@master ssl]# source /etc/profile
#執行
[root@master ssl]# chmod +x kubeconfig.sh
[root@master ssl]# ./kubeconfig.sh
#生成bootstrap.kubeconfig kube-proxy.kubeconfig token.csv後面會用