トラフィック(接続頻度)が高いオーバーレイネットワークで互いに通信する2つのコンテナは、時々ほぼ正確に1秒の倍数で接続遅延を経験します。 2 つのコンテナが同じホスト上で実行されるのか、2 つの物理マシン間で実行されるのかは重要ではありません。
- 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/*
いるように見えますが、待ち時間の頻度はまだ変わりません。
ドッカーバージョン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