總算在成功的部署了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了。