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

EKS中通过kubectl将CLB迁移至ALB时Ingress无地址排查

问题根因

配置未生效、ALB无法创建的原因有4个:

  • 前置组件缺失:EKS集群默认不搭载AWS Load Balancer Controller(原ALB Ingress Controller),没有该组件时,集群无法解析ALB类型的Ingress资源,也不会调用AWS API创建负载均衡实例。
  • 注解格式错误:alb.ingress.kubernetes.io/tags注解值末尾多了无效的**字符,会导致控制器解析配置失败,直接跳过该Ingress资源的处理。
  • Ingress类配置不兼容:使用的kubernetes.io/ingress.class: alb是旧版本控制器的注解,在v2.2.0及以上版本的AWS Load Balancer Controller中已被废弃,若集群中没有手动创建名为alb的IngressClass资源,控制器无法匹配到需要处理的Ingress。
  • 监听配置缺失:ALB默认仅创建80端口的HTTP监听,原有CLB同时开放8080、8443两个端口,当前Ingress没有配置多端口监听规则,就算ALB创建完成也无法兼容原有业务的访问逻辑。
修正方案
  1. 先在EKS集群部署匹配版本的AWS Load Balancer Controller,为控制器对应的服务账户配置IRSA权限,确保组件拥有创建ALB、目标组、监听、安全组等资源的AWS API权限。
  2. 修正Ingress配置中的格式错误,替换废弃注解,补充必要的监听配置,参考如下可直接使用的配置:
apiVersion: v1
kind: Service
metadata:
  name: helloworld
spec:
  ports:
  - name: https
    port: 8443
    protocol: TCP
    targetPort: 8080
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: helloworld
  type: NodePort
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: helloworld
  annotations:
    alb.ingress.kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    # 移除了末尾多余的**
    alb.ingress.kubernetes.io/tags: Environment=dev,Team=app
    # 配置ALB监听端口,可根据业务需求调整
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    # 开启HTTPS需要配置ACM证书ARN,替换为自己的证书信息即可
    # alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<区域ID>:<账号ID>:certificate/<证书ID>
    # 可选:开启HTTP自动跳转到HTTPS
    # alb.ingress.kubernetes.io/ssl-redirect: '443'
    # 配置空闲超时时间,和原有CLB的3600秒配置保持一致
    alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=3600
spec:
  # 显式指定Ingress类,兼容新版控制器
  ingressClassName: alb
  rules:
    - host: "*.amazonaws.com"
      http:
        paths:
          - path: /echo
            pathType: Prefix
            backend:
              service:
                name: helloworld
                port:
                  number: 8080
  1. 应用配置后,执行kubectl describe ingress helloworld查看资源事件,可看到ALB创建的流程日志,等待1-3分钟资源创建完成后,执行kubectl get ingress即可看到ADDRESS字段返回ALB的公网访问域名。

注意:如果原有业务直接通过CLB的8080、8443端口访问,ALB默认监听80/443端口,可以通过修改listen-ports注解调整监听端口,或者在业务侧切换为80/443端口访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:15:37