从AWS ELB迁移至基于EKS的API Gateway的方案咨询
核心可行方案推荐
方案一:EKS Ingress Controller + 单私有NLB + API Gateway VPC Link(最具成本效益)
- 核心逻辑:用AWS Load Balancer Controller在EKS里创建单个私有NLB,通过Ingress规则把15个服务的路径/域名映射到对应的K8s Service,再让API Gateway通过一条VPC Link连接这个NLB,最后在API Gateway里配置路由对应Ingress的路径规则。
- 成本优势:只需要1个私有NLB+1条VPC Link,替代原来15个NLB的开销,Ingress Controller是EKS免费组件,仅收NLB和API Gateway的基础费用,成本直接砍到原来的1/15左右。
- 性能优势:Ingress做统一路径转发,API Gateway可以针对不同路由单独配置缓存、限流、认证,边缘缓存还能降低后端EKS的压力,整体延迟比传统ELB更低(VPC内NLB访问+API Gateway边缘缓存)。
- 配置步骤:
- 在EKS部署AWS Load Balancer Controller,创建Ingress资源时指定
alb.ingress.kubernetes.io/scheme: internal生成私有NLB。 - 给Ingress加路由规则,比如
/service1/*指向service1的Service,/service2/*指向service2的Service。 - 在API Gateway创建VPC Link,关联这个私有NLB。
- 在API Gateway配置对应服务的路由,目标选VPC Link,路径匹配和Ingress规则保持一致。
- 在EKS部署AWS Load Balancer Controller,创建Ingress资源时指定
方案二:API Gateway直连EKS Service(小流量场景首选)
- 核心逻辑:如果当前请求量不大,把EKS的Service设为
ClusterIP或NodePort,通过VPC Link的私有IP模式直接访问,完全省去NLB的费用。 - 成本优势:只花API Gateway和VPC Link的钱,没有NLB的额外开销,适合请求量小的阶段。
- 注意事项:
- 确保API Gateway的VPC Link所在VPC和EKS集群VPC连通(同VPC或VPC peering)。
- ClusterIP只能在EKS集群内部访问,所以VPC Link要部署在EKS所在VPC的私有子网里。
- 用NodePort的话,要开放节点安全组对应端口给API Gateway的VPC Link ENI。
过渡阶段双架构共存方案
- 流量切分:用Route 53加权路由,把部分流量导去原ELB,部分导去新API Gateway,逐步增大新架构的流量占比,直到完全迁移。
- 监控对齐:在API Gateway和ELB上配置相同的CloudWatch指标(请求量、延迟、错误率),实时对比两者的运行状态。
- 快速回滚:保留原ELB的所有配置,一旦新架构出问题,直接把流量切回ELB。
关于Ingress作为入口的可行性
完全可行,而且是当前场景下的最优解。Ingress Controller可以统一管理所有服务的入口流量,避免为每个服务单独建NLB,还支持TLS终止、路径转发、限流等功能,配合API Gateway的边缘能力(缓存、认证、全局流量管理),整体架构的性能和扩展性都比传统ELB强得多。
内容的提问来源于stack exchange,提问作者Ricardo Cunha
相关产品推荐
相关产品推荐

