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