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

K8s Ingress结合AWS ALB(ClusterIP+target-type:ip)无法生成负载均衡地址求助

AWS EKS中Ingress无法生成ALB负载均衡地址的排查与解决方案

1. 先确认AWS Load Balancer Controller是否部署

EKS集群默认不会自动创建ALB,必须部署AWS Load Balancer Controller(替代旧版ALB Ingress Controller)。执行命令检查控制器Pod状态:

kubectl get pods -n kube-system -l app.kubernetes.io/name=aws-load-balancer-controller

如果没有运行中的Pod,先完成控制器部署:确保绑定了具备ALB创建、子网访问等权限的IAM角色,再通过Helm或YAML完成安装。

2. 检查Ingress资源的核心配置

2.1 验证注解完整性

使用target-type: ip时,必须配置必要的ALB注解,示例正确配置如下:

annotations:
  alb.ingress.kubernetes.io/scheme: internet-facing # 内网ALB用internal
  alb.ingress.kubernetes.io/target-type: ip
  alb.ingress.kubernetes.io/subnets: subnet-xxxxxx, subnet-yyyyyy # 指定带集群标签的VPC子网
  alb.ingress.kubernetes.io/security-groups: sg-xxxxxx # 可选,无则控制器自动创建

注意:指定的子网必须带有标签kubernetes.io/cluster/<你的集群名称>: shared或owned,否则控制器无法识别可用子网。

2.2 确认Backend关联有效性

  • 检查ClusterIP Service是否正确关联Pod:
    kubectl get svc <你的Service名称>
    
    确保TARGETS列显示Pod的IP和端口,说明Service与Pod绑定正常。
  • 检查Pod状态:
    kubectl get pods -l <你的Pod标签>
    
    确认Pod处于Running状态,且就绪探针(readinessProbe)检查通过。

3. 验证集群网络适配性(针对target-type: ip)

使用target-type: ip时,ALB直接转发流量到Pod IP,需满足:

  • 集群使用VPC CNI插件(EKS默认配置),Pod拥有VPC内独立IP,而非通过kube-proxy转发。
  • Pod所在子网与ALB子网连通,且安全组允许ALB访问Pod的业务端口(如80/443)。

4. 查看控制器日志定位错误

通过控制器日志获取具体故障信息:

kubectl logs -n kube-system -l app.kubernetes.io/name=aws-load-balancer-controller --follow

常见错误场景:IAM权限不足、子网标签缺失、Service/Pod未就绪、Ingress语法错误等。

5. 正确配置示例参考

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: nginx:latest
        ports:
        - containerPort: 80
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/subnets: subnet-0123456789abcdef0, subnet-0abcdef1234567890
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443},{"HTTP":80}]'
spec:
  ingressClassName: alb # 必须指定对应控制器的ingressClass
  rules:
  - host: my-app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-svc
            port:
              number: 80

service.yaml(ClusterIP类型)

apiVersion: v1
kind: Service
metadata:
  name: my-app-svc
spec:
  type: ClusterIP
  selector:
    app: my-app
  ports:
  - port: 80
    targetPort: 80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:31:03