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