kubernetes dashboard是kubernetes官方提供的web管理介面,通過dashboard可以很方便地檢視叢集的各種資源.以及修改資源編排檔案,對叢集進行擴容操作,檢視日誌等.功能非常強大.雖然dashboard是官方提供的web管理介面,但是並沒有預設安裝,需要額外安裝.下面將介紹如何安裝kubernetes dashboard以及如何訪問.
dashboard安裝
使用如下命令:
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
在windows平臺在瀏覽器直接輸入網址即可下載
把dashboard的yaml編排檔案下載下來到本地,然後進入下載目錄,修改剛下載的kubernetes-dashboard.yaml
檔案,找到image
欄,刪除它的值(不要把鍵刪了,即刪除image:後面的值,保留鍵),然後替換為:registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.0
注意,有些網上的教程直接使用kubernetes的官方提供的安裝命令,即
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
這是不科學的,因為這個yml檔案使用的映象存放在gcr.io
上,很多使用者是無法訪問的,因此需要修改映象源.
修改完yml檔案後,我們在kubernetes-dashboard.yaml
所在目錄執行kubectl apply -f kubernetes-dashboard.yaml
即可完成安裝.
使用proxy方式訪問 dashboard
這裡先介紹一個坑,就是很多網際網路上的教程照般官網上的示例教程,即使用kubectl proxy
然後在瀏覽器輸入http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.
,這種方式只能用在windows或者mac上的docker.而linux伺服器往往是沒有圖形介面的,沒法直接通過瀏覽器訪問,機智的你可能馬上會想到,把localhost換成對應主機的ip,即可以在區域網訪問了.然而實際情況並沒有這麼美好,大家可以試一下改成ip後也是訪問不了的.
正確的姿勢是執行以下命令:
kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'
這時候就可以通過其它主機訪問dashboard了.(以上地址中localhost改為ip地址)
如果沒有登陸,則會預設定向到登陸頁面,可以使用config或者token方式登陸.我們這裡使用token方式登陸.
一般情況下,登陸的token預設都以secret物件的形式存在kube-system
名稱空間下,我們執行kubectl get secret -n=kube-system
attachdetach-controller-token-zzdbv kubernetes.io/service-account-token 3 37d
bootstrap-signer-token-kn7mv kubernetes.io/service-account-token 3 37d
certificate-controller-token-ck4bp kubernetes.io/service-account-token 3 37d
clusterrole-aggregation-controller-token-gd8sq kubernetes.io/service-account-token 3 37d
coredns-token-tm8nw kubernetes.io/service-account-token 3 37d
cronjob-controller-token-4p64q kubernetes.io/service-account-token 3 37d
daemon-set-controller-token-dhl8h kubernetes.io/service-account-token 3 37d
dashboard-admin-token-sg6bp kubernetes.io/service-account-token 3 23h
default-token-tl6cs kubernetes.io/service-account-token 3 37d
deployment-controller-token-bs8zp kubernetes.io/service-account-token 3 37d
disruption-controller-token-snpvq kubernetes.io/service-account-token 3 37d
endpoint-controller-token-4kgz8 kubernetes.io/service-account-token 3 37d
expand-controller-token-6j57x kubernetes.io/service-account-token 3 37d
flannel-token-f857v kubernetes.io/service-account-token 3 37d
generic-garbage-collector-token-2j6zz kubernetes.io/service-account-token 3 37d
horizontal-pod-autoscaler-token-l7gt5 kubernetes.io/service-account-token 3 37d
job-controller-token-57rtv kubernetes.io/service-account-token 3 37d
kube-proxy-token-bf969 kubernetes.io/service-account-token 3 37d
kubernetes-dashboard Opaque 0 36d
kubernetes-dashboard-key-holder Opaque 2 36d
kubernetes-dashboard-token-8z4v2 kubernetes.io/service-account-token 3 36d
namespace-controller-token-zp4vx kubernetes.io/service-account-token 3 37d
node-controller-token-9kbmx kubernetes.io/service-account-token 3 37d
persistent-volume-binder-token-knjs7 kubernetes.io/service-account-token 3 37d
pod-garbage-collector-token-p7xhk kubernetes.io/service-account-token 3 37d
pv-protection-controller-token-9rsjc kubernetes.io/service-account-token 3 37d
pvc-protection-controller-token-5z68z kubernetes.io/service-account-token 3 37d
replicaset-controller-token-gsfhs kubernetes.io/service-account-token 3 37d
replication-controller-token-pvgrh kubernetes.io/service-account-token 3 37d
resourcequota-controller-token-pmtsh kubernetes.io/service-account-token 3 37d
service-account-controller-token-6zvnc kubernetes.io/service-account-token 3 37d
service-controller-token-dnw2d kubernetes.io/service-account-token 3 37d
statefulset-controller-token-zn6tn kubernetes.io/service-account-token 3 37d
tiller-token-7lpwt kubernetes.io/service-account-token 3 10d
token-cleaner-token-df7n5 kubernetes.io/service-account-token 3 37d
ttl-controller-token-kfsh5 kubernetes.io/service-account-token 3 37d
[centos@k8s-master dashboard]$
這些secrets中的大部分都可以用來訪問dashboard的,只有不同的賬戶許可權不同,很多賬戶被限制不能進行操作.比如我們使用名稱為default-token-tl6cs
的secret包含的token進行登陸
注意,不同的機器上secret的名稱是不一樣的,讀者以自己實際情況為主.
我們使用以下命令來檢視這個secret包含的token的值
[centos@k8s-master dashboard]$ kubectl describe secret -n=kube-system default-token-tl6cs
Name: default-token-tl6cs
Namespace: kube-system
Labels: <none>
Annotations: field.cattle.io/projectId: c-tms4q:p-5bmgn
kubernetes.io/service-account.name: default
kubernetes.io/service-account.uid: f760bf27-44ab-11e9-a5c4-0050568417a2
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXRsNmNzIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJmNzYwYmYyNy00NGFiLTExZTktYTVjNC0wMDUwNTY4NDE3YTIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.yVU85i5naX14TimIlQL0jgTv0oFsEFix7l55Wo09_Q9KbTavL2cjpdu26fHF7OtMCgGAsqxO0R_vOy_vVaPav6AvRWmCBPUEBr_oG_AcJCzdWvmCQkClAGaoZjGNx_qAbuJ3ZD9CG7C_QzjIIqMtjN7DVWjop2vQbByZL2yqkavMchuatr_LYkb_EsaGSKXFAZfDlqt7IO9IqGULl5Ri99fojCD230ji9QRO7x5g75Z6nBT1xf1g7txSAOppEn9S_J90CJ30tt0c9pEAhQ1qisLWpw0sZTBjjq4XcTjAszKe2u3G-ed5XLwEe_0xylbubRhT68XKWKUgBYx8IaqxIA
[centos@k8s-master dashboard]$
我們複製以上token值,然後貼上到登陸頁面的token裡,就可以登陸了.
可以看到已經登陸進來了,但是這個使用者沒有任何許可權,甚至連檢視許可權都沒有.
我們使用一個叫作replicaset-controller-token-gsfhs
的secret裡包含的token來登陸,根據名字可以大概可以知道它是用來管理replicaset用的.實際上也確實是的,我們用它的token登陸來看一下web介面展示的內容
這裡僅展示內容,操作方法與以上一樣,這裡就略過了
下面展示的還有replicaset的資訊,這裡我就沒有截這麼多.
由於replicaset包含的是pod的集合,因此這裡展示出的有pod的資訊
初次接觸的朋友可能並不知道以上是不是展示的全部資訊,因為並沒有見過完整資訊是什麼樣子的,這裡先展示一下一個擁有完整許可權的使用者登陸後展示的資訊是什麼樣子的.
從圖形概覽上可以看到,展示的資訊比以上多.
下面我們來講解如何配置一個擁有完整許可權的token.
- 建立一個dashboard管理使用者
kubectl create serviceaccount dashboard-admin -n kube-system
- 繫結使用者為叢集管理使用者
kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
執行完以上操作後,由於管理使用者的名稱為dashboard-admin
,生成的對應的secret的值則為dashboard-admin-token-隨機字串
我的機器上完整名稱為dashboard-admin-token-sg6bp
[centos@k8s-master dashboard]$ kubectl get secret -n=kube-system |grep dashboard-admin-token
dashboard-admin-token-sg6bp kubernetes.io/service-account-token 3 23h
[centos@k8s-master dashboard]$
可以看到這個secret的完整名稱,或者不使用grep管道,列出所有的secrets,然後從中尋找需要的.
通過上面介紹過的kubectl describe secret
命令檢視token
[centos@k8s-master dashboard]$ kubectl describe -n=kube-system secret dashboard-admin-token-sg6bp
Name: dashboard-admin-token-sg6bp
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: c60d2a65-619e-11e9-a627-0050568417a2
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tc2c2YnAiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYzYwZDJhNjUtNjE5ZS0xMWU5LWE2MjctMDA1MDU2ODQxN2EyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.Ai8UqLHNbwVFf4QRq1p0JdVVy-KuguSTrsJRYmh-TEArH-Bkp0yBWNPpsP8fKL8MRMwlZEyJml-GZEoWvEbInvrgLHtMgA0A6Xbq89fvXqnLQBWsjEnrdIBSHmksLk4v_ldvVrnr6XXK8LGB34TVWxeYvSfv8aF35hXAV_r5-p18t7m9GFxU0_z1Gq1Af9GMA4wotERaWd1hHqNIcrDF8UpgUw2952nIu_VxGSV6eCagPxlpjbyAPrcEjSBK7O7QACtKXnG0bW8MqNaNYiLksYpvtJS7f0GlTeTpDZoj--5gJqAcNanCy7eQU8LuF-fiUaZIfXe0ZaWH0M1mjcAskA
[centos@k8s-master dashboard]$
我們把以上token複製到登陸頁面的token欄裡,就可以登陸了.登陸以後就可以看到如上面最後展示的有完整資訊的介面.
使用kubeconfig檔案訪問
這裡只記錄下命令,不做詳細介紹,在dashboard 1.10.1裡嘗試了數次以及按照官網設定--authentication-mode=config
也不行,這裡就不再做詳細介紹了.
DASH_TOCKEN=$(kubectl get secret -n kube-system dashboard-admin-token-sg6bp -o jsonpath={.data.token}|base64 -d)
kubectl config set-cluster kubernetes --server=192.168.124.59:6443 --kubeconfig=/root/dashbord-admin.conf
kubectl config set-credentials dashboard-admin --token=$DASH_TOCKEN --kubeconfig=/root/dashbord-admin.conf
kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/root/dashbord-admin.conf
kubectl config user-context dashboard-admin@kubernets --kubeconfig=/root/dashbord-admin.conf
生成的dashbord-admin.conf即可用於登入dashboard
開啟跳過
登陸
根據使用的版本不同,可能有的版本包含skip
按鈕,有的則不包含,在1.10.1裡面預設不再顯然skip按鈕,其實dashboard安裝有很多坑,如果有讀者按照以上設定仍然不能正常成功登陸,但是仍然想要體驗dashboard,可以開啟預設關閉的skip
按鈕,這樣就可以進入到dashboard管理介面了.
注意,生產環境強烈不建議這樣做.
執行命令
kubectl edit deploy -n=kube-system kubernetes-dashboard
在containers下面的args欄裡輸入
- --enable-skip-login
內容如下
然後儲存即可.重新整理web頁面,登陸介面就會多出一個skip按鈕.