1. 创建IngressRoute

IngressRoute 是traefik2.0新增的Kubernetes,自定义资源(CRD),如果想使用ingress资源请查看 3. ingress使用

1.1 简单ingressRoute

1.1.1 创建域名的ingressRoute

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: IngressRoute
  3. metadata:
  4. name: http-redirect-ingressroute
  5. spec:
  6. entryPoints:
  7. - web
  8. routes:
  9. - match: Host(`test.persagy.com`) && PathPrefix(`/data-platform-3`)
  10. kind: Rule
  11. services:
  12. - name: data-platform-3
  13. port: 8080
  14. # 多个依次如下
  15. - match: Host(`test.persagy.com`) && PathPrefix(`/workorder`)
  16. kind: Rule
  17. services:
  18. - name: nginx
  19. port: 9909

1.1.2 使用中间件的ingressRoute

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: IngressRoute
  3. metadata:
  4. name: http-redirect-ingressroute
  5. spec:
  6. entryPoints:
  7. - web
  8. routes:
  9. - match: PathPrefix(`/data-platform-3`)
  10. kind: Rule
  11. services:
  12. - name: data-platform-3
  13. port: 8080
  14. middlewares:
  15. - name: admin-stripprefix
  16. - match: PathPrefix(`/workorder`)
  17. kind: Rule
  18. services:
  19. - name: nginx
  20. port: 9909
  21. middlewares:
  22. # - name: request-cors
  23. - name: path-replacepath
  24. - name: request-cors

2. 中间件

2.1 去除前缀或指定路径

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: Middleware
  3. metadata:
  4. name: admin-stripprefix
  5. spec:
  6. stripPrefix:
  7. prefixes:
  8. - /data-platform-3
  9. - /image-service

2.2 替换路径中间件

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: Middleware
  3. metadata:
  4. name: path-replacepath
  5. spec:
  6. replacePathRegex:
  7. regex: ^/workorder/(.*)
  8. replacement: /report-manager/$1

2.3 解决跨域问题

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: Middleware
  3. metadata:
  4. name: request-cors
  5. spec:
  6. headers:
  7. accessControlAllowMethods:
  8. - "GET"
  9. - "POST"
  10. - "OPTIONS"
  11. - "PUT"
  12. accessControlAllowOriginList:
  13. - "*"
  14. accessControlMaxAge: 1000
  15. addVaryHeader: true
  16. accessControlAllowHeaders:
  17. - "*"
  18. accessControlAllowCredentials: true

2.4 增加请求大小设置

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: Middleware
  3. metadata:
  4. name: limit
  5. spec:
  6. buffering:
  7. maxRequestBodyBytes: 10485760
  8. memRequestBodyBytes: 2097152
  9. maxResponseBodyBytes: 10485760
  10. memResponseBodyBytes: 2097152
  11. retryExpression: "IsNetworkError() && Attempts() < 2"

2.5 压缩请求内容

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: Middleware
  3. metadata:
  4. name: compress
  5. spec:
  6. compress: {}

2.6 请求并发数

限制同时请求数,为了主动防止服务因高负载而不堪重负,可以限制允许的同时进行中的请求数。

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: Middleware
  3. metadata:
  4. name: test-inflightreq
  5. spec:
  6. inFlightReq:
  7. amount: 100

2.7 请求速率

限制通话频率, 为了主动防止服务因高负载而不堪重负,可以限制允许的同时进行中的请求数。

  1. # Here, an average of 100 requests per second is allowed.
  2. # In addition, a burst of 50 requests is allowed.
  3. apiVersion: traefik.containo.us/v1alpha1
  4. kind: Middleware
  5. metadata:
  6. name: test-ratelimit
  7. spec:
  8. rateLimit:
  9. average: 100
  10. burst: 200
  11. period: 10s

2.8 重试(重新连接)

如果后端服务器没有回复,重试中间件向后端服务器重新发出给定次数的请求。 服务器一响应,中间件就会停止重试,无论响应状态如何。 Retry 中间件有一个可选配置来启用指数退避。

  1. # Retry 4 times with exponential backoff
  2. apiVersion: traefik.containo.us/v1alpha1
  3. kind: Middleware
  4. metadata:
  5. name: retry
  6. spec:
  7. retry:
  8. attempts: 4
  9. initialInterval: 100ms

2.9 重定向

将客户端重定向到不同的方案/端口

RedirectScheme 将请求从一个方案/端口重定向到另一个。

  1. # Redirect to https
  2. apiVersion: traefik.containo.us/v1alpha1
  3. kind: Middleware
  4. metadata:
  5. name: test-redirectscheme
  6. spec:
  7. redirectScheme:
  8. scheme: https
  9. permanent: true
  10. port: "443"

3. 使用Ingress

3.1 使用中间件进行请求过滤的ingress

  1. kind: Ingress
  2. apiVersion: networking.k8s.io/v1beta1
  3. metadata:
  4. name: myingress
  5. annotations:
  6. traefik.ingress.kubernetes.io/router.entrypoints: web
  7. # middleware创建的名称空间-middleware名称@kubernetescrd
  8. # wd-path-replacepath@kubernetescrd
  9. traefik.ingress.kubernetes.io/router.middlewares: wd-path-replacepath@kubernetescrd,wd-request-cors@kubernetescrd
  10. traefik.ingress.kubernetes.io/router.middlewares: test-stripprefixregex@file
  11. spec:
  12. rules:
  13. - host:
  14. http:
  15. paths:
  16. - path: /workorder
  17. backend:
  18. serviceName: nginx
  19. servicePort: 9909