kubernetes容器集羣管理(3)-Kubeconfig 部署TLS Bootstrapping

目錄

 

1、TLS Bootstrapping一些理解

2、部署Kubeconfig 

3、運行上面腳本


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後面會用


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章