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

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实例。

修复步骤

  1. 修改Service配置,将spec.type从LoadBalancer改为ClusterIP,aws-loadbalancer-controller的ip目标类型支持直接对接ClusterIP类型Service的Pod IP,无需LoadBalancer类型的Service做中间层。
  2. 将external-dns.alpha.kubernetes.io/hostname注解从Service移到Ingress资源上,确保域名解析到共享ALB的地址。
  3. 替换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

架构参考

archi

注意事项

  • 所有需要共享同一个ALB的Ingress资源,必须配置完全相同的alb.ingress.kubernetes.io/group.name注解,才能保证规则合并到同一个ALB实例
  • 共享ALB的全局配置(如监听端口、证书、安全组等)会以group内第一个创建的Ingress配置为准,后续同group的Ingress修改全局配置不会生效

内容的提问来源于stack exchange,提问作者Ben Rhouma Zied

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:57:03