traefik使用

一、灰度发布(加权轮询)

1、创建两个Pod,appv1,appv2,基于nginx,修改index.html文件(省略)

2、创建一个TraefikService资源,使用weighted实现加权轮询wrr

apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: app-wrr
spec:
  weighted:
    services:
      - name: appv1
        weight: 3
        port: 80
        kind: Service
      - name: appv2
        weight: 1
        port: 80
        kind: Service

3、创建一个IngressRoute去应用TraefikService定义的策略

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: app-ingressroute-canary
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`testweb.weng.com`)
    kind: Rule
    services:
    - name: app-wrr
      kind: TraefikService

3、测试结果

访问4次,3次打在了appv1,1次打在appv2,符合定义的app-wrr策略3:1

可利用该策略实现灰度发布的功能

traefik-01

二、镜像流量复制

1、创建一个TraefikService资源,使用mirroring实现流量复制,并创建一个IngressRoute应用该策略

apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: app-mirror
spec:
  mirroring:
    name: appv1
    port: 80
    mirrors:
    - name: appv2
      percent: 50  # 把appv1百分之50的流量复制到appv2
      port: 80
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: app-ingressroute-mirror
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`testmrr.weng.com`)
    kind: Rule
    services:
    - name: app-mirror
      kind: TraefikService

2、测试结果

访问6次appv1,0次访问appv2,自动复制了百分之50即3次的流量到appv2

traefik-02

traefik-03

traefik-04