六.部署kubectl客戶端工具
1. 下載
[root@kubenode1 ~]# cd /usr/local/src/ [root@kubenode1 src]# wget https://storage.googleapis.com/kubernetes-release/release/v1.9.2/kubernetes-server-linux-amd64.tar.gz [root@kubenode1 src]# tar -zxvf kubernetes-server-linux-amd64.tar.gz # kubectl等所有可執行文件在解壓目錄下server/bin目錄下,另含kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy與kubelet等 [root@kubenode1 src]# mv /usr/local/src/kubernetes/server/bin/ /usr/local/src/kubernetes/ [root@kubenode1 src]# rm -rf /usr/local/src/kubernetes/server/ [root@kubenode1 src]# mv /usr/local/src/kubernetes/ /usr/local/
2. 創建kubectl TLS證書與私鑰
1)創建kubectl證書簽名請求
[root@kubenode1 ~]# cd /etc/kubernetes/admin/ [root@kubenode1 admin]# touch admin-csr.json # kube-apiserver 使用 RBAC 對客戶端(如 kubelet、kube-proxy等)請求進行授權; # kube-apiserver 預定義一部分 RBAC,含Role/ RoleBinding,ClusterRole/ ClusterRoleBinding; # 如 ClusterRoleBinding將 Group system:masters 與 ClusterRole cluster-admin 綁定,而ClusterRole cluster-admin 擁有訪問kube-apiserver 的所有權限,因此”CN”:“admin”這個用戶同樣擁有訪問kube-apiserver 的所有權限,可作為集群超級管理員; # O 指定該證書的 Group 為 system:masters,kubelet 使用該證書訪問 kube-apiserver 時,由於證書被 CA 簽名,所以認證通過,同時由於證書用戶組為經過預授權的 system:masters,所以被授予訪問所有 API 的權限; # hosts 屬性值為空列表,即沒有ip或主機名限制 [root@kubenode1 admin]# vim admin-csr.json { "CN": "admin", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "ChengDu", "L": "ChengDu", "O": "system:masters", "OU": "cloudteam" } ] }
2)生成kubectl證書與私鑰
[root@kubenode1 admin]# cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \ -ca-key=/etc/kubernetes/ssl/ca-key.pem \ -config=/etc/kubernetes/ssl/ca-config.json \ -profile=kubernetes admin-csr.json | cfssljson -bare admin
# 分發admin.pem,admin-key.pem [root@kubenode1 admin]# scp admin.pem admin-key.pem root@172.30.200.22:/etc/kubernetes/admin/ [root@kubenode1 admin]# scp admin.pem admin-key.pem root@172.30.200.23:/etc/kubernetes/admin/
3. 創建kubectl kubeconfig文件
kubectl客戶端工具在TLS通信時,如不配置kubeconfig文件,在訪問api-server時需要指定api-server的地址以及客戶端的證書等信息,比較繁瑣。
# 配置集群參數; # --server:指定api-server,采用ha之后的vip; # cluster名自定義,設定之后需保持一致; # --kubeconfig:指定kubeconfig文件路徑與文件名;如果不設置,默認生成在~/.kube/config文件 [root@kubenode1 admin]# kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/ssl/ca.pem \ --embed-certs=true \ --server=https://172.30.200.10:6443 \ --kubeconfig=admin.conf # 配置客戶端認證參數; # 認證用戶為前文簽名中的“admin”; # 指定對應的公鑰證書/私鑰等 [root@kubenode1 admin]# kubectl config set-credentials admin \ --client-certificate=/etc/kubernetes/admin/admin.pem \ --embed-certs=true \ --client-key=/etc/kubernetes/admin/admin-key.pem \ --kubeconfig=admin.conf # 配置上下文參數 [root@kubenode1 admin]# kubectl config set-context admin@kubernetes \ --cluster=kubernetes \ --user=admin \ --kubeconfig=admin.conf # 配置默認上下文 [root@kubenode1 admin]# kubectl config use-context admin@kubernetes --kubeconfig=admin.conf
# 分發kubeconfig文件到所有運行kubectl的客戶端節點; # kubectl 默認從 ~/.kube/config 配置文件獲取訪問 kube-apiserver 地址、證書、用戶名等信息,分發時,路徑/文件名請注意修改 [root@kubenode1 admin]# cp /etc/kubernetes/admin/admin.conf ~/.kube/config