在高流量(连接频率)的覆盖网络上相互通信的两个容器偶尔会出现连接延迟,几乎恰好是 1 秒的倍数。两个容器运行在同一主机上还是在两台物理机之间运行并不重要。
- Ping 完全没有延迟,只有 TCP 连接受到影响
- 这不是 DNS 问题,使用其他容器的 IP 地址测试连接
我尝试过设置一些基于的内核参数https://github.com/moby/moby/issues/35082因为这听起来与我的问题相似
for ns in /var/run/docker/netns/lb_* /var/run/docker/netns/ingress_sbox
do
nsenter --net=$ns sysctl -w net.ipv4.vs.conn_reuse_mode=0;
nsenter --net=$ns sysctl -w net.ipv4.vs.expire_nodest_conn=1;
nsenter --net=$ns sysctl -w net.ipv4.vs.expire_quiescent_template=1;
done
但那里没有运气...
从容器的角度来看,对所有条目运行它/var/run/docker/netns/*
似乎也会改变参数,但延迟频率仍然没有变化。
Docker 版本20.10.12
。当前内核是5.15.32
,根据net/netfilter/ipvs/ip_vs_core.c
文件,补丁似乎来自https://lkml.org/lkml/2020/6/16/254已经以某种形式合并到内核源代码中。
附加信息:
net.ipv4.vs.conntrack = 0
net.netfilter.nf_conntrack_tcp_be_liberal = 1