traefik使用

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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定义的策略

1
2
3
4
5
6
7
8
9
10
11
12
13
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应用该策略

1
2
3
4
5
6
7
8
9
10
11
12
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
1
2
3
4
5
6
7
8
9
10
11
12
13
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