這篇博文介紹的是安裝Dashboard V2.0.3
, 並將其對映到具體的域名上。先上一個成果圖,如果安裝過程中有遇到什麼問題,可以評論聯絡我
1. 前提條件
本次安裝基於Helm
的chart
包安裝的,且向外暴露服務的方式為Ingress,所以有以下前提:
- 已安裝好Helm
如未安裝helm,可以參照:kubernetes系列(十六) - Helm安裝和入門
- 叢集已經以
DaemonSet
方式安裝好了Ingress-nginx
如未安裝,安裝教程可以參照下篇文章的第四小節部分:kubernetes系列(十) - 通過Ingress實現七層代理
- 一個已經備案過的域名,和具體的域名配套的https證書
因為使用的是ingress,所以必須要域名,且dashboard需要https才能外網訪問,證書可以在阿里雲之類的購買一年期的免費贈書
2. 配置https證書為secret
- 上傳域名的nginx證書到伺服器上
# 具體上傳過程不贅述
# 這裡假設證書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
# 新增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
3.2 配置dashboard的chart包配置
注意:以下建立的new-values.yaml
是基於values.yaml
修改的,即意味著如果需要跟自定義的配置,可以自己參照values.yaml
修改配置檔案
- 新建一個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節點上
然後訪問剛剛配置檔案配置的域名應該能夠訪問到如下介面
4. 檢視token並使用token登陸
這裡我們需要檢視token
- 檢視內容含有token的secret
[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
- describe一下獲取token值
kubectl describe secret kubernetes-dashboard-token-vgp9w -n kube-system
- 複製這一串token
-
根據如下的登陸
-
登陸成功
5. 給dashboard的serviceaccont授權
此時我們剛進去介面,發現什麼資源都顯示不了,是因為dashboard預設的serviceaccount
並沒有許可權,所以我們需要給予它授權。
- 注意:我這裡直接賦予的是admin許可權,如果需要更加細顆粒度的授權,請參照官方的說明
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/README.md
- 建立
dashboard-admin.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
- 應用資原始檔
dashboard-admin.yaml
kubectl apply -f dashboard-admin.yaml
- 授權成功,可以通過dashboard檢視到資源