4.創(chuàng)建kubeconfig文件
創(chuàng)建 TLS Bootstrapping Token
Token auth file
Token可以是任意的包含128 bit的字符串,可以使用安全的隨機數(shù)發(fā)生器生成。
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
注意:在進行后續(xù)操作前請檢查 token.csv 文件,確認其中的 ${BOOTSTRAP_TOKEN} 環(huán)境變量已經(jīng)被真實的值替換。
[root@k8s bin]# cat token.csv
ae0c33dd85041f221e95ecfe74623d89,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
BOOTSTRAP_TOKEN 將被寫入到 kube-apiserver 使用的 token.csv 文件和 kubelet 使用的 bootstrap.kubeconfig 文件,如果后續(xù)重新生成了 BOOTSTRAP_TOKEN,則需要:
- 更新 token.csv 文件,分發(fā)到所有機器 (master 和 node)的 /etc/kubernetes/ 目錄下,分發(fā)到node節(jié)點上非必需;
- 重新生成 bootstrap.kubeconfig 文件,分發(fā)到所有 node 機器的 /etc/kubernetes/ 目錄下;
- 重啟 kube-apiserver 和 kubelet 進程;
- 重新 approve kubelet 的 csr 請求;
將token.csv移動至/etc/kubernetes/
cp token.csv /etc/kubernetes/
創(chuàng)建 kubelet bootstrapping kubeconfig 文件
cd /etc/kubernetes
export KUBE_APISERVER="https://127.0.0.1:6443"
# 設(shè)置集群參數(shù)
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=bootstrap.kubeconfig
# 設(shè)置客戶端認證參數(shù)
kubectl config set-credentials kubelet-bootstrap \
--token=${BOOTSTRAP_TOKEN} \
--kubeconfig=bootstrap.kubeconfig
# 設(shè)置上下文參數(shù)
kubectl config set-context default \
--cluster=kubernetes \
--user=kubelet-bootstrap \
--kubeconfig=bootstrap.kubeconfig
# 設(shè)置默認上下文
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
-
--embed-certs為 true 時表示將certificate-authority證書寫入到生成的bootstrap.kubeconfig文件中; - 設(shè)置客戶端認證參數(shù)時沒有指定秘鑰和證書,后續(xù)由
kube-apiserver自動生成;
創(chuàng)建 kube-proxy kubeconfig 文件
export KUBE_APISERVER="https://127.0.0.1:6443"
# 設(shè)置集群參數(shù)
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kube-proxy.kubeconfig
# 設(shè)置客戶端認證參數(shù)
kubectl config set-credentials kube-proxy \
--client-certificate=/etc/kubernetes/ssl/kube-proxy.pem \
--client-key=/etc/kubernetes/ssl/kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
# 設(shè)置上下文參數(shù)
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
# 設(shè)置默認上下文
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
- 設(shè)置集群參數(shù)和客戶端認證參數(shù)時
--embed-certs都為 true,這會將certificate-authority、client-certificate和client-key指向的證書文件內(nèi)容寫入到生成的kube-proxy.kubeconfig文件中; -
kube-proxy.pem證書中 CN 為system:kube-proxy,kube-apiserver預(yù)定義的 RoleBindingcluster-admin將Usersystem:kube-proxy與 Rolesystem:node-proxier綁定,該 Role 授予了調(diào)用kube-apiserverProxy 相關(guān) API 的權(quán)限;