- 若是沒有特殊指明,全部操做均在 zhaoyixin-k8s-01 節點上執行。
- 本節操做只須要部署一次,生成的 kubeconfig 文件是通用的,能夠拷貝到須要執行 kubectl 命令的機器的
~/.kube/config
位置。
cd /opt/k8s/work wget https://dl.k8s.io/v1.16.6/kubernetes-client-linux-amd64.tar.gz tar -xzvf kubernetes-client-linux-amd64.tar.gz
分發到全部使用 kubectl 工具的節點:node
cd /opt/k8s/work source /opt/k8s/bin/environment.sh for node_ip in ${NODE_IPS[@]} do echo ">>> ${node_ip}" scp kubernetes/client/bin/kubectl root@${node_ip}:/opt/k8s/bin/ ssh root@${node_ip} "chmod +x /opt/k8s/bin/*" done
kubectl 使用 https 協議與 kube-apiserver 進行安全通訊,kube-apiserver 對 kubectl 請求包含的證書進行認證和受權。linux
kubectl 後續用於集羣管理,因此這裏建立具備最高權限的 admin 證書。git
建立證書籤名請求文件:github
cd /opt/k8s/work cat > admin-csr.json <<EOF { "CN": "admin", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "system:masters", "OU": "zhaoyixin" } ] } EOF
O: system:masters
:kube-apiserver 收到使用該證書的客戶端請求後,爲請求添加組(Group)認證標識 system:masters
;cluster-admin
將 Group system:masters
與 Role cluster-admin
綁定,該 Role 授予操做集羣所需的最高權限;hosts
字段爲空。生成證書和私鑰:json
cd /opt/k8s/work cfssl gencert -ca=/opt/k8s/work/ca.pem \ -ca-key=/opt/k8s/work/ca-key.pem \ -config=/opt/k8s/work/ca-config.json \ -profile=kubernetes admin-csr.json | cfssljson -bare admin ls admin*
kubectl 使用 kubeconfig 文件訪問 apiserver,該文件包含 kube-apiserver 的地址和認證信息(CA 證書和客戶端證書):api
cd /opt/k8s/work source /opt/k8s/bin/environment.sh # 設置集羣參數 kubectl config set-cluster kubernetes \ --certificate-authority=/opt/k8s/work/ca.pem \ --embed-certs=true \ --server=https://${NODE_IPS[0]}:6443 \ --kubeconfig=kubectl.kubeconfig # 設置客戶端認證參數 kubectl config set-credentials admin \ --client-certificate=/opt/k8s/work/admin.pem \ --client-key=/opt/k8s/work/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.kubeconfig
--certificate-authority
:驗證 kube-apiserver 證書的根證書;--client-certificate
:剛生成的 admin 證書,與 kube-apiserver https 通訊時使用;--client-key
: 剛生成的 admin 私鑰,與 kube-apiserver https 通訊時使用;--embed-certs=true
: 將 ca.pem
和 admin.pem
證書內容嵌入到生成的 kubectl.kubeconfig 文件中(不然,寫入的是證書文件路徑,後續拷貝 kubeconfig 到其它機器時,還須要單獨拷貝證書文件);server
:指定 kube-apiserver 的地址,這裏指向第一個節點上的服務。分發到全部使用 kubectl 命令的節點:安全
cd /opt/k8s/work source /opt/k8s/bin/environment.sh for node_ip in ${NODE_IPS[@]} do echo ">>> ${node_ip}" ssh root@${node_ip} "mkdir -p ~/.kube" scp kubectl.kubeconfig root@${node_ip}:~/.kube/config done