前言
Traefik 是一個現代的 HTTP 反向代理和負載均衡器,使部署微服務變得容易。
Traefik 可以與現有的多種基礎設施元件(Docker、Swarm 模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS...)整合,並自動和動態地配置自己。
系列文章:
實踐中,一個很常見的需求,使用者輸入的 url 是 ewhisper.cn/alert-manager, 如果什麼都不做會返回 404, 需要自動加斜槓變成 ewhisper.cn/alert-manager/, 如何基於 Traefik on K8S 實現?
答案是:用 redirectRegex MiddleWare + 正則。
實戰
直接建立如下的 MiddleWare:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: auto-add-slash
spec:
redirectRegex:
permanent: true
regex: ^(https?://[^/]+/[-a-z0-9_]+)$
replacement: ${1}/
?說明如下:
正則匹配的內容為:
^(https?
: 以 https 或 http 開頭的內容;?
表示匹配前一個字元 0 或 1 次[^/]+/
: 匹配 URL 第一個/
之前的內容[-a-z0-9_]+
: 匹配第一個/
之後的內容,往往為字母數字和中劃線及下劃線
最終,^(https?://[^/]+/[-a-z0-9_]+)$
該 group 匹配的內容示例如:https://ewhisper.cn/monitor-alertmanager, 並將其替換為:${1}/
, 即將匹配的 group 後面加上 /
, 示例如:https://ewhisper.cn/monitor-alertmanager
? 注意:
上面的 MiddleWare 可能無法適應所有的情況, 讀者可以領會其要點, 並根據自己的需求做適當調整.
IngressRoute 使用
直接這樣使用:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: alertmanager
spec:
routes:
- kind: Rule
match: Host(`ewhisper.cn`) && PathPrefix(`/alertmanager`)
middlewares:
- name: auto-add-slash
services:
- name: alertmanager
port: 9093
??? 完成!
EOF
三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.