K8S--可視化界面Kubernetes Dashboard(API Server方式)


一、安裝Kubernetes Dashboard

1、下載yaml文件

  查看K8S版本:kubectl version,我的版本是1.15,那么就可以使用v2.0.0-beta4版本的Kubernetes-dashboard。版本的對應關系:https://github.com/kubernetes/dashboard/releases

  以下命令在Master節點執行

#如果需要進行修改,需要先下載到本地
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
#如果不需要修改的話直接使用,我這里就不需要修改
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml

  查看pod:kubectl get pod --all-namespaces

      

 

 

 2、訪問:https://192.168.124.17:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy

  這里可能會出現以下訪問結果:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Failure",
  "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:anonymous\" cannot get services/proxy in the namespace \"kube-system\"",
  "reason": "Forbidden",
  "details": {
    "name": "https:kubernetes-dashboard:",
    "kind": "services"
  },
  "code": 403
}

  這是因為最新版的k8s默認啟用了RBAC,並為未認證用戶賦予了一個默認的身份:anonymous。對於API Server來說,它是使用證書進行認證的,我們需要先創建一個證書:

    (1)首先找到kubectl命令的配置文件,默認情況下為/etc/kubernetes/admin.conf,我這里已經復制到了$HOME/.kube/config中。

    (2)然后我們使用client-certificate-dataclient-key-data生成一個p12文件,可使用下列命令:

# 生成client-certificate-data
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt

# 生成client-key-data
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key

# 生成p12
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

3、然后將生成的p12文件添加到瀏覽器,然后重新打開瀏覽器,再次訪問。

      

 

 

二、創建、綁定用戶 

  1、創建admin-user賬號,並放在kube-system名稱空間下 

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

    執行創建賬號命令

kubectl create -f admin-user.yaml

  2、綁定角色

  默認情況下,kubeadm創建集群時已經創建了admin角色,我們直接綁定即可:

# admin-user-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

  執行綁定命令:

kubectl create -f  admin-user-role-binding.yaml

  3、獲取Token:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

  

 

 

  4、使用token登錄Kubernetes Dashboard

  

 

 

 說明:

  目前訪問Dashboard有四種方式:NodePort、API Server、kubectl proxy、Ingress,這里只演示了API Server一種,其他的可以參照https://www.cnblogs.com/RainingNight/p/deploying-k8s-dashboard-ui.html,這位博主寫的非常的清楚。

三、碰到的問題(dial tcp 10.244.1.8:8443: i/o timeout)

  在一次搭建kubernetes-dashboard時,導入p12文件后,訪問https://192.168.124.17:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy

   出現了kubernetes-dashboard Error: 'dial tcp 10.244.1.8:8443: i/o timeout'的錯誤。

  原因是由於將 kubernetes-dashboard安裝在了node節點

kubectl get pod --all-namespaces -o wide

 

      

 

 

   但是當時我確實是在master節點上執行的操作,那為什么會被安裝到了node節點呢,由於kubernetes-dashboard是K8S的插件,因此其默認會安裝到node節點,如果沒有將master設置為node,那么雖然在master上執行安裝命令,但是仍然會被安裝到其他的node節點上。

  對於這個問題,解決方案:要么將master設置為node節點,要么在沒有node加入的時候安裝kubernetes-dashboard,至於第一種方案,其會調整K8S集群中master的類型,這個最好還是別動了,那么就是采用第二種方案,但是我這里已經有了node節點,刪除再加入,未免影響太大了,其實有一個更好的方法,就是將所有的node置為不可用狀態(污點node),然后重新安裝kubernetes-dashboard即可。

## 刪除現有的dashboard
kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

## 將node服務器設置為污點,這樣dashboard就不會部署過去了,如果有更多參數,自行調整
kubectl taint nodes k8s-node1 note=void-dashboard:NoSchedule

## 重新部署dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

## 取消node節點的污點設置
kubectl taint nodes k8s-node1 note=void-dashboard:NoSchedule-

  重新查看pod部署的情況

      

 

   可以看到,已經部署到了master節點,然后關閉瀏覽器,重新打卡,完美解決。

    

 


免責聲明!

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



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