traefik基本部分
k8s接入层有很多,从最开始的nginx,以及官方基于nginx的ingress,openresty基于lua扩展到kong,apisix,每个云厂商自己都有对应的elb控制器
而kong,apisix,(nginx+lua)对于golang技术栈来说没那么友好,这系列我们来学习下traefik,做为golang开发的反向代理软件,同时对于现在上云比较友好,
相对于istio+envoy services-mess也比较轻
常见的做法,在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"