1. 程式人生 > >kubernetes系列(十七) - 通過helm安裝dashboard詳細教程

kubernetes系列(十七) - 通過helm安裝dashboard詳細教程

- [1. 前提條件](#head1) - [2. 配置https證書為secret](#head2) - [3. dashboard安裝](#head3) - [3.1 helm拉取dashboard的chart](#head4) - [3.2 配置dashboard的chart包配置](#head5) - [3.3 helm執行建立dashboard的release](#head6) - [3.4 通過域名訪問dashboard](#head7) - [4. 檢視token並使用token登陸](#head8) - [5. 給dashboard的serviceaccont授權](#head9) 這篇博文介紹的是安裝`Dashboard V2.0.3`, 並將其對映到具體的域名上。先上一個成果圖,如果安裝過程中有遇到什麼問題,可以評論聯絡我 ![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggt6qd6yg9j31h20rt43t.jpg) ## 1. 前提條件 本次安裝基於`Helm`的`chart`包安裝的,且向外暴露服務的方式為Ingress,所以有以下前提: - 已安裝好Helm > 如未安裝helm,可以參照:[kubernetes系列(十六) - Helm安裝和入門](https://www.cnblogs.com/baoshu/p/13296659.html) - 叢集已經以`DaemonSet`方式安裝好了`Ingress-nginx` > 如未安裝,安裝教程可以參照下篇文章的**第四小節部分**:[kubernetes系列(十) - 通過Ingress實現七層代理](https://www.cnblogs.com/baoshu/p/13255909.html#head16) - 一個已經備案過的域名,和具體的域名配套的https證書 > 因為使用的是ingress,所以必須要域名,且dashboard需要https才能外網訪問,證書可以在阿里雲之類的購買一年期的免費贈書 ---- ## 2. 配置https證書為secret 1. 上傳域名的**nginx證書**到伺服器上 ```shell # 具體上傳過程不贅述 # 這裡假設證書aaa.key和bbb.crt已經上傳至路徑/usr/local/cert cd /usr/local/cert # 建立secret到kube-system名稱空間下 # 之後我們的dashboard也會建立在這個名稱空間下,需要依賴這個,所以提前建立 kubectl creat secret tls dashboard-tls --key aaa.key --cert bbb.crt -n kube-system ``` ---- ## 3. dashboard安裝 ### 3.1 helm拉取dashboard的chart ```shell # 新增helmhub上的dashboard官方repo倉庫 helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/ # 檢視新增完成後的倉庫 helm repo list # 查詢dashboard的chart helm search repo kubernetes-dashboard # 新建資料夾用於儲存chart mkdir dashboard-chart && cd dashboard-chart # 拉取chart helm pull kubernetes-dashboard/kubernetes-dashboard # 此時會有一個壓縮包,解壓它 tar -zxvf kubernetes-dashboard-2.3.0.tgz # 進入到解壓後的資料夾 cd kubernetes-dashboard ``` ![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggt705mc3kj30nz0ln7g9.jpg) ### 3.2 配置dashboard的chart包配置 **注意**:以下建立的`new-values.yaml`是基於`values.yaml`修改的,即意味著如果需要跟自定義的配置,可以自己參照`values.yaml`修改配置檔案 1. 新建一個new-values.yaml,內容如下 ==注意==:以下的host需要換成自己的域名,且secretname需要跟剛剛建立的secret對應起來 ``` image: repository: kubernetesui/dashboard tag: v2.0.3 pullPolicy: IfNotPresent pullSecrets: [] replicaCount: 1 annotations: {} labels: {} extraEnv: [] podAnnotations: seccomp.security.alpha.kubernetes.io/pod: 'runtime/default' nodeSelector: {} tolerations: [] affinity: {} resources: requests: cpu: 100m memory: 200Mi limits: cpu: 2 memory: 200Mi protocolHttp: false service: type: ClusterIP externalPort: 443 annotations: {} labels: {} ingress: enabled: true annotations: nginx.ingress.kubernetes.io/secure-backends: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" paths: - / customPaths: [] hosts: - xxx.xxx.com # 你的域名 tls: # 注意這個名字要跟前面新建的secret對上 - secretName: dashboard-tls hosts: - xxx.xxx.com # 你的域名 metricsScraper: enabled: false image: repository: kubernetesui/metrics-scraper tag: v1.0.4 resources: {} containerSecurityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsUser: 1001 runAsGroup: 2001 metrics-server: enabled: false rbac: create: true clusterRoleMetrics: true clusterReadOnlyRole: false serviceAccount: create: true name: livenessProbe: initialDelaySeconds: 30 timeoutSeconds: 30 podDisruptionBudget: enabled: false minAvailable: maxUnavailable: containerSecurityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsUser: 1001 runAsGroup: 2001 networkPolicy: enabled: false ``` ### 3.3 helm執行建立dashboard的release ``` # 執行路徑在new-values.yaml目錄 helm install -f new-values.yaml --namespace kube-system kubernetes-dashboard . ``` ### 3.4 通過域名訪問dashboard **注意**:雲服務商的域名解析處,需要將域名通過A記錄解析到某個node節點上 然後訪問剛剛配置檔案配置的域名應該能夠訪問到如下介面 ![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggt7smpn6ej310f0hhq4a.jpg) ---- ## 4. 檢視token並使用token登陸 這裡我們需要檢視token 1. 檢視內容含有token的secret ```shell [root@k8s-master kubernetes-dashboard]# kubectl get secret -n kube-system | grep kubernetes-dashboard-token kubernetes-dashboard-token-vgp9w kubernetes.io/service-account-token 3 22h ``` 2. describe一下獲取token值 ``` kubectl describe secret kubernetes-dashboard-token-vgp9w -n kube-system ``` 3. 複製這一串token ![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggt7wa38ebj31bk08044j.jpg) 4. 根據如下的登陸 ![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggt7x45jvoj30z90hc3zy.jpg) 5. 登陸成功 ---- ## 5. 給dashboard的serviceaccont授權 此時我們剛進去介面,發現什麼資源都顯示不了,是因為dashboard預設的`serviceaccount`並沒有許可權,所以我們需要給予它授權。 - **注意**:我這裡直接賦予的是admin許可權,如果需要更加細顆粒度的授權,請參照官方的說明 > https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/README.md 1. 建立`dashboard-admin.yaml`,內容為以下 ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system ``` 2. 應用資原始檔`dashboard-admin.yaml` ``` kubectl apply -f dashboard-admin.yaml ``` 3. 授權成功,可以通過dashboard檢視到資源 ![](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggt85d751cj31h00s2dlk.jpg)