Kubernetes中traefik的会话保持和负载均衡策略配置方式

Traefik是一个开源的反向代理工具,在Kubernetes集群内充当Ingress的角色,具有高性能,配置灵活,可根据Kubernetes服务动态配置等优点。
官方文档: Traefik

Traefik的默认配置为不做会话保持,即同一个用户的请求会在后端应用的不同实例之间切换。对于需要通过Session维持登录状态的服务就会出现登录无效的问题。而Traefik对于其配置教程在官方文档中Kubernetes Ingress Provider 描述并不详细。这里通过查询和尝试后发现对于会话保持和负载均衡策略的配置不是直接体现在traefik配置文件中的,而是在其对应后端Service中添加annotations来实现。例如:

对于xxxservice我们声明一个traefik

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: xxx-service-traefik
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefix
spec:
  rules:
  - host: xxx.xxx.com
    http:
      paths:
      - path: /xxx
        backend:
          serviceName: xxx-service
          servicePort: 80

这里通过 kubernetes.io/ingress.class 指定使用Traefik作为Ingress实现,而Traefik的前端特性配置完全可以按照官方配置参数进行。

对于后端的会话保持和负载略则应该在对应的Service中进行配置,这里的例子就是xxx-service。 配置文件如下:

apiVersion: v1
kind: Service
metadata:
  name: xxx-service
  annotations:
    traefik.ingress.kubernetes.io/affinity: "true"
    traefik.ingress.kubernetes.io/session-cookie-name: "xxx"
    traefik.ingress.kubernetes.io/load-balancer-method: drr

如上traefik.ingress.kubernetes.io/affinitytraefik.ingress.kubernetes.io/session-cookie-name: "xxx" 配置了会话保持特性

traefik.ingress.kubernetes.io/load-balancer-method 将负载均衡策略从默认的 drr 改为了 wrr

如下图所示,默认配置和修改后的配置对比:
Kubernetes中traefik的会话保持和负载均衡策略配置方式_第1张图片

你可能感兴趣的:(后端)