1. 程式人生 > 其它 >4. 二進位制配置 Kubectl 命令列工具

4. 二進位制配置 Kubectl 命令列工具

部署 kubectl 命令列工具

kubectl 預設從 ~/.kube/config 配置檔案獲取訪問 kube-apiserver 地址、證書、使用者名稱等資訊

#一鍵安裝kubectl 需保證yum源中存在資源
$ yum install kubectl

建立 admin 證書

kubectl 與 kube-apiserver 的安全埠通訊,需要為安全通訊提供 TLS 證書和祕鑰。

建立 admin 證書籤名請求

$ cd /root/cfssldir
$ cat admin-csr.json
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
  • 後續 kube-apiserver 使用 RBAC 對客戶端(如 kubeletkube-proxyPod)請求進行授權;
  • kube-apiserver 預定義了一些 RBAC 使用的 RoleBindings,如 cluster-admin 將 Group system:masters 與 Role cluster-admin 繫結,該 Role 授予了呼叫kube-apiserver 所有 API的許可權;
  • O 指定該證書的 Group 為 system:masterskubelet 使用該證書訪問 kube-apiserver 時 ,由於證書被 CA 簽名,所以認證通過,同時由於證書使用者組為經過預授權的 system:masters
    ,所以被授予訪問所有 API 的許可權;
  • hosts 屬性值為空列表;

生成 admin 證書和私鑰,建立kubectl資料夾,用於存放相關檔案

$ cfssl gencert -ca=/root/cfssldir/ca.pem \
  -ca-key=/root/cfssldir/ca-key.pem \
  -config=/root/cfssldir/ca-config.json \
  -profile=kubernetes admin-csr.json | cfssljson -bare admin
$ ls admin*
admin.csr  admin-csr.json  admin-key.pem  admin.pem
$ mkdir -p /root/kubectl
$ sudo cp admin*.pem ca.pem /root/kubectl

建立 kubectl kubeconfig 檔案

$ cd /root/kubectl
$ vim createkubectlcfg.sh
 # 設定叢集引數
 kubectl config set-cluster kubernetes \
  --certificate-authority=/root/kubectl/ca.pem \
  --embed-certs=true \
  --server=https://100.69.218.95:6443
  --kubeconfig=kubectl.kubeconfig
 # 設定客戶端認證引數
 kubectl config set-credentials admin \
  --client-certificate=/root/kubectl/admin.pem \
  --embed-certs=true \
  --client-key=/root/kubectl/admin-key.pem
  --kubeconfig=kubectl.kubeconfig
 # 設定上下文引數
 kubectl config set-context kubernetes \
  --cluster=kubernetes \
  --user=admin
  --kubeconfig=kubectl.kubeconfig
 # 設定預設上下文
 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 檔案中(不加時,寫入的是證書檔案路徑);

生成kubectl.kubeconfig 檔案並替換原始配置

$ chmod +x createkubectlcfg.sh
$ bash createkubectlcfg.sh
$ cp kubectl.kubeconfig ~/.kube/config 

元件驗證

執行如下命令,有正常返回值則配置成功:

kubectl get cs