k8s的webUI管理界面可以更好更直觀更便捷的讓我們去管理我們的k8s集群。
我們知道,由於某些原因我們無法直接拉取dashboard的鏡像,但是國內有些人已經將鏡像下載到dockerhub中可以給我們使用
- 在GitHub官網中獲取dashboard的資源清單:https://github.com/kubernetes/dashboard
1 wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
- 使用docker獲取dashboard的鏡像倉庫:
- 修改dashboard的資源清單的鏡像倉庫路徑:
1 vim kubernetes-dashboard.yaml
- 應用此資源清單:
1 kubectl apply -f kubernetes-dashboard.yaml
此時會創建很多資源,其中service是訪問時的代理,訪問service就可以訪問到dashboard的webUI,但是默認生成的service訪問類型是ClusterIP,所以集群外部不能訪問到。
根據官方文檔,目前訪問Dashboard有四種方式:NodePort、API Server、kubectl proxy、Ingress
為了方便,我們使用NodePort
- 修改service的訪問方式為NodePort:
1 kubectl edit svc kubernetes-dashboard -n kube-system
- 訪問
此時就可以用瀏覽器訪問集群中任意一節點的30443端口,注意使用https://方式訪問。但是會有警告,點擊高級接受風險繼續
可以看到有兩種登錄方式:kubeconfig文件、token令牌。
要想登錄,得先有賬號
k8s集群中,賬號分為兩種:UserAccount(現實中的人)、ServiceAccount(集群內的客戶端)
由於dashboard在集群中是以Pod方式運行提供的服務,所以要使用ServiceAccount訪問,簡稱sa
然而並不是隨隨便便找個賬號就能登錄,我們對賬號還要設置訪問控制,哪些資源允許什么樣的操作。
這就用到我前面寫的RBAC(基於角色的訪問控制)這里就不再細講,想要了解點擊這里。
- 使用Token登錄(相對於以kubeconfig文件登錄要簡單)
- 首先創建一個sa
1 kubectl create serviceaccount mysa(SA_NAME) -n default(NAMESPACE_NAME)
-
- 創建rolebinding\clusterrolebinding,然后將此sa綁定至集群中存在的或自定義的role或clusterrole,綁定哪個role\clusterrole,sa就會具有此role\clusterrole對應的權限
1 kubectl create clusterrolebinding dashboard-admin(NAME) --clusterrole=admin(CLUSTERROLE_NAME) --serviceaccount=default:mysa(NAMESPACE_NAME:SA_NAME)
-
- 查看sa的secret,里面就有token
-
- 復制token,登錄dashboard
- kubeconfig文件方式登錄。(設置相對直接token登錄復雜些,不過登錄所需就是一文件,有這個文件你可以在其他電腦上登錄,所以各有有點。)
1 ##將secret中的token使用base64方式進行解碼,然后使用變量引用 2 DASH_TOCKEN=$(kubectl get secret mysa-token-wjd28 -o jsonpath={.data.token}|base64 -d) 3 4 ##創建一個集群,將信息輸出到/root/dashbord-admin.conf 5 kubectl config set-cluster dashboard-UI --server=192.168.1.100:6443 --kubeconfig=/root/dashbord-admin.conf 6 7 ##創建一個集群用戶,並引用sa的token,並輸出到/root/dashbord-admin.conf 8 kubectl config set-credentials dashboard-admin --token=$DASH_TOCKEN --kubeconfig=/root/dashbord-admin.conf 9 10 ##創建一個上下文,指定集群名、集群用戶名,並輸出到/root/dashbord-admin.conf 11 kubectl config set-context dashboard-admin@dashboard-UI --cluster=dashboard-UI --user=dashboard-admin --kubeconfig=/root/dashbord-admin.conf 12 13 ##設置集群中當前使用的用戶,並輸出到/root/dashbord-admin.conf 14 kubectl config use-context dashboard-admin@dashboard-UI --kubeconfig=/root/dashbord-admin.conf
生成的dashbord-admin.conf即可用於登錄dashboard
可以將此文件復制到其他主機,這樣其他主機也可以登錄
不過,不管是剛用到token登錄或kubeconfig文件登錄,設置的權限是整個集群中最高的管理員的權限,切記當心泄露
生產環境中,最好將sa綁定到自定義權限的role或者cluster,可以降低role和cluster的權限,來保證集群安全
希望對大家有所幫助,謝謝