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