【k8s部署】3. 安裝和配置 kubectl

  1. 若是沒有特殊指明,全部操做均在 zhaoyixin-k8s-01 節點上執行。
  2. 本節操做只須要部署一次,生成的 kubeconfig 文件是通用的,能夠拷貝到須要執行 kubectl 命令的機器的 ~/.kube/config 位置。

下載 kubectl 二進制文件

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

建立 admin 證書和私鑰

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
  • 預約義的 ClusterRoleBinding cluster-admin 將 Group system:masters 與 Role cluster-admin 綁定,該 Role 授予操做集羣所需的最高權限;
  • 該證書只會被 kubectl 當作 client 證書使用,因此 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*

建立 kubeconfig 文件

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.pemadmin.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

參考

opsnull/follow-me-install-kubernetes-clusterssh

相關文章
相關標籤/搜索