Kubernetes 节点扩容openEuler 24.03 系统,重启后内核配置问题排查

张开发
2026/4/19 21:32:17 15 分钟阅读

分享文章

Kubernetes 节点扩容openEuler 24.03 系统,重启后内核配置问题排查
Kubernetes 节点扩容内核配置问题排查与解决方案一、问题背景与环境信息Kubernetes 版本 v1.35网络插件 Cilium容器运行时 containerd-1.6.22操作系统 openEuler 24.03内核版本 6.6.0-132.0.0.111.oe2403sp3.x86_64核心现象 在扩容节点时配置了内核参数后重启节点发现net.ipv4.ip_forward1和未生效导致节点无法成功加入集群。二、问题定位与根因分析1. 系统配置加载机制软链接陷阱 openEuler 24.03 系统默认存在一个软链接/etc/sysctl.d/99-sysctl.conf - ../sysctl.conf。这使得你以为添加一个99-k8s.conf的文件就可以成功修改。加载顺序规则 系统在启动时会按照特定顺序加载配置文件/lib/sysctl.d/*.conf/usr/lib/sysctl.d/*.conf/etc/sysctl.d/*.conf/etc/sysctl.conf后加载文件中的同名参数会覆盖先加载文件中的值。优先级冲突如果/usr/lib/sysctl.d/下的默认配置文件如50-default.conf设置了net.ipv4.ip_forward0而用户在/etc/sysctl.d/下的自定义文件如99-k8s.conf中设置了net.ipv4.ip_forward1。Cilium 要求的net.ipv4.conf.all.rp_filter0同样可能被/usr/lib/sysctl.d/中的默认值1覆盖。2. 关键参数被覆盖的具体场景net.ipv4.ip_forward1失效原因用户自定义配置如/etc/sysctl.d/99-k8s.conf的优先级低于/etc/sysctl.conf。如果/etc/sysctl.conf未显式设置net.ipv4.ip_forward1系统重启后该参数值会恢复为默认值0。net.ipv4.conf.all.rp_filter0失效原因Cilium 文档要求关闭反向路径过滤RPF即设置net.ipv4.conf.all.rp_filter0。系统默认配置通常开启 RPF值为1。如果未在最后加载的文件即/etc/sysctl.conf中明确覆盖此参数重启后该参数值会恢复为默认值1导致 Cilium 网络功能异常。三、解决方案与最佳实践1. 统一配置至最高优先级文件由于/etc/sysctl.conf是加载顺序中优先级最高的文件最后加载应将所有关键内核参数集中配置在此文件中。操作步骤编辑/etc/sysctl.conf文件在文件末尾追加以下配置项# Kubernetes 基础网络配置 net.ipv4.ip_forward 1 # Cilium 专用配置 net.ipv4.conf.all.rp_filter 0立即生效保存文件后执行以下命令使配置立即生效无需重启sysctl --system2. 验证配置覆盖情况检查加载顺序与来源运行以下命令观察配置加载过程确认最终加载的是/etc/sysctl.conf文件sysctl --system预期输出类似这里也能看出内核加载顺序[rootk8s-node2 sysctl.d]# sysctl --system * Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ... * Applying /usr/lib/sysctl.d/50-coredump.conf ... * Applying /usr/lib/sysctl.d/50-default.conf ... * Applying /usr/lib/sysctl.d/50-libkcapi-optmem_max.conf ... * Applying /etc/sysctl.d/50-libreswan.conf ... * Applying /usr/lib/sysctl.d/50-pid-max.conf ... * Applying /etc/sysctl.d/99-sysctl.conf ... * Applying /etc/sysctl.d/99-zzz-override_cilium.conf ... * Applying /etc/sysctl.conf ...确认参数最终值分别执行以下命令检查关键参数是否已设置为预期值sysctl net.ipv4.ip_forward sysctl net.ipv4.conf.all.rp_filter预期输出应为net.ipv4.ip_forward 1 net.ipv4.conf.all.rp_filter 03. 预防性检查软链接处理 如果存在/etc/sysctl.d/99-sysctl.conf - ../sysctl.conf软链接应避免在/etc/sysctl.d/目录下放置分散的配置文件。将所有需要持久化的内核参数统一配置在/etc/sysctl.conf中。自动化校验 在节点初始化脚本或配置管理工具中加入参数检查逻辑#!/bin/bash # 验证关键参数 sysctl net.ipv4.ip_forward | grep -q net.ipv4.ip_forward 1 || { echo ERROR: net.ipv4.ip_forward is not set to 1!; exit 1; } sysctl net.ipv4.conf.all.rp_filter | grep -q net.ipv4.conf.all.rp_filter 0 || { echo ERROR: net.ipv4.conf.all.rp_filter is not set to 0!; exit 1; } echo Kernel parameters validation passed.四、扩展说明net.ipv4.ip_forward1的重要性 Kubernetes 节点需要充当路由器转发不同节点上 Pod 之间的网络流量。如果 IP 转发被禁用值为0会导致跨节点通信中断、Service 服务无法访问等严重问题。Cilium 与 RPF 的冲突 Cilium 使用 eBPF 程序直接在网络接口层面处理数据包的路由和转发绕过了传统的内核路由表。反向路径过滤RPF的严格模式rp_filter1会检查数据包的源地址是否可通过接收该数据包的接口到达。由于 Cilium 的转发路径不同于内核路由表RPF 可能会将合法的 Cilium 流量误判为“源路径错误”而丢弃因此必须关闭设置为0。五、总结核心结论 内核参数加载遵循“后加载覆盖先加载”的原则是导致配置失效的根本原因。/etc/sysctl.conf作为加载链中的最后一个文件其配置具有最高优先级。行动指南 为确保 Kubernetes 节点扩容成功及 Cilium 网络插件正常工作必须将net.ipv4.ip_forward1和net.ipv4.conf.all.rp_filter0等关键内核参数集中写入/etc/sysctl.conf文件中并验证其持久生效。价值延伸 深入理解sysctl配置加载机制可以有效避免不同来源配置文件的冲突问题显著提升 Kubernetes 集群的稳定性和可靠性尤其是在使用像 Cilium 这样依赖特定内核参数的高级 CNI 插件时尤为重要。

更多文章