測試訪問apiserver狀態


前言

到這里,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

安裝到這里,上面的操作顯示結果相同的話,表示之前的操作都正常,可以繼續往下

如果不一樣,仔細對照每一步,如果還不行,可以聯系博主。最下方有我的聯系方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM