1.建立kubectl 證書
cat > /etc/ssl/kubectl/admin-csr.json <<EOF
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ChengDu",
"L": "ChengDu",
"O": "system:masters",
"OU": "dessler"
}
]
}
EOF
複製程式碼
cfssl gencert -ca=/etc/ssl/ca.pem \
-ca-key=/etc/ssl/ca-key.pem \
-config=//etc/ssl/ca-config.json \
-profile=kubernetes admin-csr.json | cfssljson -bare admin
複製程式碼
ls
admin.csr admin-csr.json admin-key.pem admin.pem
複製程式碼
- 說明:
- 為system:masters,kube-apiserver 收到該證書後將請求的 Group 設定為 system:masters
- 預定義的 ClusterRoleBinding cluster-admin 將 Group system:masters 與 Role cluster-admin 繫結,該 Role 授予所有 API的許可權
- 該證書只會被 kubectl 當做 client 證書使用,所以 hosts 欄位為空
2.分發kubctl 二進位制檔案及證書
3.建立kubectl.kubeconfig配置檔案
kubectl config set-cluster kubernetes \
> --certificate-authority=/etc/ssl/ca.pem \
> --embed-certs=true \
> --server=https://192.168.1.43:8443 \
> --kubeconfig=kubectl.kubeconfig
Cluster "kubernetes" set.
複製程式碼
kubectl config set-credentials admin \
> --client-certificate=/etc/ssl/kubectl/admin.pem \
> --client-key=/etc/ssl/kubectl/admin-key.pem \
> --embed-certs=true \
> --kubeconfig=kubectl.kubeconfig
User "admin" set.
複製程式碼
kubectl config set-context kubernetes \
> --cluster=kubernetes \
> --user=admin \
> --kubeconfig=kubectl.kubeconfig
Context "kubernetes" created.
複製程式碼
kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
Switched to context "kubernetes".
複製程式碼
- 說明:
- --certificate-authority:驗證 kube-apiserver 證書的根證書
- --client-certificate、--client-key:剛生成的admin 證書和私鑰,連線 kube-apiserver 時使用
- --embed-certs=true:將pem 和 admin.pem 證書內容嵌入到生成的 kubectl.kubeconfig 檔案中(不加時,寫入的是證書檔案路徑)
4.將kubectl.kubeconfig 分發到/root/.kube/config檔案
其他服務如果需要使用kubectl命令,只要有二進位制檔案和這個配置檔案,就可以直接連線kubernetes叢集