Kubernetes dashboard更新升級和用戶許可權認證
原文地址:Kubernetes Dashboard版本升級詳解
我們在kubernetes1.6的時候同時安裝了dashboard插件,該插件也是基於kubernetes1.6版本開發的。如今kubernetes1.8版本業已發布,如何升級dashboard以獲取新版中功能呢?
Dashboard的升級比較簡單,因為它僅僅是一個前端應用,用來展現集群信息和與後端API交互,理論上只需要更新原先dashboard的yaml配置文件中的鏡像就可以了,但是為了使用dashboard1.7版本中的用戶登陸功能,還需要做一些額外的操作。
dashboard的更新日誌請見release note,當前的最新版本為v1.7.1,下面將介紹將dashboard從v1.6.3升級到v1.7.1並開啟用戶登陸認證的詳細步驟。
本文已歸檔到kubernetes-handbook中。
升級步驟
刪除原來的版本
首先刪除原來的dashboard資源:
kubectl delete -f dashboard/ n
將dashboard
目錄下的所有yaml文件中的資源全部刪除,包括Deployment、service和角色綁定等。
部署新版本
我們使用官方的配置文件來安裝,首先下載官方配置:
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml n
修改其中的兩個鏡像地址為我們的私有地址。
- http://gcr.io/google_containers/kubernetes-dashboard-init-amd64:v1.0.1
- http://gcr.io/google_containers/kubernetes-dashboard-amd64:v1.7.1
這個兩個鏡像可以同時從時速雲上獲取:
- http://index.tenxcloud.com/jimmy/kubernetes-dashboard-amd64:v1.7.1
- http://index.tenxcloud.com/jimmy/kubernetes-dashboard-init-amd64:v1.0.1
將service type設置為NodePort
,修改後的yaml文件見kubernetes-dashboard.yaml,然後就可以部署新版本的dashboard了。
kubectl create -f kubernetes-dashboard.yaml n
獲取dashboard的外網訪問埠:
kubectl -n kube-system get svc kubernetes-dashboardnNAME CLUSTER-IP EXTERNAL-IP PORT(S) AGEnkubernetes-dashboard 10.254.177.181 <nodes> 443:32324/TCP 49m n
訪問集群中的任何一個節點,即可打開dashboard登陸頁面,如[https://172.20.0.113:32324/(請使用https訪問),支持使用`kubeconfig`和`token`兩種的認證方式:
選擇本地的kubeconfig
文件以登陸集群,kubeconfig
文件中包括登陸的用戶名、證書和token信息。
登陸之後首先看到的界面是這樣的:
這是因為該用戶沒有對default
命名空間的訪問許可權。
修改URL地址中的namespace
欄位為該用戶有許可權訪問的命名空間如brand:https://172.20.0.113:32324/#!/overview?namespace=brand:
登陸dashboard的時候可以指定kubeconfig
文件來認證用戶許可權,如何生成登陸dashboard時指定的kubeconfig
文件請參考創建用戶認證授權的kubeconfig文件。
另外還需要生成用戶token,例如為brand用戶生成token:
$ head -c 16 /dev/urandom | od -An -t x| tr -d na09bb459d67d876cf1829b4047394a5a n
將該用戶的token追加到kuberentes API啟動參數中指定的token
文件中,我們安裝時指定的是/etc/kubernetes/token.csv
。
a09bb459d67d876cf1829b4047394a5a,brand,10002,"brand" n
注意:此處Namespace和ServiceAccount相同,都是brand
。
重啟API server也載入最新的配置。
然後在上面生成的kubeconfig
文件中追加一行token
的配置,如下所示:
這樣就可以使用brand.kubeconfig
文件來登陸dashboard了,而且只能訪問和操作brand
命名空間下的對象。
admin用戶
以上是對普通用戶登陸驗證,管理員用戶如何登陸dashboard呢?
需要創建一個admin用戶並授予admin角色綁定,使用下面的yaml文件創建admin用戶並賦予他管理員許可權,然後可以通過token登陸dashbaord,該文件見admin-role.yaml。
kind: ClusterRoleBindingnapiVersion: rbac.authorization.k8s.io/v1beta1nmetadata:n name: adminn annotations:n rbac.authorization.kubernetes.io/autoupdate: "true"nroleRef:n kind: ClusterRolen name: cluster-adminn apiGroup: rbac.authorization.k8s.ionsubjects:n- kind: ServiceAccountn name: adminn namespace: kube-systemn---napiVersion: v1nkind: ServiceAccountnmetadata:n name: adminn namespace: kube-systemn labels:n kubernetes.io/cluster-service: "true"n addonmanager.kubernetes.io/mode: Reconcile n
然後執行下面的命令:
kubectl create -f admin-role.yaml n
創建完成後獲取secret和token的值。
# 獲取admin-token的secret名字n$ kubectl -n kube-system get secret|grep admin-tokennadmin-token-nwphb kubernetes.io/service-account-token 3 6mn# 獲取token的值n$ kubectl -n kube-system describe secret admin-token-nwphbnName:ttadmin-token-nwphbnNamespace:tkube-systemnLabels:tt<none>nAnnotations:tkubernetes.io/service-account.name=adminnttkubernetes.io/service-account.uid=f37bd044-bfb3-11e7-87c0-f4e9d49f8ed0nnType:tkubernetes.io/service-account-tokennnDatan====nnamespace:t11 bytesntoken:tt非常長的字元串nca.crt:tt1310 bytes n
在dashboard登錄頁面上使用上面輸出中的那個非常長的字元串作為token登錄,既可以擁有管理員許可權操作整個kubernetes集群中的對象。當然您也可以將這串token加到admin用戶的kubeconfig
文件中,繼續使用kubeconfig
登錄,兩種認證方式任您選擇。
推薦閱讀:
※Azure Managed Kubernetes (AKS) 簡介
※有人在嘗試使用Kubernetes嗎?
※現在做雲計算的出路到底在哪?
※Kubernetes v1.7新特性解析-本地數據卷
※容器編排Kubernetes之kube-dns源碼解讀
TAG:Kubernetes | cloudnative |