手動構(gòu)筑單機版K8s(四)創(chuàng)建kubeconfig文件

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-certificateclient-key 指向的證書文件內(nèi)容寫入到生成的 kube-proxy.kubeconfig 文件中;
  • kube-proxy.pem 證書中 CN 為 system:kube-proxy,kube-apiserver 預(yù)定義的 RoleBinding cluster-admin 將User system:kube-proxy 與 Role system:node-proxier 綁定,該 Role 授予了調(diào)用 kube-apiserver Proxy 相關(guān) API 的權(quán)限;

安裝步驟

  1. 事前準備
  2. 創(chuàng)建TLS證書和秘鑰
  3. 安裝kubectl命令行工具
  4. 創(chuàng)建kubeconfig文件
  5. 創(chuàng)建高可用etcd集群
  6. 部署master節(jié)點
  7. 部署node節(jié)點
  8. 全局驗證
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容