Kubernetes dashboard提供外部訪問的方式有多種(端口映射、代理、NodePort、LoadBalancer、Ingress)。儘管Dashboard的流量很小,沒有必要經過 Ingress 來提供訪問,但Dashboard服務是一個很好的現成的服務,能夠用來練習Ingress的使用和配置。node
本文內容包括:安裝Ingress、配置加密參數、安裝Dashboard的Ingress路由等幾個步驟。nginx
Kubernetes Dashboard是Kubernetes的可視化管理Web界面,安裝參考:git
這裏咱們將其經過Ingress設置,管理者能夠經過Https進行訪問,並且不須要端口映射,更符合一般的Web服務訪問模式。github
Ingress已經是Kubernetes內置的網絡入口服務,但其實現引擎須要單獨安裝。web
values.yaml裏面的hostnetwork改成true,由於ingress要使用主機網絡。
經過https進行訪問必須要使用證書和密鑰,在Kubernetes中能夠經過配置一個加密憑證(TLS secret)來提供。api
這裏只是拿來本身使用,建立一個本身簽名的證書。若是是公共服務,建議去數字證書頒發機構去申請一個正式的數字證書(須要一些服務費用);或者使用Let's encrypt去申請一個免費的(後面有介紹);若是使用Cloudflare能夠自動生成證書和https轉接服務,可是須要將域名遷移過去,高級功能是收費的。瀏覽器
#https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/tls/README.md openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./tls.key -out ./tls.crt -subj "/CN=192.168.199.230"
將會產生兩個文件tls.key和tls.crt,你能夠改爲本身的文件名或放在特定的目錄下(若是你是爲公共服務器建立的,請保證這個不會被別人訪問到)。後面的192.168.199.230是個人服務器IP地址,你能夠改爲本身的。安全
下一步,將這兩個文件的信息建立爲一個Kubernetes的secret訪問憑證,我將名稱指定爲 k8s-dashboard-secret ,這在後面的Ingress配置時將會用到。若是你修改了這個名字,注意後面的Ingress配置yaml文件也須要同步修改。服務器
kubectl -n kube-system create secret tls k8s-dashboard-secret --key ./tls.key --cert ./tls.crt
首先建立一個Ingress路由配置文件,而後設置到Kubernetes集羣中。網絡
將下面的內容保存爲文件dashboard-ingress.yaml。裏面的 /dashboard 設定爲訪問Kubernetes dashboard服務,/web 只是爲了測試和佔位,若是沒有安裝nginx,將會返回找不到服務的消息。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: k8s-dashboard namespace: kube-system annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/secure-backends: "true" spec: tls: - secretName: k8s-dashboard-secret rules: - http: paths: - path: /dashboard backend: serviceName: kubernetes-dashboard servicePort: 443 - path: /web backend: serviceName: my-nginx servicePort: 80
如今使用kubectl apply命令將Ingress路由設置進去。若是修改了,能夠再次運行這個命令,以應用更改,能夠當即生效。
kubectl apply -n kube-system -f dashboard-ingress.yaml
創建Dashboard訪問的受權帳號,將下面的內容保存爲文件,如dashboard-rbac.yaml。
apiVersion: v1 kind: ServiceAccount metadata: name: dashboard namespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dashboard subjects: - kind: ServiceAccount name: dashboard namespace: kube-system roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
而後執行安裝(所創建的帳號爲dashboard):
kubectl create -f dashboard-rbac.yaml
使用下面的方法來獲取dashboard登陸的token。首頁選擇Token方法,而後填進去。
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep dashboard-token | awk '{print $1}')
如今,輸入 https://192.168.199.230/dashboard 就能夠訪問Dashboard界面了。注意這裏的URL地址是跟端口映射、代理等方式不同的,更符合通常的網頁服務的習慣。
Kubernetes Dashboard的界面以下,跟其它訪問方式是同樣樣的:
若是更深刻的使用HTTPS,咱們須要瞭解和解決幾個下面的問題:
由於Kubernetes的版本在快速演進,可能這裏的方法已再也不適用。若是你遇到問題,歡迎在下面留言。