1. nf_conntrack 内核相关参数查看
$ sysctl -a | grep nf_conntrack
bucket_len = nf_conntrack_max / nf_conntrack_buckets。系统默认是4
sysctl -a | grep net.netfilter.nf_conntrack_buckets
net.netfilter.nf_conntrack_buckets = 65536
sysctl -a | grep net.netfilter.nf_conntrack_max
net.netfilter.nf_conntrack_max = 2310720
或者
cat /proc/sys/net/netfilter/nf_conntrack_buckets
cat /proc/sys/net/netfilter/nf_conntrack_max
使用情况conntrack跟踪表使用情况:sudo sysctl net.netfilter.nf_conntrack_count;
sudo ovs-appctl dpctl/dump-conntrack ovs conntrack命令
设置后使系统重启还能生效
# 设置bucket数
echo 'net.netfilter.nf_conntrack_buckets = 163840' > /etc/sysctl.conf
# 设置最大连接跟踪数
echo 'net.netfilter.nf_conntrack_max = 655360' > /etc/sysctl.conf
# 使用配置立马生产
sysctl -p
2.nf_conntrack最大数目
如果在模块加载时没有指定hashsize参数,内核将根据内存大小计算哈希表的大小。
对于1G内存,依据以上公式可得:1024 * 1024 * 1024 / 16384 / 8 = 16384; 对于4G内存,可得到哈希表大小为65536。以下规定当内存大于4G时,
哈希大小固定为65536。而对于大于1G小于4G内存的情况,哈希大小固定使用16384。
最后,nf_conntrack_htable_size的最小值为32。
主机上pod的最大连接数都是一样的
ns独立的有自己独立的conntrack,个数独立
ns主机的,那么conntrack数目是一样的
3. 占用内存
total_mem_used(bytes) = conntrack_max * sizeof(struct ip_conntrack) + conntrack_buckets * sizeof(struct list_head)
在ubuntu上, ip_conntrack结构的大小为328字节,list_head的大小为8字节
对于上面的配置,nf_conntrack_max设为655360,nf_conntrack_buckets设为163840,则内存使用量为:
total_mem_used(MB) = (655360*328+163840*8)/1024^2 = 206.25
4. 如果满了丢包,那么内核的日志:
nf_conntrack: table full, dropping packe