kubernetes系列(十七) - 通過helm安裝dashboard詳細教程
阿新 • • 發佈:2020-07-17
- [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)