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

EKS部署Ingress生成两个ALB:如何用单个ALB对接多命名空间

解决EKS跨命名空间Ingress共享单个ALB的问题

要让不同命名空间的Ingress共用一个ALB,核心是利用AWS ALB Ingress Controller的Ingress Group功能,以下是具体解决步骤和排查要点:

1. 确认ALB Ingress Controller版本要求

跨命名空间的Ingress Group功能从ALB Controller v2.1.0 开始支持,EKS 1.21需要搭配符合版本要求的控制器。如果你的控制器版本低于该版本,先升级到对应兼容版本。

2. 确保Ingress配置的一致性

你已经在两个Ingress中添加了alb.ingress.kubernetes.io/group.name: my-group,这是分组的核心标识,但还需要保证以下配置完全一致:

  • kubernetes.io/ingress.class: "alb":必须统一指定为alb类
  • alb.ingress.kubernetes.io/scheme:两个Ingress的网络方案(internet-facing/internal)必须相同
  • alb.ingress.kubernetes.io/target-type:目标类型(instance/ip)必须一致
  • 若指定了alb.ingress.kubernetes.io/subnets,两个Ingress的子网配置必须完全相同

你的现有YAML中上述配置均一致,这部分没问题。

3. 验证ALB Controller的权限

ALB Controller需要具备访问所有相关命名空间(tenant1、tenant2)的资源权限,包括Ingress、Service、Endpoints等。如果控制器的ServiceAccount是在kube-system命名空间,需确保其绑定的ClusterRole包含以下核心权限:

rules:
- apiGroups: ["networking.k8s.io"]
  resources: ["ingresses", "ingresses/status"]
  verbs: ["get", "list", "watch", "update"]
- apiGroups: [""]
  resources: ["services", "endpoints", "pods"]
  verbs: ["get", "list", "watch"]

4. 部署与验证步骤

  1. 删除现有两个Ingress资源:
    kubectl delete ingress ingress-apps -n tenant1
    kubectl delete ingress nginx -n tenant2
    
  2. 重新应用你的Ingress配置(现有YAML已满足分组要求):
    kubectl apply -f your-ingress-file.yaml
    
  3. 查看Ingress状态,确认两个Ingress关联到同一个ALB:
    kubectl get ingress -A
    
    输出中ADDRESS列应显示同一个ALB的DNS名称。
  4. 若仍生成两个ALB,查看ALB Controller日志排查问题:
    kubectl logs -n kube-system deployment/aws-load-balancer-controller
    
    日志中会提示配置冲突、权限不足等具体原因。

关键注意事项

  • 不同命名空间的Ingress路径不能冲突(你的配置中/app1/*和/app2/*无冲突,符合要求)
  • 若使用target-type: ip,需确保集群开启了VPC CNI,且Pod有直接的VPC IP

内容的提问来源于stack exchange,提问作者nn222

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:36:59