介紹
中間件是 Traefik2.x 中一個非常有特色的功能,我們可以根據自己的各種需求去選擇不同的中間件來滿足服務,Traefik 官方已經內置了許多不同功能的中間件,其中一些可以修改請求,頭信息,一些負責重定向,一些添加身份驗證等等,而且中間件還可以通過鏈式組合的方式來適用各種情況。
![kubernetesv1.16系列——搞定Traefik2.1強大的中間件](http://p2.ttnews.xyz/loading.gif)
重定向
使用之前的例子whoami應用,我們可以通過 https://who.domain.com/tls 來訪問到應用,但是如果我們用 http 來訪問的話呢就不行了,就會404了,因為我們根本就沒有簡單80端口這個入口點,所以要想通過 http 來訪問應用的話自然我們需要監聽下 web 這個入口點:
<code>apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: ingressroutetls-http
spec:
entryPoints:
- web
routes:
- match: Host(`who.qikqiak.com`) && PathPrefix(`/tls`)
kind: Rule
services:
- name: whoami
port: 80/<code>
注意這裡我們創建的 IngressRoute 的 entryPoints 是 web,然後創建這個對象,這個時候我們就可以通過 http 訪問到這個應用了。
但是我們如果只希望用戶通過 https 來訪問應用的話呢?按照以前的知識,我們是不是可以讓 http 強制跳轉到 https 服務去,對的,在 Traefik 中也是可以配置強制跳轉的,只是這個功能現在是通過中間件來提供的了。如下所示,我們使用 redirectScheme 中間件來創建提供強制跳轉服務:
<code>apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: redirect-https
spec:
redirectScheme:
scheme: https/<code>
然後將這個中間件附加到 http 的服務上面去,因為 https 的不需要跳轉:
<code>apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: ingressroutetls-http
spec:
entryPoints:
- web
routes:
- match: Host(`who.domain.com`) && PathPrefix(`/tls`)
kind: Rule
services:
- name: whoami
port: 80
middlewares:
- name: redirect-https/<code>
這個時候我們再去訪問 http 服務可以發現就會自動跳轉到 https 去了。
關於更多中間件的用法可以查看文檔:
https://docs.traefik.io/middlewares/overview/
閱讀更多 上海IT故事 的文章