一 部署 kubectl
1.1 獲取kubectl
1 [root@master01 ~]# cd /opt/k8s/work 2 [root@master01 work]# wget https://storage.googleapis.com/kubernetes-release/release/v1.18.3/kubernetes-client-linux-amd64.tar.gz 3 [root@master01 work]# tar -xzvf kubernetes-client-linux-amd64.tar.gz
提示:本步驟操作僅需要在master01節點操作。
1.2 分發kubectl
1 [root@master01 ~]# cd /opt/k8s/work 2 [root@master01 work]# source /root/environment.sh 3 [root@master01 work]# for master_ip in ${MASTER_IPS[@]} 4 do 5 echo ">>> ${master_ip}" 6 scp kubernetes/client/bin/kubectl root@${master_ip}:/opt/k8s/bin/ 7 ssh root@${master_ip} "chmod +x /opt/k8s/bin/*" 8 done
提示:本步驟操作僅需要在master01節點操作。
1.3 創建admin證書和密鑰
1 [root@master01 ~]# cd /opt/k8s/work 2 [root@master01 work]# source /root/environment.sh 3 [root@master01 work]# cat > admin-csr.json <<EOF 4 { 5 "CN": "admin", 6 "hosts": [], 7 "key": { 8 "algo": "rsa", 9 "size": 2048 10 }, 11 "names": [ 12 { 13 "C": "CN", 14 "ST": "Shanghai", 15 "L": "Shanghai", 16 "O": "system:masters", 17 "OU": "System" 18 } 19 ] 20 } 21 EOF #創建admin的CA證書請求文件
提示:本步驟操作僅需要在master01節點操作。
解釋:
O 為 system:masters:kube-apiserver 收到該證書后將請求的 Group 設置為 system:masters;
預定義的 ClusterRoleBinding cluster-admin 將 Group system:masters 與 Role cluster-admin 綁定,即該 Role 授予所有 API的權限;
該證書只會被 kubectl 當做 client 證書使用,所以 hosts 字段為空。
1 [root@master01 ~]# cd /opt/k8s/work 2 [root@master01 work]# cfssl gencert -ca=/opt/k8s/work/ca.pem \ 3 -ca-key=/opt/k8s/work/ca-key.pem -config=/opt/k8s/work/ca-config.json \ 4 -profile=kubernetes admin-csr.json | cfssljson -bare admin #生成密鑰和證書
1.4 創建kubeconfig文件
kubectl 默認從 ~/.kube/config 文件讀取 kube-apiserver 地址和認證信息。只需在master節點部署一次,其生成的 kubeconfig 文件是通用的,可以拷貝到需要執行 kubectl 命令的機器,重命名為/.kube/config即可。
1 [root@master01 ~]# cd /opt/k8s/work 2 [root@master01 work]# source /root/environment.sh 3 [root@master01 work]# kubectl config set-cluster kubernetes \ 4 --certificate-authority=/opt/k8s/work/ca.pem \ 5 --embed-certs=true \ 6 --server=${KUBE_APISERVER} \ 7 --kubeconfig=kubectl.kubeconfig # 設置集群參數 8 [root@master01 work]# kubectl config set-credentials admin \ 9 --client-certificate=/opt/k8s/work/admin.pem \ 10 --client-key=/opt/k8s/work/admin-key.pem \ 11 --embed-certs=true \ 12 --kubeconfig=kubectl.kubeconfig # 設置客戶端認證參數 13 [root@master01 work]# kubectl config set-context kubernetes \ 14 --cluster=kubernetes \ 15 --user=admin \ 16 --kubeconfig=kubectl.kubeconfig # 設置上下文參數 17 [root@master01 work]# kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig # 設置默認上下文
提示:本步驟操作僅需要在master01節點操作。
解釋:
--certificate-authority:驗證 kube-apiserver 證書的根證書;
--client-certificate、--client-key:剛生成的 admin 證書和私鑰,連接 kube-apiserver 時使用;
--embed-certs=true:將 ca.pem 和 admin.pem 證書內容嵌入到生成的 kubectl.kubeconfig 文件中(默認寫入的是證書文件路徑,后續需要拷貝 kubeconfig 和該證書文件至到其它機器。)。
1.5 分發kubeconfig
1 [root@master01 ~]# cd /opt/k8s/work 2 [root@master01 work]# source /root/environment.sh 3 [root@master01 work]# for master_ip in ${MASTER_IPS[@]} 4 do 5 echo ">>> ${master_ip}" 6 ssh root@${master_ip} "mkdir -p ~/.kube" 7 scp kubectl.kubeconfig root@${master_ip}:~/.kube/config 8 ssh root@${master_ip} "echo 'export KUBECONFIG=\$HOME/.kube/config' >> ~/.bashrc" 9 ssh root@${master_ip} "echo 'source <(kubectl completion bash)' >> ~/.bashrc" 10 done
提示:本步驟操作僅需要在master01節點操作。