K-2 Kubernets安裝dashboard踩坑日誌

總算在成功的部署了k8s以後,我打算再部署一下k8s的web UI:dashboard.
node

網上主要的部署方法都是一些IT用yaml文件去生成的dashboard服務。而後全部的文章或多或少的都有點問題,不是步驟不同了進行不下去了,內容或文件過時,或都就是做者認爲某些內容是你們都懂的因而怱略了一些步驟,可是我已經進行不下去了。web

首先是拉鏡像的問題,dashboard的鏡像依舊是在「某個外國知名搜索引擎」服務器上的無法直接拉下來,因此依舊使用從鏡像服務器上下載以後再用docker tag命令更更名稱的方法來解決問題。chrome

官方的鏡像地址是:k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1docker

我找了一個鏡像的地址:mirrorgooglecontainers  (下載命令爲:docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1)api

接下來是更名瀏覽器

docker tag mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
docker rmi mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1

而後有了鏡像以後,開啓dashboard的pod。網上也有各類yaml文件版本,我試下來最靠譜的是如下文件。將它命名爲kubernetes-dashboard.yaml。bash

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard

其中30001能夠本身改,在k8s容許的範圍內內改爲本身想要的端口。這個端口是應用於物理機上的而不是pod網絡。非k8s集羣的集羣能夠經過這個端口去訪問(畢竟仍是給瀏覽器去訪問的。)我已開始沒改端口,可是沒有意識到30001端口已經被其餘的服務給佔掉了,因此yaml文件運行後沒有起到起到什麼做用。我在這裏選了一個30012端口。服務器

用這個文件來安裝dashboard網絡

kubectl create -f kubernetes-dashboard.yaml

接下來是用瀏覽器登錄,首先找到dashboard是在那個節點上運行的,
app

kubectl get pods --all-namespaces -o wide | grep dashboard | awk '{print $8}'

而後在瀏覽器裏訪問這個node節點。網址要加上https://<節點的ip或域名>:<前面yaml文件中的nodePort的值>。我用的瀏覽器是chrome,當即顯示了「證書不受信任」的頁面,並且高級選項裏繼續選項也沒有,就沒法訪問了。上網查了一下這個問題的解決方法,緣由是證書過時了(0001年1月3日開的證書,整整過時2000+年),只有firefox可以添加例外。而真正的解決方法是替換證書。在網上找到最好的方法以下文。

mkdir key && cd key
openssl genrsa -out dashboard.key 2048 

openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=172.19.0.48'

openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt 

kubectl delete secret kubernetes-dashboard-certs -n kube-system

kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kube-system  #新的證書

kubectl delete pod kubernetes-dashboard-746dfd476-b2r5f -n kube-system    #重啓服務

其中有一些地方要根據實際狀況改動,例如第三句的IP地址要改爲node節點的,還有最後一句刪除pod名字也得改一下。獲取的命令爲

kubectl get pods --all-namespaces -o wide | grep dashboard | awk '{print $2}'

而後在瀏覽器裏就能夠跳過證書受信問題了。接下來的問題是登錄界面,有兩種登錄的方式,我的以爲仍是token這種方便一點。網上也有高手總結了一下獲取token命令的方法。

kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

將獲取的token複製到瀏覽器的界面中,就能夠登錄dashboard了。

image.png

相關文章
相關標籤/搜索