前言
traefik
中除了route
外,感觉最精华的就是Middleware
了,架构示意图如下
请求通过router
部分后,将会转发给middleware
,经过middleware
处理后,然后再发给后端
traefik
中可用的middleware
如下
下面只列出部分常用的middleware
的写法,以做参考
环境准备
-
kubernetes
集群 -
后端服务
-
traefik
部署 -
创建1个使用中间件的
ingressroute
其
yaml
文件示例如下[root@a file-yaml]$ cat busybox-ingressroute-v2.yaml apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: busybox-httpd-ingressroute-v2 spec: routes: - match: Host("v2.a.b") ### 域名匹配规则 kind: Rule services: - name: busybox-httpd-v2 ### 指向后端服务 port: 80 middlewares: - name: busybox-httpd-middleware ### 指定中间件
使用
kubectl apply -f
即可创建成功该ingressroute
此3步骤,可查看文档
StripPrefix
功能:从url
路径中删除指定的前缀
其yaml
文件如下
[root@a file-yaml]$ cat busybox-middleware.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: busybox-httpd-middleware
spec:
stripPrefix:
prefixes:
- /v2
使用kubectl apply -f
部署该middleware
后,可查看到创建成功
使用curl
访问带有前缀的url
(http:v2.a.b:30080/v2)访问,显示成功
StripPrefix
中间件会在url
中有该前缀的时候删除它,但是没有该前缀的时候,就不会起作用,因此原来的v2.a.b:30080
也是可以访问成功的
BasicAuth
功能:
创建1个secret
,如下
注意
basicAuth
中使用的secret
必须只能包含1个元素,如果包含多个元素,traefik
的pod
则会报错,如下
修改middleware
中使用的中间件为basicAuth
,其yaml
如下
[root@a file-yaml]$ cat busybox-middleware.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: busybox-httpd-middleware
spec:
basicAuth:
secret: middleware-secret
使用kubectl apply -f
创建后,从浏览器访问,出现提示框
输入刚才创建secret
时,使用的账号密码,访问成功