AWS EKS单ALB跨多Namespace配置及External DNS使用问题咨询
问题原因与解决方案
额外创建经典负载均衡器的根本原因
你将Service资源的spec.type设置为了LoadBalancer,EKS默认会为该类型的Service自动创建AWS经典负载均衡器(CLB)用于暴露服务,该逻辑和aws-loadbalancer-controller管理的Ingress ALB完全独立,所以每次部署都会额外生成多余的CLB实例。
现有方案的其他问题
你将External DNS的域名注解配置在了Service资源上,会导致域名被解析到自动创建的CLB地址,而非你预期的共享ALB地址,请求链路不符合设计。
共享ALB的核心配置alb.ingress.kubernetes.io/group.name逻辑本身是正确的,可以实现跨Namespace的Ingress规则合并到同一个ALB实例。
修复步骤
- 修改Service配置,将
spec.type从LoadBalancer改为ClusterIP,aws-loadbalancer-controller的ip目标类型支持直接对接ClusterIP类型Service的Pod IP,无需LoadBalancer类型的Service做中间层。 - 将
external-dns.alpha.kubernetes.io/hostname注解从Service移到Ingress资源上,确保域名解析到共享ALB的地址。 - 替换Ingress的废弃API版本:
extensions/v1beta1替换为networking.k8s.io/v1beta1,适配k8s v1.20版本的API规范。
修正后配置示例
Service配置
# service-realm1-dev.yaml apiVersion: v1 kind: Service metadata: name: sentinel namespace: realm1-dev labels: run: sentinel spec: ports: - port: 5001 name: ps1 protocol: TCP selector: app: sentinel type: ClusterIP
Ingress配置
# ingress realm1-app apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/group.name: sentinel-ingress alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/healthcheck-protocol: HTTP alb.ingress.kubernetes.io/healthcheck-port: traffic-port alb.ingress.kubernetes.io/healthcheck-interval-seconds: "15" alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5" alb.ingress.kubernetes.io/success-codes: 200-300 alb.ingress.kubernetes.io/healthy-threshold-count: "2" alb.ingress.kubernetes.io/unhealthy-threshold-count: "2" alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80}]' external-dns.alpha.kubernetes.io/hostname: realm1.dev.sentinel.mysite.io name: sentinel-ingress-controller namespace: realm1-dev spec: rules: - host: realm1.dev.sentinel.mysite.io http: paths: - path: / pathType: Prefix backend: servicePort: 5001 serviceName: sentinel
架构参考

注意事项
- 所有需要共享同一个ALB的Ingress资源,必须配置完全相同的
alb.ingress.kubernetes.io/group.name注解,才能保证规则合并到同一个ALB实例 - 共享ALB的全局配置(如监听端口、证书、安全组等)会以group内第一个创建的Ingress配置为准,后续同group的Ingress修改全局配置不会生效
内容的提问来源于stack exchange,提问作者Ben Rhouma Zied
相关产品推荐
相关产品推荐

