安装Kubernetes时kube-proxy启动失败,涉及nf_conntrack_max文件不存在及模块加载失败问题
安装Kubernetes时kube-proxy启动失败,涉及nf_conntrack_max文件不存在及模块加载失败问题
看起来你在部署Kubernetes的过程中碰到了kube-proxy启动卡壳的问题,核心痛点是找不到/proc/sys/net/netfilter/nf_conntrack_max文件,而且尝试加载nf_conntrack模块也失败了。我帮你梳理下问题细节和可行的解决思路:
问题现象
首先先把你遇到的错误信息整理出来,方便定位:
kube-proxy启动报错日志:
I0603 18:53:21.135178 1 server_others.go:69] "Using iptables proxy" I0603 18:53:21.150071 1 node.go:141] Successfully retrieved node IP: 10.97.160.111 I0603 18:53:21.166703 1 conntrack.go:100] "Set sysctl" entry="net/netfilter/nf_conntrack_max" value=524288 E0603 18:53:21.166740 1 server.go:537] "Error running ProxyServer" err="open /proc/sys/net/netfilter/nf_conntrack_max: no such file or directory" E0603 18:53:21.166760 1 run.go:74] "command failed" err="open /proc/sys/net/netfilter/nf_conntrack_max: no such file or directory"
加载模块失败的命令输出:
root@staging:/home/hpeoneview# sudo modprobe nf_conntrack modprobe: FATAL: Module nf_conntrack not found in directory /lib/modules/5.4.0-144-generic root@staging:/home/hpeoneview# uname -a Linux hpeoneview-staging 5.4.0-144-generic #161-Ubuntu SMP Fri Feb 3 14:49:04 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
问题原因
这个问题本质是你的系统内核缺少nf_conntrack相关的模块支持,或者内核编译时没有开启对应的配置选项,导致kube-proxy无法找到它需要的sysctl文件和内核模块。
解决步骤
1. 先安装对应内核版本的头文件
内核模块的加载依赖对应版本的内核头文件,先确保你的系统已经安装:
sudo apt update sudo apt install linux-headers-$(uname -r)
2. 尝试加载拆分后的conntrack模块
在部分内核版本中,nf_conntrack被拆分成了IPv4和IPv6单独的模块,你可以试试加载这两个:
sudo modprobe nf_conntrack_ipv4 sudo modprobe nf_conntrack_ipv6
加载完成后检查目标文件是否存在:
ls /proc/sys/net/netfilter/nf_conntrack_max
3. 检查内核编译配置
如果上述模块还是无法加载,需要确认你的内核是否开启了CONFIG_NF_CONNTRACK选项:
grep CONFIG_NF_CONNTRACK /boot/config-$(uname -r)
- 如果输出是
CONFIG_NF_CONNTRACK=m或者CONFIG_NF_CONNTRACK=y,说明内核支持该模块; - 如果没有输出或者是
# CONFIG_NF_CONNTRACK is not set,那你要么需要重新编译开启该选项的内核,要么更换一个支持该配置的内核版本。
4. 测试环境临时绕过(生产不推荐)
如果只是测试环境想快速推进,可以临时修改kube-proxy的配置,关闭conntrack相关设置:
- 编辑kube-proxy的ConfigMap:
kubectl edit configmap kube-proxy -n kube-system
- 在
config.conf部分添加或修改如下配置:
conntrack: maxPerCore: 0 min: 0 tcpCloseWaitTimeout: 0s tcpEstablishedTimeout: 0s
- 重启kube-proxy的daemonset:
kubectl rollout restart daemonset kube-proxy -n kube-system
备注:内容来源于stack exchange,提问作者Sandeep Lade
相关产品推荐
相关产品推荐

