翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
nftables モードで kube-proxy を実行する
kube-proxy が nftables モードの場合、Amazon EKS は iptables モードで kube-proxy を実行する 1,000 を超えるサービスを持つ大規模なクラスターで一般的なネットワークレイテンシーの問題を解決できます。Iptables モードは、各接続の最初のパケットに対してパケットフィルタリングルールを順番に処理するため、このパフォーマンスの問題が発生します。nftables は iptables の後継であり、nftables kube-proxy バックエンドは、クラスターサイズに関係なくほぼ一定時間でパケットを処理することで、このレイテンシーの問題に対処します。この問題を回避するには、kube-proxynftables モードで実行するようにクラスターを設定します。
概要
nftables kube-proxyバックエンドは、Kubernetes バージョン 1.33
注記
nftables バックエンドは GA ですが、互換性上の理由から、 はデフォルトkube-proxyモードiptablesのままです。nftables モードに明示的にオプトインする必要があります。
ロードバランサーとして設計され、ラウンドロビンや最小接続などのスケジューリングアルゴリズムを公開する IPVS バックエンド
要件
nftables kube-proxyバックエンドでは、ワーカーノードに Linux カーネル 5.13 以降が必要です。Amazon Linux 2023 および Ubuntu の最新バージョンは、この最小要件を満たしています。kube-proxy はカーネルの netfilter サブシステムを介してルールを直接移植するため、サポートされているカーネルを超えて追加のユーザースペースパッケージ ( などipvsadm) やカーネルモジュールをロードする必要はありません。
注記
カーネル 5.13 は、nftables モードを実行するために必要な最小値です。大規模なクラスターでルール同期のパフォーマンスを向上させるには、より新しいカーネルとkube-proxyバージョンをお勧めします。詳細については、「パフォーマンスに関する考慮事項」を参照してください。
重要
nftables バックエンドは、すべてのネットワークプラグインと互換性がない可能性があります。nftables モードを有効にする前に、CNI プロバイダーのドキュメントを参照してください。Amazon VPC CNI は、バージョン 以降の nftables モードと互換性がありますv1.23.0。
実装
kube-proxy mode を に設定して、クラスターの kube-proxy DaemonSet を nftables モードで実行するように設定しますnftables。
警告
これは破壊的な変更です。影響を最小限に抑えるために、オフ時間または最初の EKS クラスター作成時に実行することをお勧めします。
kube-proxy EKS アドオンを更新することで、AWS コマンドラインインターフェイス (AWS CLI) コマンドを発行して nftables を有効にできます。これには、Kubernetes 1.33 以降を実行する EKS クラスターが必要です。
aws eks update-addon --cluster-name $CLUSTER_NAME --addon-name kube-proxy \ --configuration-values '{"mode": "nftables"}' \ --resolve-conflicts OVERWRITE
または、クラスターの ConfigMap kube-proxy-config を変更することでこれを行うことができます。
kubectl -n kube-system edit cm kube-proxy-config
デフォルト設定が である mode設定を見つけiptables、値を に変更しますnftables。どちらのオプションの結果も、次の設定のようになります。
mode: "nftables" nftables: masqueradeAll: false masqueradeBit: 14 minSyncPeriod: 1s syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 nodePortAddresses: null oomScoreAdj: -998 portRange: ""
これらの変更を行う前にワーカーノードがクラスターに結合されている場合は、kube-proxy DaemonSet を再起動します。
kubectl -n kube-system rollout restart ds kube-proxy
パフォーマンスに関する考慮事項
nftables モードは Kubernetes バージョン から一般利用可能ですがv1.33、このモードは からのみ使用することをお勧めしますv1.36。kube-proxy v1.36.0 では、Kubernetes プロジェクトは nftables マップとルールの構築方法に多くのパフォーマンス強化を行いました。これらの変更により、チェーンやjumpルールの数が大幅に減少しgoto、大規模な同期パフォーマンスが大幅に向上します。
これらの機能強化は、主に多数のエンドポイント (サービスをサポートする Pod) を持つクラスターにメリットをもたらします。v1.36.0 kube-proxy 以前は、数十万のエンドポイントを持つクラスターでは、nftables ルールの同期時間や CPU ソフトロックアップが非常に遅くなる可能性があります。これは、Linux カーネルが、 がkube-proxy生成するチェーンとジャンプにループが含まれていないことを確認するために発生します。
この動作は Linux カーネルバージョンによっても影響を受けます。基盤となるカーネルの改善は Linux カーネルに含まれています 6.18 (以前の安定したカーネルにバックポートされています)。以前の Linux カーネルバージョンで nftables モードを使用すると、ルールの同期時間が遅くなり、CPU ソフトロックアップが発生する可能性があります。大規模なクラスターで最高のパフォーマンスを得るには、最近の Linux カーネルを kube-proxy v1.36.0 以降と共に実行することをお勧めします。詳細については、GitHub ウェブサイトの「kube-proxy nftables performance issue (kubernetes/kubernetes#135639)