一 部署 kubectl
1.1 安裝kubectl
1 [root@k8smaster01 ~]# cd /opt/k8s/work
2 [root@k8smaster01 work]# wget https://dl.k8s.io/v1.14.2/kubernetes-client-linux-amd64.tar.gz
3 [root@k8smaster01 work]# tar -zxvf kubernetes-client-linux-amd64.tar.gz
1.2 分發kubectl
1 [root@k8smaster01 ~]# cd /opt/k8s/work
2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
3 [root@k8smaster01 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
1.3 建立admin證書和密鑰
1 [root@k8smaster01 ~]# cd /opt/k8s/work
2 [root@k8smaster01 work]# cat > admin-csr.json <<EOF
3 {
4 "CN": "admin",
5 "hosts": [],
6 "key": {
7 "algo": "rsa",
8 "size": 2048
9 },
10 "names": [
11 {
12 "C": "CN",
13 "ST": "Shanghai",
14 "L": "Shanghai",
15 "O": "system:masters",
16 "OU": "System"
17 }
18 ]
19 }
20 EOF
21 #建立admin的CA證書請求文件
解釋:
O 爲 system:masters:kube-apiserver 收到該證書後將請求的 Group 設置爲 system:masters;
預約義的 ClusterRoleBinding cluster-admin 將 Group system:masters 與 Role cluster-admin 綁定,即該 Role 授予全部 API的權限;
該證書只會被 kubectl 當作 client 證書使用,因此 hosts 字段爲空。
1 [root@k8smaster01 ~]# cd /opt/k8s/work
2 [root@k8smaster01 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 #生成CA密鑰(ca-key.pem)和證書(ca.pem)
1.4 建立kubeconfig文件
kubectl 默認從 ~/.kube/config 文件讀取 kube-apiserver 地址和認證信息。只需在master節點部署一次,其生成的 kubeconfig 文件是通用的,能夠拷貝到須要執行 kubectl 命令的機器,重命名爲/.kube/config便可。
注意:若是沒有特殊指明,本文檔的全部操做均在 k8smaster 節點上執行,而後遠程分發文件和執行命令。
1 [root@k8smaster01 ~]# cd /opt/k8s/work
2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
3 [root@k8smaster01 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@k8smaster01 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@k8smaster01 work]# kubectl config set-context kubernetes \
14 --cluster=kubernetes \
15 --user=admin \
16 --kubeconfig=kubectl.kubeconfig # 設置上下文參數
17 [root@k8smaster01 work]# kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig # 設置默認上下文
解釋:
--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@k8smaster01 ~]# cd /opt/k8s/work
2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
3 [root@k8smaster01 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 done