Kubernetes dashboard 經過 Ingress 提供HTTPS訪問

Kubernetes dashboard提供外部訪問的方式有多種(端口映射、代理、NodePort、LoadBalancer、Ingress)。儘管Dashboard的流量很小,沒有必要經過 Ingress 來提供訪問,但Dashboard服務是一個很好的現成的服務,能夠用來練習Ingress的使用和配置。node

本文內容包括:安裝Ingress、配置加密參數、安裝Dashboard的Ingress路由等幾個步驟。nginx

一、安裝 Kubernetes Dashboard

Kubernetes Dashboard是Kubernetes的可視化管理Web界面,安裝參考:git

這裏咱們將其經過Ingress設置,管理者能夠經過Https進行訪問,並且不須要端口映射,更符合一般的Web服務訪問模式。github

二、安裝 Ingress controller

Ingress已經是Kubernetes內置的網絡入口服務,但其實現引擎須要單獨安裝。web

三、建立和安裝加密訪問憑證

經過https進行訪問必須要使用證書和密鑰,在Kubernetes中能夠經過配置一個加密憑證(TLS secret)來提供。api

3.1 建立 tls secret

這裏只是拿來本身使用,建立一個本身簽名的證書。若是是公共服務,建議去數字證書頒發機構去申請一個正式的數字證書(須要一些服務費用);或者使用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地址,你能夠改爲本身的。安全

3.2 安裝 tls secret

下一步,將這兩個文件的信息建立爲一個Kubernetes的secret訪問憑證,我將名稱指定爲 k8s-dashboard-secret ,這在後面的Ingress配置時將會用到。若是你修改了這個名字,注意後面的Ingress配置yaml文件也須要同步修改。服務器

kubectl -n kube-system create secret tls k8s-dashboard-secret --key ./tls.key --cert ./tls.crt
  • 注意:
    • 上面命令的參數 -n 指定憑證安裝的命名空間。
    • 爲了安全考慮,Ingress全部的資源(憑證、路由、服務)必須在同一個命名空間。

四、配置Ingress 路由

首先建立一個Ingress路由配置文件,而後設置到Kubernetes集羣中。網絡

4.1 建立Ingress 路由配置文件

將下面的內容保存爲文件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
  • 注意
    • 上面的annotations部分是必須的,以提供https和https service的支持。不過,不一樣的Ingress Controller可能的實現(或版本)有所不一樣,須要安裝相應的實現(版本)進行設置。
    • 參見,#issue:https://github.com/kubernetes/ingress-nginx/issues/2460

4.2 配置 Ingress 路由

如今使用kubectl apply命令將Ingress路由設置進去。若是修改了,能夠再次運行這個命令,以應用更改,能夠當即生效。

kubectl apply -n kube-system -f dashboard-ingress.yaml
  • 注意:
    • 上面命令的參數 -n 指定憑證安裝的命名空間。
    • 爲了安全考慮,Ingress全部的資源(憑證、路由、服務)必須在同一個命名空間。

五、登陸使用

5.1 創建受權帳號及Token

創建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

5.2 使用Token

使用下面的方法來獲取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地址是跟端口映射、代理等方式不同的,更符合通常的網頁服務的習慣。

5.3 Dashboard界面

Kubernetes Dashboard的界面以下,跟其它訪問方式是同樣樣的:

  • 最後,由於是自簽名證書,不少瀏覽器不讓訪問,可使用FireFox,選擇添加安全例外(Exceptions)便可。

若是更深刻的使用HTTPS,咱們須要瞭解和解決幾個下面的問題:

由於Kubernetes的版本在快速演進,可能這裏的方法已再也不適用。若是你遇到問題,歡迎在下面留言。

相關文章
相關標籤/搜索