# 創建 kubeconfig 文件
> 提示:請先參考 安裝kubectl命令行工具,先在 master 節點上安裝 kubectl 然后再進行下面的操作。
> kubelet、kube-proxy 等 Node 機器上的進程與 Master 機器的 kube-apiserver 進程通信時需要認證和授權;
kubernetes 1.4 開始支持由 kube-apiserver 為客戶端生成 TLS 證書的 TLS Bootstrapping 功能,這樣就不需要為每個客戶端生成證書了;該功能當前僅支持為 kubelet 生成證書;
因為我的master節點和node節點復用,所有在這一步其實已經安裝了kubectl。參考安裝kubectl命令行工具。
以下操作只需要在master節點上執行,生成的*.kubeconfig文件可以直接拷貝到node節點的/etc/kubernetes目錄下
### 創建 TLS Bootstrapping Token
#### Token auth file
Token可以是任意的包涵128 bit的字符串,可以使用安全的隨機數發生器生成。
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
> 后三行是一句,直接復制上面的腳本運行即可。
> **==注意==:在進行后續操作前請檢查 token.csv 文件,確認其中的 ${BOOTSTRAP_TOKEN} 環境變量已經被真實的值替換。**
BOOTSTRAP_TOKEN 將被寫入到 kube-apiserver 使用的 token.csv 文件和 kubelet 使用的 bootstrap.kubeconfig 文件,如果后續重新生成了 BOOTSTRAP_TOKEN,則需要:
1. 更新 token.csv 文件,分發到所有機器 (master 和 node)的 /etc/kubernetes/ 目錄下,分發到node節點上非必需;
1. 重新生成 bootstrap.kubeconfig 文件,分發到所有 node 機器的 /etc/kubernetes/ 目錄下;
1. 重啟 kube-apiserver 和 kubelet 進程;
1. 重新 approve kubelet 的 csr 請求;
cp token.csv /etc/kubernetes/
### 創建 kubelet bootstrapping kubeconfig 文件
cd /etc/kubernetes
export KUBE_APISERVER="https://172.16.200.100:6443"
# 設置集群參數
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/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
- --embed-certs 為 true 時表示將 certificate-authority 證書寫入到生成的 bootstrap.kubeconfig 文件中;
- 設置客戶端認證參數時沒有指定秘鑰和證書,后續由 kube-apiserver 自動生成;
### 創建 kube-proxy kubeconfig 文件
export KUBE_APISERVER="https://172.20.0.100:6443"
# 設置集群參數
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kube-proxy.kubeconfig
# 設置客戶端認證參數
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
# 設置上下文參數
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
# 設置默認上下文
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
- 設置集群參數和客戶端認證參數時 --embed-certs 都為 true,這會將 certificate-authority、client-certificate 和 client-key 指向的證書文件內容寫入到生成的 kube-proxy.kubeconfig 文件中;
- kube-proxy.pem 證書中 CN 為 system:kube-proxy,kube-apiserver 預定義的 RoleBinding cluster-admin 將User system:kube-proxy 與 Role system:node-proxier 綁定,該 Role 授予了調用 kube-apiserver Proxy 相關 API 的權限;
### 分發 kubeconfig 文件
將兩個 kubeconfig 文件分發到所有 Node 機器的 /etc/kubernetes/ 目錄
cp bootstrap.kubeconfig kube-proxy.kubeconfig /etc/kubernetes/
- 第一章 kubernetes 功能介紹
- 第二章 在CentOS上部署kubernetes1.7.6集群
- 第三章 創建TLS證書和秘鑰
- 第四章 安裝kubectl命令行工具
- 第五章 創建kubeconfig 文件
- 第六章 etcd 集群部署
- 第七章 部署k8s-master-v1.7.6節點
- 第八章 部署k8s-v1.7.6 node 節點
- 第九章 kubectl 操作示例
- 第十章 在kubernetes 部署第一個應用
- 第十一章 kubernetes之pod 調度
- 第十二章 K8S服務組件之kube-dns&Dashboard
- 第十三章 Kubernetes中的角色訪問控制機制(RBAC)支持
- 第十四章 部署nginx ingress
- 第十五章 使用Prometheus監控Kubernetes集群和應用
- 第十六章 使用helm 應用部署工具
- 第十七章 kubernetes 從1.7 到1.8升級記錄
- 第十八章 在kubernetes 使用ceph
- 第十九章 基于 Jenkins 的 CI/CD(一)
- 第二十章 基于jenkins的CI/CD(二)
- 第二十一章 基于prometheus自定指標HPA彈性伸縮