K8s-部署 kubectl 命令列工具.03
阿新 • • 發佈:2019-01-03
03.部署 kubectl 命令列工具
kubectl 是 kubernetes 叢集的命令列管理工具,本文件介紹安裝和配置它的步驟。
kubectl 預設從 ~/.kube/config
檔案讀取 kube-apiserver 地址、證書、使用者名稱等資訊,如果沒有配置,執行 kubectl 命令時可能會出錯:
$ kubectl get pods The connection to the server localhost:8080 was refused - did you specify the right host or port?
本文件只需要部署一次,生成的 kubeconfig 檔案與機器無關。
下載和解壓:
wget https://dl.k8s.io/v1.10.4/kubernetes-server-linux-amd64.tar.gz tar -xzvf kubernetes-server-linux-amd64.tar.gz
分發到所有使用 kubectl 的節點:
source /opt/k8s/bin/environment.sh for master_ip in ${MASTER_IP[@]} do echo ">>> ${master_ip}" scp kubernetes/client/bin/kubectl [email protected]${master_ip}:/opt/k8s/bin/ ssh [email protected]${master_ip} "chmod +x /opt/k8s/bin/*" done
建立 admin 證書和私鑰
kubectl 與 apiserver https 安全埠通訊,apiserver 對提供的證書進行認證和授權。
kubectl 作為叢集的管理工具,需要被授予最高許可權。這裡建立具有最高許可權的 admin 證書。
建立證書籤名請求:
cat > admin-csr.json <<EOF { "CN": "admin", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "system:masters", "OU": "4Paradigm" } ] } EOF
- O 為
system:masters
,kube-apiserver 收到該證書後將請求的 Group 設定為 system:masters; - 預定義的 ClusterRoleBinding
cluster-admin
將 Groupsystem:masters
與 Rolecluster-admin
繫結,該 Role 授予所有 API的許可權; - 該證書只會被 kubectl 當做 client 證書使用,所以 hosts 欄位為空;
生成證書和私鑰:
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 ls admin*
建立 kubeconfig 檔案
kubeconfig 為 kubectl 的配置檔案,包含訪問 apiserver 的所有資訊,如 apiserver 地址、CA 證書和自身使用的證書;
source /opt/k8s/bin/environment.sh # 設定叢集引數 kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/cert/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=kubectl.kubeconfig # 設定客戶端認證引數 kubectl config set-credentials admin \ --client-certificate=admin.pem \ --client-key=admin-key.pem \ --embed-certs=true \ --kubeconfig=kubectl.kubeconfig # 設定上下文引數 kubectl config set-context kubernetes \ --cluster=kubernetes \ --user=admin \ --kubeconfig=kubectl.kubeconfig # 設定預設上下文 kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfi
--certificate-authority
:驗證 kube-apiserver 證書的根證書;--client-certificate
、--client-key
:剛生成的admin
證書和私鑰,連線 kube-apiserver 時使用;--embed-certs=true
:將 ca.pem 和 admin.pem 證書內容嵌入到生成的 kubectl.kubeconfig 檔案中(不加時,寫入的是證書檔案路徑);
分發 kubeconfig 檔案
分發到所有使用 kubectl
命令的節點:
source /opt/k8s/bin/environment.sh for master_ip in ${MASTER_IP[@]} do echo ">>> ${master_ip}" ssh [email protected]${master_ip} "mkdir -p ~/.kube" scp kubectl.kubeconfig [email protected]${master_ip}:~/.kube/config ssh [email protected]${master_ip} "mkdir -p ~/.kube" scp kubectl.kubeconfig [email protected]${master_ip}:~/.kube/config done
- 儲存到使用者的
~/.kube/config
檔案;