You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在同一VPC的两个不同EKS集群间共享同一个ELB给Ingress Controller?

能否在同一VPC的两个不同EKS集群间共享同一个ELB给Ingress Controller?

首先直接给结论:可以实现,但不能用你之前尝试的那种直接在Helm配置里绑定现有ELB的方式——这也是你的Ingress Controller Service一直Pending的原因,我来给你拆解清楚:

为什么你的方法行不通?

EKS里的LoadBalancer类型Service默认会独占并完全管控对应的ELB:它会自动创建ELB、配置安全组、注册/注销后端节点。当你强行指定一个已经被另一个集群Service占用的ELB时,Kubernetes会因为无法获取这个ELB的控制权(比如没有权限修改已有配置,或者ELB的归属权不在当前集群的IAM角色下),导致Service一直卡在Pending状态。

可行的实现方案

下面给两种靠谱的方案,优先推荐第一种:

方案1:使用NLB(Network Load Balancer)+ 多Target Groups(推荐)

NLB天生支持跨集群共享,而且性能更优,步骤如下:

  • 确认两个EKS集群在同一个VPC,且集群节点(或Fargate Pod)的安全组允许NLB的流量访问(比如开放Ingress Controller的默认端口80/443)。
  • 复用你现有的NLB(或者创建新的),为每个集群的Ingress Controller创建独立的Target Group:
    • 如果你用NodePort模式部署Ingress Controller,Target Group的目标类型选实例,把第二个集群的节点IP+NodePort端口加进去;
    • 如果你用IP模式(比如Ingress Controller的Pod直接获取VPC IP),Target Group的目标类型选IP,把第二个集群的Ingress Controller Pod IP加进去。
  • 在NLB的Listener上配置路由规则:比如按域名(app1.example.com转发到集群1的Target Group,app2.example.com转发到集群2的),或者按路径前缀区分。
  • 把两个集群的Ingress Controller Service类型设为NodePort或ClusterIP(不要用LoadBalancer),避免K8s自动创建新的ELB。

方案2:使用Classic ELB(不推荐,功能受限)

如果一定要用现有的Classic ELB,只能手动管理ELB的后端:

  • 把两个集群的Ingress Controller都部署为NodePort类型;
  • 手动登录AWS控制台,把第二个集群的节点IP+NodePort端口添加到Classic ELB的后端实例列表;
  • 注意:不要让任何一个集群的Service类型设为LoadBalancer,否则K8s会自动覆盖ELB的后端配置,导致手动添加的节点被移除。

关键注意事项

  • 权限配置:确保两个集群的IAM角色(比如节点角色或Ingress Controller的服务账号角色)拥有操作ELB/Target Group的权限,比如elasticloadbalancing:RegisterTargets、elasticloadbalancing:DeregisterTargets等;
  • 流量路由:需要在NLB/ELB层面或者Ingress Controller的Ingress资源里做好路由规则,避免两个集群的服务流量冲突;
  • 状态同步:如果要实现Pod/节点变化时自动注册到Target Group,可以用AWS的Target Group自动注册功能(比如基于EC2标签筛选节点,或者用VPC CNI的IP模式自动发现Pod IP);
  • 版本兼容:尽量保持两个集群的Ingress Controller版本一致,避免配置语法或功能差异导致问题。

备注:内容来源于stack exchange,提问作者Jaumzera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:44:51