conntrack是串連跟蹤機制的一種實現,用於跟蹤和記錄網路連接的狀態,例如TCP串連的狀態(SYN、ESTABLISHED、CLOSED等)。在Terway Datapath V2或者IPvlan模式下,容器內流量對應的conntrack資訊在eBPF map記憶體儲,其他模式下conntrack資訊在Linux conntrack儲存。本文介紹如何調整eBPF conntrack大小。
檢查當前conntrack大小上限
eBPF記錄的conntrack表大小依據節點記憶體而不同,
若您需要查看一個節點當前conntrack表大小,您可以執行下面命令
擷取節點terway-eniip Pod名稱。
# kubectl describe node <nodename> | grep terway-eniip
kube-system terway-eniip-xxxx 350m (8%) 1100m (28%) 200Mi (3%) 256Mi (3%) 16h檢查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地址類型。可選值: protocol: 協議類型。可選值: status: 清理狀態。將全部狀態統計在一起,可以得出清理前,Conntrack條目數。可選值: |
調整預設監控連接埠
配置參數 | 說明 |
prometheus-serve-addr | prometheus介面監聽地址。設定
|
修改參數方式請參考自訂Terway配置參數章節操作cilium_args部分。
調整eBPF conntrack大小配置
在eBPF的conntrack和Linux的conntrack在功能上相同,預設配置可以滿足大部分業務情境的需要,無需調整。
當您的業務符合下面情境時,需要根據業務需要調整配置。
大量長連結
Pod直接暴露到公網的,可能存在大量半開連結情境
調整conntrack大小為高危操作,請充分驗證後應用到生產環境。配置後可按照檢查當前conntrack大小部分驗證是否生效。
配置參數 | 說明 |
bpf-map-dynamic-size-ratio | 根據系統總記憶體比例確定eBPF Map的上限。
|
bpf-ct-timeout-regular-any | 非TCP串連跟蹤表中條目的逾時時間。 預設值: |
bpf-ct-timeout-regular-tcp | TCP串連跟蹤表中已建立串連的條目的逾時時間。 預設值: |
bpf-ct-timeout-regular-tcp-fin | TCP串連跟蹤表中關閉中串連的逾時時間。 預設值: |
bpf-ct-timeout-regular-tcp-syn | TCP串連跟蹤表中建立串連的逾時時間。 預設值: |
bpf-ct-timeout-service-any | 非TCP服務串連跟蹤表中條目的逾時時間。 預設值: |
bpf-ct-timeout-service-tcp | TCP服務串連跟蹤表中已建立服務串連的逾時時間。 預設值: |
bpf-ct-timeout-service-tcp-grace | TCP服務串連跟蹤表中優雅關閉服務的逾時時間。 預設值: |
conntrack-gc-interval | conntrack 清理周期。 預設值: 說明 cilium-agent主動清理conntrack的周期,您配置的時間,不應該大於預設值。 配置較短的清理周期,將消耗cilium-agent更多CPU,但可以避免conntrack滿。您可以在控制台調整Terway容器CPU Limit配置。 |
bpf-ct-global-any-max | 非TCP服務串連跟蹤表大小。 說明 在啟用動態大小(dynamic sizing: on)的情況下,建議使用 |
bpf-ct-global-tcp-max | TCP服務串連跟蹤表大小。 說明 在啟用動態大小(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配置參數章節操作cilium_args部分。
設定bpf-map-dynamic-size-ratio為0.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"
}