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

修改其中的兩個鏡像地址為我們的私有地址。

  • gcr.io/google_container
  • gcr.io/google_container

這個兩個鏡像可以同時從時速雲上獲取:

  • index.tenxcloud.com/jim
  • index.tenxcloud.com/jim

將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:172.20.0.113:32324/#

登陸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 |