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 StartedRust0207
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0133
MinerUA high-quality tool for convert PDF to Markdown and JSON.一站式开源高质量数据提取工具,将PDF转换成Markdown和JSON格式。Python08
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
wgai开箱即用的JAVAAI在线训练识别平台&OCR平台AI合集包含旦不仅限于(车牌识别、安全帽识别、抽烟识别、常用类物识别等) 图片和视频识别,可自主训练任意场景融合了AI图像识别opencv、yolo、ocr、esayAI内核识别;AI智能客服、AI语言模型、 无任何第三方API接口可定制化自主离线化部署并自主化行业化使用避免占用内存、GPU消耗训练与识别分开使用;Java05
tiny-universe《大模型白盒子构建指南》:一个全手搓的Tiny-UniverseJupyter Notebook03