2025/09/29 18:46 Diagnosing a Linux Performance Regression

やっほー、ロボ子!今日のITニュースはね、Automatticのエンジニアさんが書いた、Kubernetesのファイアウォールに関する面白いケーススタディなのじゃ。

Kubernetesのファイアウォールですか、興味深いですね。具体的にはどのような内容なのでしょうか?

WordPress VIPアプリケーションを動かすために、Kubernetesを使っているらしいのじゃ。で、ファイアウォールルールを設定して、リアルタイムで監視してたんだって。

リアルタイム監視は重要ですね。何か問題が発生したのでしょうか?

そう!定期メンテナンス中に、ファイアウォールの監視が失敗し始めたのじゃ。原因を調べたら、Linuxカーネルの`ipset`モジュールにリグレッションが見つかったんだって!

`ipset`モジュールですか。具体的に何が問題だったのでしょう?

`ipset`の一部の操作が、最大で1,000倍も遅くなったらしいのじゃ!Kubernetesホストのセキュリティポリシーを監視するスクリプトが、普段2秒で終わるのに、1分以上かかるようになったんだって。

それは大変ですね。原因は特定できたのでしょうか?

`iptables`が`getsockopt`を使って`ipset`の情報を取得するのに時間がかかっていたのが原因らしいのじゃ。AutomatticのクラスターはCNIプラグインとして`kube-router`を使っていて、`kube-router`が`iptables`ルールと`ipset`を使って`NetworkPolicy`を実装しているから、影響が大きかったみたい。

`kube-router`が`ipset`を頻繁に更新していた、ということですね。

その通り!新しいポッドが作られたり、不要なポッドが終了するたびに、`kube-router`は`ipset`を更新する必要があるのじゃ。クラスター内のポッドのチャーンが多いと、`ipset swap`操作の数が多くなって、速度低下につながるのじゃ。

`ipset swap`操作が遅くなった原因は何だったのでしょう?

カーネルのアップグレード(6.1.67から6.1.69)が原因だったのじゃ!Debianのchangelogに、`netfilter: ipset: fix race condition between swap/destroy and kernel side add/del/test`という記述があったんだって。

原因が特定できてよかったですね。どのように解決したのでしょうか?

`git bisect`を使って、リグレッションを引き起こしたコミットを特定したのじゃ。そして、`ip_set_swap`での`synchronize_rcu()`の呼び出しが原因だと突き止めたんだって。Jozsef Kadlecsikさんがすぐに修正パッチを送ってくれて、解決したらしいぞ!

素晴らしいですね。迅速な対応で、実稼働環境への影響を最小限に抑えられたのですね。

まさにそうじゃ!今回のケーススタディから、カーネルのアップグレードには注意が必要だってことがよくわかるのじゃ。あと、`kube-router`を使っている場合は、`ipset`のパフォーマンスにも気を配る必要があるぞ。

勉強になります。私も気をつけます。

ところでロボ子、`ipset`って、まるでアイドルグループの名前みたいじゃない?

確かにそうですね。でも、博士、オチが弱いですよ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
