单Kubernetes集群混合本地与AWS弹性节点架构方案咨询
本地裸金属+AWS弹性节点单K8s集群选型及落地建议
Ingress控制器选型
适配跨环境节点的核心要求是不绑定单一云厂商API、支持拓扑感知路由,优先选以下两类:
- 社区版NGINX Ingress Controller
适配性最广,无云厂商依赖,裸金属、AWS节点均可正常运行。部署时用DaemonSet绑定本地固定网关节点,给AWS弹性节点加节点亲和性排斥规则,避免弹性缩容时误删Ingress副本导致流量中断。配置上开启拓扑感知路由规则,正常状态下优先把流量转发到本地节点后端,仅本地节点负载超过阈值时才将新连接导到AWS侧节点,大幅减少跨网流量成本。
避坑:不要选AWS Load Balancer Controller这类强绑定云资源的Ingress实现,这类控制器无法识别本地裸金属节点后端,容易出现路由黑洞。 - Cilium Ingress
如果计划用eBPF优化集群网络,优先选这个。它自带L7负载均衡能力,可替换kube-proxy,跨本地与AWS节点的转发延迟比传统iptables模式低30%左右,原生支持拓扑域路由规则,和后续的弹性调度逻辑适配度更高。
物理负载均衡器选型
按业务流量规模选两类方案即可:
- HAProxy+Keepalived软负载集群(性价比首选)
用3台本地物理服务器部署即可,成本仅为硬件负载均衡的1/10不到。支持K8s后端自动发现、节点健康检查,直接对接Ingress的NodePort端口,可自定义后端权重——正常状态下给本地节点配5-10倍于AWS节点的权重,保证绝大多数流量走本地资源;专线或本地节点故障时自动切流量到AWS侧节点,实现基础容灾。 - F5 BIG-IP/A10 Thunder硬件负载均衡(高性能场景选)
如果业务峰值流量超过10Gbps,对SSL卸载、四层转发稳定性要求高,选这类硬件LB。可通过K8s CCM组件自动同步Service、Ingress的后端节点列表,无需手动维护配置,适合核心生产场景。
不管选软/硬负载,都要把AWS侧节点的健康检查间隔设为5秒以内,节点被弹性回收时要及时剔除后端,避免丢包。
核心架构落地实践
- 网络层配置
单集群跨环境节点不要用VXLAN等Overlay封装跨网流量,本地节点之间走机房二层内网,本地与AWS节点之间优先走专线打通三层路由,没有专线的话用WireGuard做加密隧道,性能比IPSec高40%以上。给节点按位置打拓扑标签:本地节点打topology.kubernetes.io/zone=local-baremetal,AWS节点按对应可用区打云侧标签,开启K8s原生服务拓扑路由、拓扑约束功能,默认Pod优先调度到本地节点。 - 弹性伸缩配置
部署Cluster Autoscaler时拆分两个节点组:本地节点组关闭缩容权限,保证常驻资源不被回收;AWS弹性节点组配置15-30分钟的缩容冷却时间,避免流量波动导致节点频繁创建删除产生额外费用。给AWS弹性节点加污点node-role.kubernetes.io/cloud-spot:NoSchedule,只有配置了对应容忍的低优先级无状态业务、离线任务可以调度到云侧节点,核心业务强制通过节点亲和性绑定本地节点,避免核心业务跑到云上。AWS侧节点优先选Spot实例,成本仅为按需实例的30%,配合Pod优先级抢占机制,Spot实例被回收时自动迁移Pod即可。 - 存储层配置
本地节点用OpenEBS或Longhorn搭建本地PV池供核心业务使用,云侧节点对应的StorageClass配置WaitForFirstConsumer绑定策略,避免Pod调度到本地节点却误挂载AWS云盘导致存储不可用。 - 成本管控
跨环境流量优先走专线,避免公网出方向流量费;配置网络策略让云侧节点所有对外流量都经过本地机房出口网关,统一审计管控,避免云侧资源产生意外公网流量账单。
内容的提问来源于stack exchange,提问作者Kyroo0
相关产品推荐
相关产品推荐

