前言
到這里,ETCD集群、kube-nginx + keepalived、kube-apiserver都已經安裝完成。
此時可以測試一下前面安裝的是否正常
創建admin證書和私鑰
kubectl與apiserver https通信,apiserver對提供的證書進行認證和授權。kubectl作為集群的管理工具,需要被授予最高權限,這里創建具有最高權限的admin證書
創建證書簽名請求
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": "4Paradigm"
}
]
}
EOF
###################
● O 為system:masters,kube-apiserver收到該證書后將請求的Group設置為system:masters
● 預定的ClusterRoleBinding cluster-admin將Group system:masters與Role cluster-admin綁定,該Role授予API的權限
● 該證書只有被kubectl當做client證書使用,所以hosts字段為空
生成證書和私鑰
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文件
kubeconfig為kubectl的配置文件,包含訪問apiserver的所有信息,如apiserver地址、CA證書和自身使用的證書
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=${KUBE_APISERVER} \
--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、--client-key 剛生成的admin證書和私鑰,連接kube-apiserver時使用
--embed-certs=true 將ca.pem和admin.pem證書嵌入到生成的kubectl.kubeconfig文件中 (如果不加入,寫入的是證書文件路徑,后續拷貝kubeconfig到其它機器時,還需要單獨拷貝證書)
分發kubeconfig文件
分發到所有使用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
#保存文件名為~/.kube/config
檢查集群信息
[root@node01 work]# kubectl cluster-info
Kubernetes master is running at https://vip.k8s.com:8443
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@node01 work]# kubectl get all --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 98
[root@node01 work]# kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused
controller-manager Unhealthy Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused
etcd-0 Healthy {"health":"true"}
etcd-2 Healthy {"health":"true"}
etcd-1 Healthy {"health":"true"}
如果提示有報錯,請檢查~/.kube/config以及配置證書是否有問題
授權kube-apiserver訪問kubelet API的權限
在執行kubectl命令時,apiserver會將請求轉發到kubelet的https端口。這里定義的RBAC規則,授權apiserver使用的證書(kubernetes.pem)用戶名(CN:kubernetes)訪問kubelet API的權限
kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user kubernetes
安裝到這里,上面的操作顯示結果相同的話,表示之前的操作都正常,可以繼續往下
如果不一樣,仔細對照每一步,如果還不行,可以聯系博主。最下方有我的聯系方式。