日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kubernetes-dashboard(1.8.3)部署与踩坑

發布時間:2023/12/2 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kubernetes-dashboard(1.8.3)部署与踩坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Kubernetes Dashboard 是一個管理Kubernetes集群的全功能Web界面,旨在以UI的方式完全替代命令行工具(kubectl 等)。

目錄

  • 部署
  • 創建用戶
  • 集成Heapster
  • 訪問
    • kubectl proxy
    • NodePort
    • API Server
    • Ingress
  • 部署

    Dashboard需要用到k8s.gcr.io/kubernetes-dashboard的鏡像,由于網絡原因,可以采用預先拉取并打Tag或者修改yaml文件中的鏡像地址,本文使用后者:

    kubectl apply -f http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

    上面使用的yaml只是將?https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml?中的?k8s.gcr.io?替換為了?reg.qiniu.com/k8s。

    然后可以使用kubectl get pods命令來查看部署狀態:

    kubectl get pods --all-namespaces# 輸出 NAMESPACE NAME READY STATUS RESTARTS AGE kube-system kubernetes-dashboard-7d5dcdb6d9-mf6l2 1/1 Running 0 9m

    如果要在本地訪問dashboard,我們需要創建一個安全通道,可運行如下命令:

    kubectl proxy

    現在就可以通過?http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/?來訪問Dashborad UI了。

    創建用戶

    如上圖,跳轉到了登錄頁面,那我們就先創建個用戶:

    1.創建服務賬號

    首先創建一個叫admin-user的服務賬號,并放在kube-system名稱空間下:

    # admin-user.yaml apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system

    執行kubectl create命令:

    kubectl create -f admin-user.yaml

    2.綁定角色

    默認情況下,kubeadm創建集群時已經創建了admin角色,我們直接綁定即可:

    # admin-user-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system

    執行kubectl create命令:

    kubectl create -f admin-user-role-binding.yaml

    3.獲取Token

    現在我們需要找到新創建的用戶的Token,以便用來登錄dashboard:

    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

    輸出類似:

    Name: admin-user-token-qrj82 Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name=admin-userkubernetes.io/service-account.uid=6cd60673-4d13-11e8-a548-00155d000529Type: kubernetes.io/service-account-tokenData ==== token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXFyajgyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2Y2Q2MDY3My00ZDEzLTExZTgtYTU0OC0wMDE1NWQwMDA1MjkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.C5mjsa2uqJwjscWQ9x4mEsWALUTJu3OSfLYecqpS1niYXxp328mgx0t-QY8A7GQvAr5fWoIhhC_NOHkSkn2ubn0U22VGh2msU6zAbz9sZZ7BMXG4DLMq3AaXTXY8LzS3PQyEOCaLieyEDe-tuTZz4pbqoZQJ6V6zaKJtE9u6-zMBC2_iFujBwhBViaAP9KBbE5WfREEc0SQR9siN8W8gLSc8ZL4snndv527Pe9SxojpDGw6qP_8R-i51bP2nZGlpPadEPXj-lQqz4g5pgGziQqnsInSMpctJmHbfAh7s9lIMoBFW7GVE8AQNSoLHuuevbLArJ7sHriQtDB76_j4fmA ca.crt: 1025 bytes namespace: 11 bytes

    然后把Token復制到登錄界面的Token輸入框中,登入后顯示如下:

    集成Heapster

    Heapster是容器集群監控和性能分析工具,天然的支持Kubernetes和CoreOS。

    Heapster支持多種儲存方式,本示例中使用influxdb,直接執行下列命令即可:

    kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/influxdb/influxdb.yaml kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/influxdb/grafana.yaml kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/influxdb/heapster.yaml kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/rbac/heapster-rbac.yaml

    上面命令中用到的yaml是從?https://github.com/kubernetes/heapster/tree/master/deploy/kube-config/influxdb?復制的,并將k8s.gcr.io修改為國內鏡像。

    然后,查看一下Pod的狀態:

    raining@raining-ubuntu:~/k8s/heapster$ kubectl get pods --namespace=kube-system NAME READY STATUS RESTARTS AGE ... heapster-5869b599bd-kxltn 1/1 Running 0 5m monitoring-grafana-679f6b46cb-xxsr4 1/1 Running 0 5m monitoring-influxdb-6f875dc468-7s4xz 1/1 Running 0 6m ...

    等待狀態變成Running,刷新一下瀏覽器,最新的效果如下:

    關于Heapster更詳細的用法可參考官方文檔:https://github.com/kubernetes/heapster。

    訪問

    Kubernetes提供了以下四種訪問服務的方式:

    kubectl proxy

    在上面的示例中,我們使用的便是kubectl proxy,它在您的機器與Kubernetes API之間創建一個代理,默認情況下,只能從本地訪問(啟動它的機器)。

    我們可以使用kubectl cluster-info命令來檢查配置是否正確,集群是否可以訪問等:

    raining@raining-ubuntu:~$ kubectl cluster-info Kubernetes master is running at https://192.168.0.8:6443 Heapster is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/heapster/proxy KubeDNS is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy monitoring-grafana is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy monitoring-influxdb is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

    啟動代理只需執行如下命令:

    $ kubectl proxy Starting to serve on 127.0.0.1:8001

    我們也可以使用--address和--accept-hosts參數來允許外部訪問:

    kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'

    然后我們在外網訪問http://<master-ip>:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/,可以成功訪問到登錄界面,但是卻無法登錄,這是因為Dashboard只允許localhost和127.0.0.1使用HTTP連接進行訪問,而其它地址只允許使用HTTPS。因此,如果需要在非本機訪問Dashboard的話,只能選擇其他訪問方式。

    NodePort

    NodePort是將節點直接暴露在外網的一種方式,只建議在開發環境,單節點的安裝方式中使用。

    啟用NodePort很簡單,只需執行kubectl edit命令進行編輯:

    kubectl -n kube-system edit service 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: 2018-05-01T07:23:41Z labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system resourceVersion: "1750" selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard uid: 9329577a-4d10-11e8-a548-00155d000529 spec: clusterIP: 10.103.5.139 ports: - port: 443 protocol: TCP targetPort: 8443 selector: k8s-app: kubernetes-dashboard sessionAffinity: None type: ClusterIP status: loadBalancer: {}

    然后我們將上面的type: ClusterIP修改為type: NodePort,保存后使用kubectl get service命令來查看自動生產的端口:

    kubectl -n kube-system get service kubernetes-dashboard

    輸出如下:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard NodePort 10.103.5.139 <none> 443:31795/TCP 4h

    如上所示,Dashboard已經在31795端口上公開,現在可以在外部使用https://<cluster-ip>:31795進行訪問。需要注意的是,在多節點的集群中,必須找到運行Dashboard節點的IP來訪問,而不是Master節點的IP,在本文的示例,我部署了兩臺服務器,MatserIP為192.168.0.8,ClusterIP為192.168.0.10。

    但是最后訪問的結果可能如下:

    遺憾的是,由于證書問題,我們無法訪問,需要在部署Dashboard時指定有效的證書,才可以訪問。由于在正式環境中,并不推薦使用NodePort的方式來訪問Dashboard,故不再多說,關于如何為Dashboard配置證書可參考:Certificate management。

    API Server

    如果Kubernetes API服務器是公開的,并可以從外部訪問,那我們可以直接使用API Server的方式來訪問,也是比較推薦的方式。

    Dashboard的訪問地址為:
    https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/,但是返回的結果可能如下:

    {"kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:anonymous\" cannot get services/proxy in the namespace \"kube-system\"", "reason": "Forbidden", "details": { "name": "https:kubernetes-dashboard:", "kind": "services" }, "code": 403 }

    這是因為最新版的k8s默認啟用了RBAC,并為未認證用戶賦予了一個默認的身份:anonymous。

    對于API Server來說,它是使用證書進行認證的,我們需要先創建一個證書:

    1.首先找到kubectl命令的配置文件,默認情況下為/etc/kubernetes/admin.conf,在?上一篇?中,我們已經復制到了$HOME/.kube/config中。

    2.然后我們使用client-certificate-data和client-key-data生成一個p12文件,可使用下列命令:

    # 生成client-certificate-data grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt # 生成client-key-data grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key # 生成p12 openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

    3.最后導入上面生成的p12文件,重新打開瀏覽器,顯示如下:

    點擊確定,便可以看到熟悉的登錄界面了:

    我們可以使用一開始創建的admin-user用戶的token進行登錄,一切OK。

    對于生產系統,我們應該為每個用戶應該生成自己的證書,因為不同的用戶會有不同的命名空間訪問權限。

    Ingress

    Ingress將開源的反向代理負載均衡器(如 Nginx、Apache、Haproxy等)與k8s進行集成,并可以動態的更新Nginx配置等,是比較靈活,更為推薦的暴露服務的方式,但也相對比較復雜,以后再來介紹。

    引自:https://www.cnblogs.com/RainingNight/p/deploying-k8s-dashboard-ui.html

    轉載于:https://www.cnblogs.com/itrena/p/8994764.html

    總結

    以上是生活随笔為你收集整理的kubernetes-dashboard(1.8.3)部署与踩坑的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。