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

Posted 嗡汤圆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的会话保持和负载均衡策略配置方式的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes入口中基于Traefik路径的路由无法按预期工作

kubernetes 部署 traefik2.5

使用 Traefik 进行 Kubernetes 基本身份验证

kubernetes-traefik(二十一)

kubernetes Ingress 之 Traefik

Kubernetes Traefik集成Pilot