使用traefik作為ingress controller透出叢集中的https後端(如kubernetes dashboard)_Kubernetes中文社群
阿新 • • 發佈:2018-12-10
文章楔子
對於k8s叢集中的http/https服務,一種常見的設計是叢集內部走http協議,然後在ingress controller處統一管理TLS證書,並負責接受外部的https請求,以及將內部的http響應統一轉換為https發回客戶端,這樣既能降低叢集內部通訊的複雜度,又能保證叢集服務的安全性。
然而對於諸如kubernetes/dashoboard一類的服務,使用其預設的部署配置啟動的服務提供的是https協議的服務,從叢集外部訪問該服務時,通常只能使用類似如下的連結間接的訪問。
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.
本文旨在指導讀者將叢集內部的HTTPS服務通過traefik暴露到叢集外部,直接通過ingress訪問。
開啟https後端ingress
前置條件
- kubernetes叢集
- traefik 1.6.5
可以參考這份yaml檔案安裝traefik,需要注意兩點:
- 該檔案中的image被我修改成了k8s.gcr.io/traefik:1.6.5,指向我使用的私有倉庫。如果讀者想從公網拉取該映象請將映象名修改為traefik:1.6.5
- 該檔案並不涉及外部https相關程式碼,對外只開啟了http,如果需要https的話請先在kube-system名稱空間建立一個名為ssl的secret,裡面存放TLS證書,然後使用
配置Traefik
如果使用了我的部署檔案,Traefik是直接配置好的,如果是讀者先前自己安裝好的traefik,請將下面的程式碼儲存為檔案,或編輯自己的traefik配置,在適當的位置加入insecureSkipVerify = true。然後將配置應用到叢集,並重啟所有traefik容器。
kind: ConfigMap apiVersion: v1 metadata: name: traefik-conf namespace: kube-system data: traefik.toml: | insecureSkipVerify = true defaultEntryPoints = ["http"] [entryPoints] [entryPoints.http] address = ":80"
insecureSkipVerify = true,該項配置指定了traefik在訪問https後端的時候可以忽略TLS證書驗證錯誤,從而使得https的後端,如kubernetes dashboard,可以像http後端一樣直接通過traefik透出
測試效果
這裡以透出https的kubernetes dashboard為例,執行下面的yaml檔案,為dashboard建立ingress
kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: ports: - port: 443 targetPort: 8443 selector: k8s-app: kubernetes-dashboard --- kind: Ingress apiVersion: extensions/v1beta1 metadata: name: dashboard namespace: kube-system annotations: kubernetes.io/ingress.class: traefik spec: rules: - host: dashboard.multi.io http: paths: - backend: serviceName: kubernetes-dashboard servicePort: 443 path: /
隨後配置/etc/hosts檔案,並訪問該連結
$ cat /etc/hosts 10.130.29.80 dashboard.multi.io