traefik之middleware——一

半日闲 2020年11月21日 19次浏览

前言

traefik中除了route外,感觉最精华的就是Middleware了,架构示意图如下

image-20201121164447857

请求通过router部分后,将会转发给middleware,经过middleware处理后,然后再发给后端

traefik中可用的middleware如下

image-20201121164615450

下面只列出部分常用的middleware的写法,以做参考

环境准备

  1. kubernetes集群

  2. 后端服务

  3. traefik部署

  4. 创建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步骤,可查看文档

traefik安装以及ingressroute的使用

traefik中router匹配器的高级使用

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后,可查看到创建成功

image-20201121172650174

使用curl访问带有前缀的url(http:v2.a.b:30080/v2)访问,显示成功

image-20201121173041480

StripPrefix中间件会在url中有该前缀的时候删除它,但是没有该前缀的时候,就不会起作用,因此原来的v2.a.b:30080也是可以访问成功的

BasicAuth

功能:

创建1个secret,如下

image-20201121184258954

注意

basicAuth中使用的secret必须只能包含1个元素,如果包含多个元素,traefikpod则会报错,如下

image-20201121184426532

修改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创建后,从浏览器访问,出现提示框

image-20201121184649959

输入刚才创建secret时,使用的账号密码,访问成功

image-20201121184726558

关于我

工作:运维工程师

方向:目前专注于微服务,容器技术 以及Devops方面!

个人微信公众号:

gongzhonghaopic

ps:哈哈哈,希望有需求的大佬带上我一起进步啊!!!