traefik基本部分

k8s接入层有很多,从最开始的nginx,以及官方基于nginx的ingress,openresty基于lua扩展到kong,apisix,每个云厂商自己都有对应的elb控制器
而kong,apisix,(nginx+lua)对于golang技术栈来说没那么友好,这系列我们来学习下traefik,做为golang开发的反向代理软件,同时对于现在上云比较友好,
相对于istio+envoy services-mess也比较轻 traefik-architecture.png 常见的做法,在k8s中,有着自己的服务注册,发现,缺点也比较明显,k8s的services通过endpoint实现pod ip的注册,而负载均衡则通过iptable实现

  • 对于长连接如grpc的http2协议,无法实现真正的负载均衡(client->server已经建立的连接数据还是会流量同一个pod)
  • 对于高级流量管理也无法实现,如染色发布,金丝雀发布,流量复制等 现在常见的解决方案有
  • 通过注册中心如consul等,通过内部网关做负载均衡
  • istio/linked2等services mess
  • traefik等网关实现 我们在后面会详细分析traefik基于k8s services怎么实现高级流量管理

traefik概念

本文先简单明确下基本的概念,过下大概的配置

  • EntryPoints:EntryPoints是Traefik 的网络入口点,定义接收数据包的端口,就是监听的端口
  • Routers:路由,端口有数据包到来根据规则匹配services。
  • Middlewares:连接到路由器,中间件可以在请求或响应发送到您的服务之前修改它们
  • Services:服务负责配置如何到达最终处理传入请求的实际服务。

traefik安装

通过helm安装,yaml如下

service:
  type: NodePort
ingressRoute:
  dashboard:
    enabled: false
ports:
  traefik:
    port: 9000
    expose: true
  web:
    port: 80
    hostPort: 80
    expose: true
  websecure:
    port: 443
    hostPort: 443
    expose: true
persistence:
  enabled: true
  name: data
  accessMode: ReadWriteOnce
  storageClass: "rook-ceph-block"
  size: 30Gi
  path: /data
additionalArguments:
  - "--serversTransport.insecureSkipVerify=true"
  - "--api.insecure=true"
  - "--api.dashboard=true"