1. 程式人生 > >部署kubernates dashboard

部署kubernates dashboard

參考官方文件:

https://github.com/kubernetes/dashboard

直接部署官方預設的dashboard:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

官方預設的replica是1,可以下載官方的yaml檔案,按需修改後部署

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

部署成功後輸入命令檢視Pod可以看到dashboard已經部署成功

$ kubectl -n kube-system get pods

輸入命令檢視Service,會發現dashboard的IP地址是一個自動分配的Cluster IP地址

$ kubectl -n kube-system get svc

在不配置任何網路策略的情況下,我們可以啟動kube-proxy,用localhost進行訪問。也可以修改service增加node port後通過node的IP地址進行訪問。

在這裡我修改了type為nodePort和指定了port

$ kubectl -n kube-system edit svc kubernetes-dashboard
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  creationTimestamp: "2019-06-25T08:32:58Z"
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
  resourceVersion: "131106"
  selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard
  uid: d65ea8d9-9723-11e9-beba-08002777dcd3
spec:
  clusterIP: 10.105.212.27
  ports:
  - nodePort: 31195
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

修改後儲存,可以看到service的TYPE已經變成NodePort,埠對映也完成了。

使用dashboard所在node的IP地址加上對映到Node的埠號可以直接訪問Dashboard

https://192.168.7.87:31195/

身份認證

登陸 dashboard 的時候支援 kubeconfig 和 token 兩種認證方式,kubeconfig 中也依賴 token 欄位,所以生成 token 這一步是必不可少的。

下文分兩塊來講解兩種登陸認證方式:

  • 為 brand 名稱空間下的 brand 使用者建立 kubeconfig 檔案
  • 為叢集的管理員(擁有所有名稱空間的 amdin 許可權)建立 token

使用 kubeconfig

登陸dashboard的時候可以指定kubeconfig檔案來認證使用者許可權,如何生成登陸dashboard時指定的kubeconfig檔案請參考建立使用者認證授權的kubeconfig檔案

注意我們生成的 kubeconfig 檔案中沒有 token 欄位,需要手動新增該欄位。

比如我們為 brand namespace 下的 brand 使用者生成了名為 brand.kubeconfig 的 kubeconfig 檔案,還要再該檔案中追加一行 token 的配置(如何生成 token 將在下文介紹),如下所示:

kubeconfig檔案

這樣就可以使用brand.kubeconfig檔案來登陸dashboard了,而且只能訪問和操作brand名稱空間下的物件。

生成 token

需要建立一個 admin 使用者並授予 admin 角色繫結,使用下面的 yaml 檔案建立 admin 使用者並賦予他管理員許可權,然後可以通過 token 登陸 dashbaord,該檔案見 dashboard-admin.yaml。這種認證方式本質上是通過 Service Account 的身份認證加上 Bearer token 請求 API server 的方式實現,參考 Kubernetes 中的認證

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: admin
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile

執行命令

$ kubectl create -f dashboard-admin.yaml

執行命令

$ kubectl -n kube-system get secret|grep admin-token

執行命令

$ kubectl -n kube-system describe secret admin-token-78bfl

拷貝token在登入頁面進行登入,可以以管理員身份進入dashboard

也可以用命令直接提取token

$ kubectl -n kube-system get secret admin-token-78bfl -o jsonpath={.data.token}|base64 -d