优化Terway模式下conntrack配置

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
...

显示内容说明

ratio: 0.002500根据系统总内存比例确定eBPF Map的上限

Non-TCP connection tracking非TCP连接跟踪表上限

TCP connection trackingTCP连接跟踪表上限

检查当前conntrack占用数量

每个节点默认会暴露一个Promtheus metric端口。默认端口为9962。您可以通过监控采集组件采集下面的指标。

指标

标签与值

cilium_datapath_conntrack_gc_entries

family: IP地址类型。可选值:ipv4,ipv6

protocol: 协议类型。可选值:non-TCPTCP

status: 清理状态。将全部状态统计在一起,可以得出清理前,Conntrack条目数。可选值:aliveddeleted

调整默认监控端口

配置参数

说明

prometheus-serve-addr

prometheus接口监听地址。设置\"\"来关闭此接口。

默认值::9962

修改参数方式请参考自定义Terway配置参数章节操作cilium_args部分。

调整eBPF conntrack大小配置

在eBPF的conntrack和Linux的conntrack在功能上相同,默认配置可以满足大部分业务场景的需要,无需调整。

当您的业务符合下面场景时,需要更具业务需要调整配置

  • 大量长链接

  • Pod直接暴露到公网的,可能存在大量半开链接场景

重要

调整conntrack大小为高危操作,请充分验证后应用到生产环境。配置后可按照检查当前conntrack大小部分验证是否生效。

配置参数

说明

bpf-map-dynamic-size-ratio

根据系统总内存比例确定eBPF Map的上限

默认值:0.0025

例如,在15 GiB节点内存下,CT 大小为131072条

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配置。

修改参数方式请参考自定义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"
}