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
...
顯示內容說明
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的上限 默認值: 例如,在15 GiB節點內存下,CT 大小為131072條 |
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配置。 |
修改參數方式請參考自定義Terway配置參數章節操作cilium_args
部分。
示例
將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"
}