@
GopherDaily 今天折腾了很多,这里重新梳理下,我前面的关注点太多了,下面只关注流量到达 traefik pod
前面的 svclb-pod 是由 k3s 自带的一个 Load Balancer(Klipper LB)创建的 daemon 。
**当前的环境:**
有一个类型为 LoadBalancer 的 traefik service, load balance 是通过 KipperLB 实现的。Traefik
Service 创建了 Daemon Sets: "svclb-traefik",运行在每一个节点上,监听 80/443 端口。
将 traefik deployment scale 到每个节点上都有一个,并且开启了 access log 。
设置 traefik service 的 spec.externalTrafficPolicy = Local 。
**问题:**
理论上来说,应该只有被访问的节点上的 traefik pod 可以收到请求,但是目前是其他节点也可以收到。
今天刚开始调试的时候看日志是大部分请求都到了同一个节点的,但是会有少量请求到其他节点,以为是配置生效了,怀疑可能是网络的问题(用了 zerotier ,k3s server --flannel-iface={zerotier-Iface}),worker node 在国外,网络质量不够高之类的,但是调试一番之后,其实还是配置没生效,只是我之前只请求一个 url ,似乎有某种机制让请求只到达一个节点?只要换了 url 其他节点也会收到大量请求。externalTrafficPolicy = Local 生效的话,应该是其他节点完全收不到请求才对。
然后又查了一些其他资料,也有人遇到这个问题,但没有明确的答案。可能会和 k3s 的 Klipper LB 有关系,更细节的调试还要涉及到 cni, flannel 还有 k8s 的各种命令。但是我现在这方面知识缺失很多,排查问题过程很艰难。我周末把 k8s 的文档和网络相关的文档先看一遍,然后再重新排查这个问题,可能还要重新搞一个虚拟机环境,尝试不同的 lb 和 cni 配置。后续有结果了我再更新到这里。