全部產品
Search
文件中心

Container Service for Kubernetes:最佳化Terway模式下conntrack配置

更新時間:Jun 27, 2025

conntrack是串連跟蹤機制的一種實現,用於跟蹤和記錄網路連接的狀態,例如TCP串連的狀態(SYN、ESTABLISHED、CLOSED等)。在Terway Datapath V2或者IPvlan模式下,容器內流量對應的conntrack資訊在eBPF map記憶體儲,其他模式下conntrack資訊在Linux conntrack儲存。本文介紹如何調整eBPF conntrack大小。

檢查當前conntrack大小上限

eBPF記錄的conntrack表大小依據節點記憶體而不同,

若您需要查看一個節點當前conntrack表大小,您可以執行下面命令

  1. 擷取節點terway-eniip Pod名稱。

# kubectl describe node <nodename>  | grep terway-eniip
  kube-system                 terway-eniip-xxxx         350m (8%)     1100m (28%)  200Mi (3%)       256Mi (3%)     16h
  1. 檢查conntrack表大小。

# 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 Map的上限,如果顯示off請手動設定bpf-map-dynamic-size-ratio啟用動態調整,或手動指定bpf-ct-global-any-max,bpf-ct-global-tcp-max,bpf-nat-global-max大小。

ratio: 0.002500:根據系統總記憶體比例確定eBPF Map的上限。

Non-TCP connection tracking:非TCP串連跟蹤表上限。

TCP connection tracking:TCP串連跟蹤表上限。

檢查當前conntrack佔用數量

每個節點預設會暴露一個Promtheus metric連接埠。預設連接埠為9962。您可以通過監控採集組件採集下面的指標。

指標

標籤與值

cilium_datapath_conntrack_gc_entries

family: IP地址類型。可選值:ipv4,ipv6

protocol: 協議類型。可選值:non-TCPTCP

status: 清理狀態。將全部狀態統計在一起,可以得出清理前,Conntrack條目數。可選值:aliveddeleted

調整預設監控連接埠

配置參數

說明

prometheus-serve-addr

prometheus介面監聽地址。設定\"\"來關閉此介面。

  • Terway >= 1.14.0 開始,預設關閉

  • Terway < 1.14.0 預設值::9962

修改參數方式請參考自訂Terway配置參數章節操作cilium_args部分。

調整eBPF conntrack大小配置

在eBPF的conntrack和Linux的conntrack在功能上相同,預設配置可以滿足大部分業務情境的需要,無需調整。

當您的業務符合下面情境時,需要根據業務需要調整配置。

  • 大量長連結

  • Pod直接暴露到公網的,可能存在大量半開連結情境

重要

調整conntrack大小為高危操作,請充分驗證後應用到生產環境。配置後可按照檢查當前conntrack大小部分驗證是否生效。

配置參數

說明

bpf-map-dynamic-size-ratio

根據系統總記憶體比例確定eBPF Map的上限。

off:禁止自動調整,map大小為固定值。

0.0025: 按0.0025比例確定Map大小上限。

bpf-ct-timeout-regular-any

非TCP串連跟蹤表中條目的逾時時間。

預設值:1m0s

bpf-ct-timeout-regular-tcp

TCP串連跟蹤表中已建立串連的條目的逾時時間。

預設值:6h0m0s

bpf-ct-timeout-regular-tcp-fin

TCP串連跟蹤表中關閉中串連的逾時時間。

預設值:10s

bpf-ct-timeout-regular-tcp-syn

TCP串連跟蹤表中建立串連的逾時時間。

預設值:1m0s

bpf-ct-timeout-service-any

非TCP服務串連跟蹤表中條目的逾時時間。

預設值:1m0s

bpf-ct-timeout-service-tcp

TCP服務串連跟蹤表中已建立服務串連的逾時時間。

預設值:6h0m0s

bpf-ct-timeout-service-tcp-grace

TCP服務串連跟蹤表中優雅關閉服務的逾時時間。

預設值:1m0s

conntrack-gc-interval

conntrack 清理周期。

預設值:5m0s

說明

cilium-agent主動清理conntrack的周期,您配置的時間,不應該大於預設值。

配置較短的清理周期,將消耗cilium-agent更多CPU,但可以避免conntrack滿。您可以在控制台調整Terway容器CPU Limit配置。

bpf-ct-global-any-max

非TCP服務串連跟蹤表大小。

說明

在啟用動態大小(dynamic sizing: on)的情況下,建議使用 bpf-map-dynamic-size-ratio 參數進行調整,以便更好地控制和最佳化 BPF 映射的動態調整機制。

bpf-ct-global-tcp-max

TCP服務串連跟蹤表大小。

說明

在啟用動態大小(dynamic sizing: on)的情況下,建議使用 bpf-map-dynamic-size-ratio 參數進行調整,以便更好地控制和最佳化 BPF 映射的動態調整機制。

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)的情況下,建議使用 bpf-map-dynamic-size-ratio 參數進行調整,以便更好地控制和最佳化 BPF 映射的動態調整機制。

修改參數方式請參考自訂Terway配置參數章節操作cilium_args部分。

設定bpf-map-dynamic-size-ratio0.0025情況下,不同大小記憶體的機器中不同map大小如下表所示:

節點記憶體

CTMapSizeTCP

CTMapSizeAny

NATMapSize

7.5GiB

131072

65536

131072

16GiB

151765

75882

151765

30GiB

284560

142280

284560

240GiB

2276484

1138242

2276484

配置樣本

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"
}