Amazon EKS优化AMI在AL2023上运行Cilium的网络路由问题分析与解决方案
背景介绍
Amazon EKS优化AMI是AWS为Kubernetes集群节点提供的官方镜像。随着Amazon Linux 2023(AL2023)的发布,AWS推出了基于AL2023的EKS优化AMI。然而,在使用这个新镜像配合Cilium CNI插件时,用户遇到了一些网络路由方面的挑战。
问题现象
当在AL2023上部署Cilium时,主要出现了两类问题:
-
节点引导问题:使用Terraform EKS模块时,
nodeadm无法正确解析用户数据配置,导致节点无法加入集群。 -
网络路由冲突:系统出现两个默认路由,分别通过
ens5和ens6接口,导致Cilium代理启动失败,错误提示发现多个具有相同优先级的默认路由。
技术分析
节点引导问题
这个问题源于nodeadm工具对用户数据格式的严格要求。在AL2023上,nodeadm期望用户数据采用特定的YAML格式:
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
name: ${cluster_name}
apiServerEndpoint: ${cluster_endpoint}
certificateAuthority: ${cluster_auth_base64}
cidr: ${cluster_service_ipv4_cidr}
如果格式不正确或缺少必要字段(特别是cidr),nodeadm-config.service将无法启动,导致节点无法加入集群。
网络路由问题
更复杂的是网络路由问题。AL2023使用systemd-networkd进行网络配置,其默认行为会为所有接口设置相同的路由优先级(metric=1024)。当Cilium创建并附加新的ENI(如ens6)时,系统会出现两个具有相同优先级的默认路由:
default via x.x.x.x dev ens5 proto dhcp src x.x.x.x metric 1024
default via y.y.y.y dev ens6 proto dhcp src y.y.y.y metric 1024
这种配置违反了Cilium对单一默认路由的假设,导致代理启动失败。
解决方案
节点引导问题解决
对于节点引导问题,有两种解决方案:
-
使用正确的YAML模板:通过
user_data_template_path参数提供符合要求的YAML配置。 -
更新Terraform EKS模块:v20.5.0及以上版本已添加对AL2023的支持,可以正确处理节点引导。
网络路由问题解决
针对网络路由冲突,最有效的解决方案是调整主接口的路由优先级:
- 创建自定义网络配置:在节点启动时,为
ens5接口创建专门的网络配置:
[Match]
Name=ens5
[Network]
DHCP=yes
[DHCP]
RouteMetric=1000
- 应用配置并重启网络服务:
cat > /etc/systemd/network/05-ens5.network << EOF
[Match]
Name=ens5
[Network]
DHCP=yes
[DHCP]
RouteMetric=1000
EOF
systemctl restart systemd-networkd.service
这样配置后,路由表将变为:
default via x.x.x.x dev ens5 proto dhcp src x.x.x.x metric 1000
default via y.y.y.y dev ens6 proto dhcp src y.y.y.y metric 1024
通过降低主接口的路由优先级,确保系统始终优先使用ens5作为默认路由,解决了Cilium的兼容性问题。
最佳实践建议
- 统一网络接口管理:对于Cilium管理的接口,建议配置
Unmanaged=yes以避免systemd-networkd干扰:
[Match]
Name=!ens5
[Link]
Unmanaged=yes
-
考虑不同实例类型的网络接口命名:AWS不同实例类型可能使用不同的网络接口命名方案(如
ens*、enp*等),配置时应考虑全面匹配。 -
监控网络连接:即使解决了路由问题,仍需监控跨ENI的通信,特别是对外部服务的访问。
结论
Amazon EKS优化AMI在AL2023上的部署虽然初期遇到了一些挑战,但通过正确的配置调整完全可以稳定运行Cilium等高级CNI插件。关键在于理解AL2023的网络管理机制与Kubernetes CNI插件的交互方式,并通过适当的优先级调整确保网络流量的正确路由。
随着AWS和Cilium社区的持续优化,未来这些配置可能会变得更加简单。但目前提供的解决方案已经过实际验证,可以作为生产环境部署的参考。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust099- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00