接続追跡 (conntrack) は、SYN、ESTABLISHED、CLOSED などの TCP 状態を含むネットワーク接続状態を監視およびログに記録する接続追跡メカニズムです。 Terway Datapath V2 および IPvlan モードでは、conntrack は拡張 Berkeley Packet Filter (eBPF) マップを使用してコンテナトラフィックに関する情報を保存します。その他のモードでは、従来の Linux conntrack 実装が使用されます。このトピックでは、最適なパフォーマンスを得るために eBPF conntrack テーブルのサイズを変更する方法について説明します。
conntrack テーブルサイズを確認する
eBPF conntrack テーブルサイズは、ノードのメモリ容量によって異なります。
ノードの conntrack テーブルサイズを表示するには、次のコマンドを実行します。
terway-eniip ポッド名を取得します。
# kubectl describe node <ノード名> | grep terway-eniip
kube-system terway-eniip-xxxx 350m (8%) 1100m (28%) 200Mi (3%) 256Mi (3%) 16hconntrack テーブルサイズをクエリします。
# kubectl exec -it -nkube-system terway-eniip-xxxx -c policy -- cilium status --verbose
...
BPF Maps: dynamic sizing: on (ratio: 0.002500)
Name Size
Auth 524288
Non-TCP connection tracking 65536
TCP connection tracking 131072
Endpoint policy 65535
...パラメーターの説明:
dynamic sizing: on: eBPF マップの動的な上限を有効にします。値がoffに設定されている場合は、bpf-map-dynamic-size-ratioパラメータを設定して動的調整を有効にするか、bpf-ct-global-any-max、bpf-ct-global-tcp-max、およびbpf-nat-global-maxパラメータを設定して異なるテーブルのサイズを指定できます。ratio: 0.002500: システムメモリ全体の指定された割合に基づく eBPF マップの最大サイズ。Non-TCP connection tracking: 非 TCP conntrack テーブルの最大エントリ数。TCP connection tracking: TCP conntrack テーブルの最大エントリ数。
conntrack エントリ数を確認する
デフォルトでは、各ノードは Prometheus メトリックポートを公開します。デフォルトポートは 9962 です。次の表に、監視コンポーネントを使用して収集できるメトリックを示します。
メトリック | ラベルと値 |
cilium_datapath_conntrack_gc_entries | family: IP アドレス タイプ。有効な値: protocol: プロトコル タイプ。有効な値: status: クリーンアップ ステータス。すべての状態を組み合わせることで、クリーンアップ前の conntrack エントリ数を取得できます。有効な値: |
デフォルトの監視ポートを変更する
パラメーター | 説明 |
prometheus-serve-addr | Prometheus リッスン ポート。ポートを無効にするには、値を
|
このパラメータの変更方法の詳細については、「Terway ConfigMap のカスタマイズ」の cilium_args パラメータの説明をご参照ください。
eBPF conntrack サイズを調整する
eBPF conntrack と Linux conntrack は機能的に同じです。デフォルト設定は、追加の構成を必要とせずに、ほとんどのビジネスシナリオの要件を満たすことができます。
次のシナリオでは、ビジネス要件に基づいて設定を変更する必要があります。
多数の長時間接続が存在する。
ポッドがインターネットに直接公開されており、多数のハーフオープン接続が存在する可能性がある。
conntrack テーブルサイズの調整は、リスクの高い操作です。本番環境で conntrack テーブルサイズを調整する前に、調整の効果を評価することをお勧めします。 conntrack テーブルサイズを調整した後、このトピックのconntrack テーブルサイズを確認するセクションを参照して、調整が有効になっているかどうかを確認してください。
パラメーター | 説明 |
bpf-map-dynamic-size-ratio | システムメモリの合計に対する指定された割合に基づく eBPF マップの最大サイズ。
|
bpf-ct-timeout-regular-any | 非 TCP conntrack テーブルのエントリのタイムアウト期間。 デフォルト値: |
bpf-ct-timeout-regular-tcp | TCP conntrack テーブルで確立された接続エントリのタイムアウト期間。 デフォルト値: |
bpf-ct-timeout-regular-tcp-fin | TCP conntrack テーブルで接続を閉じている間のタイムアウト期間。 デフォルト値: |
bpf-ct-timeout-regular-tcp-syn | TCP conntrack テーブルで接続を確立している間のタイムアウト期間。 デフォルト値: |
bpf-ct-timeout-service-any | 非 TCP サービス conntrack テーブルのエントリのタイムアウト期間。 デフォルト値: |
bpf-ct-timeout-service-tcp | TCP サービス conntrack テーブルで確立されたサービス接続のタイムアウト期間。 デフォルト値: |
bpf-ct-timeout-service-tcp-grace | TCP サービス conntrack テーブルでの正常なサービスシャットダウンのタイムアウト期間。 デフォルト値: |
conntrack-gc-interval | conntrack テーブルのクリーンアップ間隔。 デフォルト値: 説明 このパラメーターは、cilium-agent が conntrack テーブルを積極的にクリーンアップする間隔を指定します。デフォルト値より大きい値を指定しないでください。 クリーンアップ間隔が短いと、cilium-agent の CPU 消費量は増加しますが、conntrack テーブルがいっぱいになるのを防ぎます。 Container Service for Kubernetes (ACK) コンソールで Terway コンテナの CPU 制限を調整できます。 |
bpf-ct-global-any-max | 非 TCP サービス conntrack テーブルの最大サイズ。 説明 動的サイズ変更が有効になっている場合 (dynamic sizing: on)、 |
bpf-ct-global-tcp-max | TCP サービス conntrack テーブルの最大サイズ。 説明 動的サイズ変更が有効になっている場合 (dynamic sizing: on)、 |
bpf-nat-global-max | BPF NAT テーブルの最大サイズ。 説明 bpf-nat-global-max パラメーターの値は、bpf-ct-global-any-max パラメーターと bpf-ct-global-tcp-max パラメーターの値よりも小さくなければなりません。 デフォルトサイズ = (bpf-ct-global-any-max の値 + bpf-ct-global-tcp-max の値) × 2/3 動的サイズ変更が有効になっている場合 (dynamic sizing: on)、 |
このパラメータの変更方法の詳細については、「Terway ConfigMap のカスタマイズ」の cilium_args パラメータの説明をご参照ください。
bpf-map-dynamic-size-ratio が 0.0025 に設定されている場合、ノードのメモリ容量ごとのマップサイズ:
ノードメモリ | CT マップサイズ (TCP) | CT マップサイズ (any) | NAT マップサイズ |
7.5 GiB | 131,072 | 65,536 | 131,072 |
16 GiB | 151,765 | 75,882 | 151,765 |
30 GiB | 284,560 | 142,280 | 284,560 |
240 GiB | 2,276,484 | 1,138,242 | 2,276,484 |
例
次のサンプル コードブロックでは、bpf-map-dynamic-size-ratio を 0.003 に、bpf-ct-timeout-regular-tcp を 1h に設定しています。
10-terway.conf: |
{
"cniVersion": "0.4.0",
"name": "terway",
"capabilities": {"bandwidth": true},
"eniip_virtual_type": "IPvlan",
"cilium_args": "--bpf-map-dynamic-size-ratio=0.003 --bpf-ct-timeout-regular-tcp=1h",
"type": "terway"
}