部署k8s ssl集群實踐3:部署kubectl命令工具行
https://github.com/opsnull/follow-me-install-kubernetes-cluster
感謝作者的無私分享。
集群環境已搭建成功跑起來。
文章是部署過程中遇到的錯誤和詳細操作步驟記錄。如有需要對比參考,請按照順序閱讀和測試。
3.1
下載和分發 kubectl 二進制文件
[root@k8s-master kubernetes]# wget https://dl.k8s.io/v1.10.4/kubernetes-client-linux-amd64.tar.gz --2018-08-20 14:24:47--? https://dl.k8s.io/v1.10.4/kubernetes-client-linux-amd64.tar.gz 正在解析主機 dl.k8s.io (dl.k8s.io)... 23.236.58.218 正在連接 dl.k8s.io (dl.k8s.io)|23.236.58.218|:443... 已連接。 已發出 HTTP 請求,正在等待回應... 302 Moved Temporarily 位置:https://storage.googleapis.com/kubernetes-release/release/v1.10.4/kubernetes-client-linux-amd64.tar.gz [跟隨至新的 URL] --2018-08-20 14:24:48--? https://storage.googleapis.com/kubernetes-release/release/v1.10.4/kubernetes-client-linux-amd64.tar.gz 正在解析主機 storage.googleapis.com (storage.googleapis.com)... 216.58.221.144, 2404:6800:4005:808::2010 正在連接 storage.googleapis.com (storage.googleapis.com)|216.58.221.144|:443... 已連接。 已發出 HTTP 請求,正在等待回應... 200 OK 長度:13353257 (13M) [application/x-tar] 正在保存至: “kubernetes-client-linux-amd64.tar.gz” 100%[==============================================================================>] 13,353,257? 10.3MB/s 用時 1.2s?? 2018-08-20 14:24:50 (10.3 MB/s) - 已保存 “kubernetes-client-linux-amd64.tar.gz” [13353257/13353257])
[root@k8s-master kubernetes]# tar -zxvf kubernetes-client-linux-amd64.tar.gz
kubernetes/
kubernetes/client/
kubernetes/client/bin/
kubernetes/client/bin/kubectl
[root@k8s-master kubernetes]#
分發到所有節點的/opt/k8s/bin ?確保有執行權限
[root@k8s-master kubernetes]# cp kubernetes/client/bin/kubectl /opt/k8s/bin/ [root@k8s-master kubernetes]# chmod +x /opt/k8s/bin [root@k8s-master kubernetes]# scp kubernetes/client/bin/kubectl root@k8s-node1:/opt/k8s/bin/ kubectl? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 100%?? 52MB? 82.9MB/s?? 00:00? ? [root@k8s-master kubernetes]# scp kubernetes/client/bin/kubectl root@k8s-node2:/opt/k8s/bin/ kubectl? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 100%?? 52MB? 91.6MB/s?? 00:00? ? [root@k8s-master kubernetes]#
3.2
創建admin證書和私鑰
kubectl 與 apiserver https 安全端口通信,apiserver 對提供的證書進行認證和授權。
kubectl 作為集群的管理工具,需要被授予最高權限。這裏創建具有最高權限的 admin
證書。
創建證書簽名請求
[root@k8s-master admin]# cat admin-csr.json { "CN": "admin", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "SZ", "L": "SZ", "O": "system:masters", "OU": "4Paradigm" } ] } [root@k8s-master admin]#
O 為 system:masters ,kube-apiserver 收到該證書後將請求的 Group 設置為
system:masters;
預定義的 ClusterRoleBinding cluster-admin 將 Group system:masters 與
Role cluster-admin 綁定,該 Role 授予所有 API的權限;
該證書只會被 kubectl 當做 client 證書使用,所以 hosts 字段為空;
生成證書和私鑰:
/root/k8s/kubernetes/kubernetes/key/admin
[root@k8s-master admin]# cfssl gencert -ca=/etc/kubernetes/cert/ca.pem -ca-key=/etc/kubernetes/cert/ca-key.pem -config=/etc/kubernetes/cert/ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
2018/08/20 14:45:10 [INFO] generate received request
2018/08/20 14:45:10 [INFO] received CSR
2018/08/20 14:45:10 [INFO] generating key: rsa-2048
2018/08/20 14:45:10 [INFO] encoded CSR
2018/08/20 14:45:10 [INFO] signed certificate with serial number 428475884414304130599120601246945000507451954346
2018/08/20 14:45:10 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
[root@k8s-master admin]# ls
admin.csr? admin-csr.json? admin-key.pem? admin.pem
創建 kubeconfig 文件
kubeconfig 為 kubectl 的配置文件,包含訪問 apiserver 的所有信息,如 apiserver 地
址、CA 證書和自身使用的證書;
[root@k8s-master admin]# source /opt/k8s/bin/environment.sh
# 設置集群參數
[root@k8s-master admin]# kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/cert/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kubectl.kubeconfig
#設置客戶端認證參數
[root@k8s-master admin]# kubectl config set-credentials admin --client-certificate=admin.pem --client-key=admin-key.pem --embed-certs=true --kubeconfig=kubectl.kubeconfig
#設置上下文參數
[root@k8s-master admin]# kubectl config set-context kubernetes --cluster=kubernetes --user=admin --kubeconfig=kubectl.kubeconfig
#設置默認上下文
[root@k8s-master admin]# kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
Switched to context "kubernetes".
[root@k8s-master admin]#
--certificate-authority :驗證 kube-apiserver 證書的根證書;
--client-certificate 、 --client-key :剛生成的 admin 證書和私鑰,連
接 kube-apiserver 時使用;
--embed-certs=true :將 ca.pem 和 admin.pem 證書內容嵌入到生成的
kubectl.kubeconfig 文件中(不加時,寫入的是證書文件路徑);
分發kubeconfig文件
保存到用戶的 ~/.kube/config 文件
[root@k8s-master admin]# ls
admin.csr? admin-csr.json? admin-key.pem? admin.pem? kubectl.kubeconfig
[root@k8s-master admin]# cp kubectl.kubeconfig ~/.kube
[root@k8s-master admin]# cd
[root@k8s-master ~]# ls -a
.?? anaconda-ks.cfg? .bash_logout?? .bashrc? .config? environment.sh? .kube? .ssh
..? .bash_history? ? .bash_profile? .cache?? .cshrc?? k8s? ? ? ? ? ?? .pki?? .tcshrc
[root@k8s-master ~]# cd .kube/
[root@k8s-master .kube]# ls
kubectl.kubeconfig
註意名字改好
[root@k8s-master ~]# cd .kube/
[root@k8s-master .kube]# ls
kubectl.kubeconfig
[root@k8s-master .kube]# mv kubectl.kubeconfig config
[root@k8s-master .kube]# ll
總用量 8
-rw------- 1 root root 6212 8月? 20 15:08 config
[root@k8s-master ~]#? scp .kube/config root@k8s-node2:/root/.kube/
config? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 6212? ?? 6.6MB/s?? 00:00? ?
[root@k8s-master ~]#? scp .kube/config root@k8s-node1:/root/.kube/
config ? ? ? ? ?
3.3
註意:
kubectl 默認從 ~/.kube/config 文件讀取 kube-apiserver 地址、證書、用戶名等信息。.kube/config這個名字必須是這個。
如果名字不對或者路徑不對,可能報錯
$ kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?
部署k8s ssl集群實踐3:部署kubectl命令工具行