參考文檔:html
- Github介紹:https://github.com/kubernetes/dashboard
-
Github yaml文件: https://github.com/kubernetes/dashboard/blob/master/src/deploy/recommended/kubernetes-dashboard.yaml
或者(各服務模塊獨立保存):https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboardnode
- 訪問dashboard:https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above
- 訪問dashboard的問題(基於1.6.x版本):https://github.com/opsnull/follow-me-install-kubernetes-cluster/issues/5
Kubernetes-dashboard是kubernetes的ui網頁管理工具,可提供部署應用,資源對象管理,容器日誌查詢,系統監控等經常使用的集羣功能。git
一.環境
1. 基礎環境
組件github |
版本docker |
Remarkvim |
kubernetesapi |
v1.9.2瀏覽器 |
|
kubernetes-dashboard安全 |
v1.8.3app |
二.部署Kubernetes-dashboard
1. 準備images
kubernetes部署服務時,爲避免部署時發生pull鏡像超時的問題,建議提早將相關鏡像pull到相關全部節點(實驗),或搭建本地鏡像系統。
- 基礎環境已作了鏡像加速,可參考:http://www.cnblogs.com/netonline/p/7420188.html
- 須要從gcr.io pull的鏡像,已利用Docker Hub的"Create Auto-Build GitHub"功能(Docker Hub利用GitHub上的Dockerfile文件build鏡像),在我的的Docker Hub build成功,可直接pull到本地使用。
# kubernetes-dashboard [root@kubenode1 ~]# docker pull netonline/kubernetes-dashboard-amd64:v1.8.3
2. 下載kubernetes-dashboard相關yaml範本
# https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard # 也能夠將多種服務資源置於1個yaml文件 [root@kubenode1 ~]# mkdir -p /usr/local/src/yaml/dashboard [root@kubenode1 ~]# cd /usr/local/src/yaml/dashboard # ConfigMap [root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-configmap.yaml # Secret [root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-secret.yaml # RBAC [root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-rbac.yaml # dashboard-controller [root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-controller.yaml # Service [root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-service.yaml 本實驗使用yaml文件(修改版):https://github.com/Netonline2016/kubernetes/tree/master/addons/dashboard
3. dashboard-configmap.yaml
暫不修改,針對這次驗證,dashboard-controller也未使用到configmap。
4. dashboard-rbac.yaml
因api-server作了雙向數字證書認證,而dashboard的展現與操做都是經過調用api-server的接口實現的,因此須要爲dashboard受權,採用rbac受權模式。
# 默認dashboard-rbac.yaml定義了1個name爲」kubernetes-dashboard-minimal」的Role;並作了name爲」kubernetes-dashboard-minimal」的RoleBinding,向name爲」kubernetes-dashboard」的ServiceAccount受權; # 但默認的dashboard-rbac.yaml定義的Role權限過小,不太方便驗證; # 從新定義rbac,只須要定義新的ClusterRoleBinding: kubernetes-dashboard,將kubernetes自身的具備所有權限的ClusterRole: cluster-admin賦予ClusterRoleBinding;此受權方式在生產環境慎用; # 注意紅色加粗字體 [root@kubenode1 ~]# cd /usr/local/src/yaml/dashboard/ [root@kubenode1 dashboard]# vim dashboard-rbac.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard namespace: kube-system labels: k8s-app: kubernetes-dashboard addonmanager.kubernetes.io/mode: Reconcile roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system
5. dashboard-secret.yaml
kubernetes 1.8.x 與1.9.x版本中,dashboard服務默認啓用https端口,而非1.6.x版本中默認的http 9090端口,須要secret資源調用相關證書。
dashboard-secret.yaml不作修改。
6. dashboard-controller.yaml
# dashboard-controller.yaml定義了ServiceAccount資源(受權)與Deployment(服務Pod); # 修改第33行默認使用的dashboard鏡像 dashboard-controller.yaml [root@kubenode1 dashboard]# sed -i 's|k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3|netonline/kubernetes-dashboard-amd64:v1.8.3|g' dashboard-controller.yaml
7. dashboard-service.yaml
# dashboard-service.yaml定義服務,紅色加粗字體爲修改或新增部分; # 定義」NodePort」 type,爲驗證經過控制節點直接訪問dashboard(生產環境中建議不使用 方式),」nodePort: 18443」定義具體的端口,不設置則在服務端口範圍中隨機產生 [root@kubenode1 dashboard]# vim dashboard-service.yaml apiVersion: v1 kind: Service metadata: name: kubernetes-dashboard namespace: kube-system labels: k8s-app: kubernetes-dashboard kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile spec: selector: k8s-app: kubernetes-dashboard type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 18443
三.驗證Kubernetes-dashboard
1. 啓動dashboard
# 啓動rbac,secret,controller,service4個yaml文件定義的服務便可; # 或者kubectl create -f . [root@kubenode1 ~]# cd /usr/local/src/yaml/dashboard/ [root@kubenode1 dashboard]# kubectl create -f dashboard-rbac.yaml [root@kubenode1 dashboard]# kubectl create -f dashboard-secret.yaml [root@kubenode1 dashboard]# kubectl create -f dashboard-controller.yaml [root@kubenode1 dashboard]# kubectl create -f dashboard-service.yaml
2. 查看相關服務
# 查看service,已按定義的端口作了nodePort [root@kubenode1 dashboard]# kubectl get svc -n kube-system
# 查看deployment與pod服務 [root@kubenode1 dashboard]# kubectl get deployment -n kube-system [root@kubenode1 dashboard]# kubectl get pod -n kube-system
3. 經過kube-apiserver訪問dashboard
訪問dashboard有3種方式:
- 經過kube-apiserver訪問dashboar,;
- 經過kubectl proxy訪問dashboard;
- 經過nodePort訪問dashboard,建議在實驗環境中使用。
參考:https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above
1)生成kube-apiserver的訪問證書
# 因kube-apiserver啓用了雙向認證,而本地瀏覽器訪問kube-apiserver時使用匿名證書(在沒有導入相關證書時),致使受權失敗而不能訪問; # 客戶端工具kubectl訪問kube-apiserver的證書以前已經生成,這裏只須要轉換爲瀏覽器客戶端可識別的證書便可; # 轉換時輸入密碼可留空,不然導入時須要輸入密碼 [root@kubenode1 ~]# cd /etc/kubernetes/admin/ [root@kubenode1 admin]# openssl pkcs12 -export -in admin.pem -out admin-dashboard.p12 -inkey admin-key.pem
2)導入kube-apiserver的訪問證書
以firefox瀏覽器爲例導入證書,密碼輸入轉換時使用的密碼,這裏留空。
3)經過kube-apiserver訪問dashboard
# 獲取dashboard的kube-apiserver訪問地址 [root@kubenode1 ~]# kubectl cluster-info
瀏覽器安全方式訪問訪問https://<kube-apiserver>:<port>:https://172.30.200.10:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
- 使用"Kubeconfig"訪問,須要導入kubeconfig文件,這裏即生成客戶端工具kubectl訪問須要的kubeconfig文件:/etc/kubernetes/admin/admin.conf;
- 使用令牌訪問,須要輸入令牌,這裏經過"kubectl get secret -n kube-system | grep kubernetes-dashboard-token"得到令牌名名,再經過"kubectl describe secret kubernetes-dashboard-token-wl2wq -n kube-system"得到令牌("kubernetes-dashboard-token-wl2wq "即令牌名);
- 或者直接"跳過"(前提是kubernetes-dashboard具備cluster-admin權限)。
進入kubernetes首頁後,默認在default命名空間。
4. 經過kube-proxy訪問dashboard
# kubectl proxy可啓用代理,代理不必定啓用在pod所在的節點,以下例pod在172.30.200.23節點,而在172.30.200.21節點啓動代理亦可 [root@kubenode1 dashboard]# kubectl get pod -n kube-system -o wide [root@kubenode1 dashboard]# kubectl proxy --address='172.30.200.21' --port=18001 --accept-hosts='^*$'
瀏覽器非安全方式訪問http://<代理節點>:<port>:http://172.30.200.21:18001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
5. 經過NodePort訪問dashboard
在定義dashboard-service.yaml時,已定義"nodePort" type,並指定"nodePort: 18443",此方式在生產環境不建議採用。
經過瀏覽器安全訪問https://<node>:<port>(node能夠是任意宿主機節點ip):https://172.30.200.23:18443