记录前因:
K8S部署的集群,最近遇到域名解析失败情况,查看coredns日志,没有明显问题。 解析报错: connection timed out ; no servers could be reached
重启集群服务,解析没有问题, 基本确认跟某个业务服务有关联
解决过程:
查看跟踪连接数:sysctl net.netfilter.nf_conntrack_count
message会有日志: nf_conntrack: table full, dropping packet
可以通过查看跟踪连接详细信息:cat /proc/net/nf_conntrack去统计哪个服务导致
优化对应业务服务解决此次问题
学习
认识连接跟踪:
nf_conntrack: 连接跟踪 ,同时支持ipv4和ipv6,用于跟踪连接状态,供其他模块使用。 主要用于linux的NAT和状态防火墙
查看状态:
1.当前跟踪连接详情:cat /proc/net/nf_conntrack
格式说明:
网络层协议名、网络层协议编号、传输层协议名、传输层协议编号、记录失效前剩余秒数、连接状态(不是所有协议都有),之后都是key=value或flag格式,1行里最多2个同名key,第1次出现的来自请求,第2次出现的来自响应
2.跟踪连接数
sysctl net.netfilter.nf_conntrack_count
3.最大跟踪连接数
dmesg | grep conntrack
cat /proc/sys/net/netfilter/nf_conntrack_max
cat /proc/sys/net/nf_conntrack_max
注:哈希表大小(只读)(64位系统、8G内存默认 65536,16G翻倍,如此类推)net.netfilter.nf_conntrack_buckets;默认最大跟踪连接数,默认 nf_conntrack_buckets * 4
哈希表使用情况:
grep conntrack /proc/slabinfo
根据需求调整
1.连接跟踪调整:
临时调整(重启节点会丢失)
sysctl -w net.netfilter.nf_conntrack_max=1048576
sysctl -w net.nf_conntrack_max=1048576
永久调整:
echo 'net.netfilter.nf_conntrack_max' = 1048576 >> /etc/sysctl.conf
echo 'net.nf_conntrack_max = 1048576' >> /etc/sysctl.conf
sysctl -p
2.哈希表大小调整:
临时生效:
echo 262144 > /sys/module/nf_conntrack/parameters/hashsize
永久生效
echo 'options nf_conntrack hashsize=262144' >> /etc/modprobe.d/iptables.conf
3.响应时间调整:
临时生效
# 主动方的最后1个状态。默认120秒
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
# CLOSE_WAIT是被动方收到FIN发ACK,然后会转到LAST_ACK发FIN,除非程序写得有问题,正常来说这状态持续时间很短。#默认 60 秒
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
# 理论上不用这么长,不小于 net.ipv4.tcp_keepalive_time 就行了。默认 432000 秒(5天)
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300
永久生效
# 修改内核配置文件(/etc/sysctl.conf)
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300
# 如果要马上应用配置文件里的设置:
sysctl -p /etc/sysctl.conf
禁用跟踪连接
注意:如果有docker、防火墙等服务, 不可以禁用
查看模块:lsmod | egrep "ip_table|iptable|nat|conntrack"
删除/etc/sysconfig/iptables-config里:IPTABLES_MODULES
关闭防火墙: systemctl stop iptables
移除相关模块
rmmod iptable_nat
rmmod ip6table_nat
rmmod nf_defrag_ipv4
rmmod nf_defrag_ipv6
rmmod nf_nat
rmmod nf_nat_ipv4
rmmod nf_nat_ipv6
rmmod nf_conntrack
rmmod nf_conntrack_ipv4
rmmod nf_conntrack_ipv6
rmmod xt_conntrack
开启相关模块
modprobe iptable_nat
modprobe ip6table_nat
modprobe nf_defrag_ipv4
modprobe nf_defrag_ipv6
modprobe nf_nat
modprobe nf_nat_ipv4
modprobe nf_nat_ipv6
modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_conntrack_ipv6
modprobe xt_conntrack
参考:
https://testerhome.com/topics/15824
https://zhuanlan.zhihu.com/p/349569851
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?