kubernetes實戰篇之dashboard搭建

系列目錄html

kubernetes dashboard是kubernetes官方提供的web管理界面,經過dashboard能夠很方便地查看集羣的各類資源.以及修改資源編排文件,對集羣進行擴容操做,查看日誌等.功能很是強大.雖然dashboard是官方提供的web管理界面,可是並無默認安裝,須要額外安裝.下面將介紹如何安裝kubernetes dashboard以及如何訪問.node

dashboard安裝

使用以下命令:linux

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml

在windows平臺在瀏覽器直接輸入網址便可下載git

把dashboard的yaml編排文件下載下來到本地,而後進入下載目錄,修改剛下載的kubernetes-dashboard.yaml文件,找到image欄,刪除它的值(不要把鍵刪了,即刪除image:後面的值,保留鍵),而後替換爲:registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.0github

注意,有些網上的教程直接使用kubernetes的官方提供的安裝命令,即kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml這是不科學的,由於這個yml文件使用的鏡像存放在gcr.io上,不少用戶是沒法訪問的,所以須要修改鏡像源.web

修改完yml文件後,咱們在kubernetes-dashboard.yaml所在目錄執行kubectl apply -f kubernetes-dashboard.yaml便可完成安裝.docker

使用proxy方式訪問 dashboard

這裏先介紹一個坑,就是不少互聯網上的教程照般官網上的示例教程,即便用kubectl proxy而後在瀏覽器輸入http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.,這種方式只能用在windows或者mac上的docker.而linux服務器每每是沒有圖形界面的,無法直接經過瀏覽器訪問,機智的你可能立刻會想到,把localhost換成對應主機的ip,便可以在局域網訪問了.然而實際狀況並無這麼美好,你們能夠試一下改爲ip後也是訪問不了的.json

正確的姿式是執行如下命令:bootstrap

kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$'

這時候就能夠經過其它主機訪問dashboard了.(以上地址中localhost改成ip地址)windows

若是沒有登錄,則會默認定向到登錄頁面,可使用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裏,就能夠登錄了.

img

能夠看到已經登錄進來了,可是這個用戶沒有任何權限,甚至連查看權限都沒有.

咱們使用一個叫做replicaset-controller-token-gsfhs的secret裏包含的token來登錄,根據名字能夠大概能夠知道它是用來管理replicaset用的.實際上也確實是的,咱們用它的token登錄來看一下web界面展現的內容

這裏僅展現內容,操做方法與以上同樣,這裏就略過了

img

下面展現的還有replicaset的信息,這裏我就沒有截這麼多.

因爲replicaset包含的是pod的集合,所以這裏展現出的有pod的信息

初次接觸的朋友可能並不知道以上是否是展現的所有信息,由於並無見過完整信息是什麼樣子的,這裏先展現一下一個擁有完整權限的用戶登錄後展現的信息是什麼樣子的.

img

從圖形概覽上能夠看到,展現的信息比以上多.

下面咱們來說解如何配置一個擁有完整權限的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

內容以下

img

而後保存便可.刷新web頁面,登錄界面就會多出一個skip按鈕.

相關文章
相關標籤/搜索