Kubernetes集群中ALB作为Ingress控制器的实践指南

一、技术背景与架构解析

在容器化部署场景中,Ingress控制器作为集群流量入口的核心组件,承担着路由分发、负载均衡、安全防护等关键职责。主流云服务商提供的ALB(Application Load Balancer)凭借其智能路由、自动扩缩容、WAF集成等特性,逐渐成为Kubernetes Ingress控制器的优选方案。

1.1 传统Ingress方案的局限性

传统Nginx Ingress控制器在应对现代微服务架构时暴露出三大痛点:

  • 手动扩缩容滞后:流量突增时需人工干预调整副本数
  • TLS管理复杂:证书轮换需重启Pod影响业务连续性
  • 高级路由缺失:不支持基于请求内容的复杂匹配规则

1.2 ALB的技术优势

ALB通过与Kubernetes API的深度集成,实现了三大技术突破:

  • 动态服务发现:自动感知Service/Endpoint变化,更新路由规则
  • 智能流量调度:支持基于请求头、Cookie、路径的七层路由
  • 弹性伸缩能力:根据实时流量自动调整后端实例数量

典型架构中,ALB控制器通过CRD(Custom Resource Definitions)与Kubernetes交互,将Ingress资源转换为ALB监听器配置。当创建或更新Ingress时,控制器自动调用云服务商API完成负载均衡器配置变更。

二、部署实施全流程

2.1 前提条件准备

需满足以下环境要求:

  • Kubernetes集群版本 ≥1.18
  • 云服务商账户具备ALB创建权限
  • VPC网络配置支持ALB所需的80/443端口
  • 安装Helm 3.x+包管理工具

2.2 控制器安装步骤

  1. 添加Helm仓库

    1. helm repo add eks-charts https://charts.example.com/stable
    2. helm repo update
  2. 创建命名空间

    1. kubectl create namespace ingress-system
  3. 部署控制器

    1. helm install alb-ingress eks-charts/alb-ingress \
    2. --namespace ingress-system \
    3. --set controller.serviceAccount.create=true \
    4. --set controller.serviceAccount.name=alb-ingress-controller \
    5. --set cloud.region=cn-north-1 \
    6. --set cloud.vpcId=vpc-xxxxxx
  4. 验证部署状态

    1. kubectl get pods -n ingress-system
    2. kubectl logs -f <pod-name> -n ingress-system

2.3 Ingress资源配置示例

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: demo-ingress
  5. annotations:
  6. alb.ingress.example.com/scheme: internet-facing
  7. alb.ingress.example.com/target-type: ip
  8. spec:
  9. ingressClassName: alb
  10. rules:
  11. - host: demo.example.com
  12. http:
  13. paths:
  14. - path: /api
  15. pathType: Prefix
  16. backend:
  17. service:
  18. name: api-service
  19. port:
  20. number: 80
  21. - path: /static
  22. pathType: Prefix
  23. backend:
  24. service:
  25. name: static-service
  26. port:
  27. number: 8080

三、高级功能配置

3.1 自动扩缩容策略

通过以下注解配置基于CPU利用率的自动扩缩:

  1. annotations:
  2. alb.ingress.example.com/autoscaling.enabled: "true"
  3. alb.ingress.example.com/autoscaling.min-nodes: "2"
  4. alb.ingress.example.com/autoscaling.max-nodes: "10"
  5. alb.ingress.example.com/autoscaling.cpu-target: "70"

3.2 TLS证书管理

支持两种证书配置方式:

  1. 手动证书:通过Secret引用

    1. spec:
    2. tls:
    3. - hosts:
    4. - secure.example.com
    5. secretName: tls-secret
  2. 自动证书:集成Let’s Encrypt

    1. annotations:
    2. cert-manager.io/cluster-issuer: letsencrypt-prod
    3. acme.cert-manager.io/http01-edit-in-place: "true"

3.3 WAF集成方案

通过注解启用Web应用防火墙:

  1. annotations:
  2. alb.ingress.example.com/waf.enabled: "true"
  3. alb.ingress.example.com/waf.acl-id: "waf-xxxxxx"

四、运维监控体系

4.1 关键指标监控

建议监控以下核心指标:

  • ALB连接数(ConnectionsCount)
  • 后端处理延迟(TargetProcessingTime)
  • 5xx错误率(HTTPCode_Target_5XX_Count)
  • 请求吞吐量(RequestCountPerTarget)

4.2 日志收集方案

配置Fluentd收集ALB访问日志:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: fluentd-config
  5. data:
  6. fluent.conf: |
  7. <source>
  8. @type tail
  9. path /var/log/containers/alb-ingress-controller*.log
  10. pos_file /var/log/alb-controller.log.pos
  11. tag alb.controller
  12. <parse>
  13. @type json
  14. </parse>
  15. </source>

4.3 常见故障排查

现象 可能原因 解决方案
502 Bad Gateway 后端Pod未就绪 检查Endpoint状态
403 Forbidden 安全组限制 更新入站规则
TLS握手失败 证书不匹配 验证Secret内容
路由不生效 注解配置错误 检查Ingress注解

五、性能优化建议

  1. 连接池优化:调整keepalive-timeout参数减少TCP连接建立开销
  2. 缓存策略:对静态资源配置Cache-Control头提升响应速度
  3. 压缩配置:启用Gzip压缩减少传输数据量

    1. annotations:
    2. alb.ingress.example.com/gzip.enabled: "true"
    3. alb.ingress.example.com/gzip.types: "text/css application/javascript image/svg+xml"
  4. 会话保持:基于Cookie的会话亲和性配置

    1. annotations:
    2. alb.ingress.example.com/stickiness.enabled: "true"
    3. alb.ingress.example.com/stickiness.type: "lb_cookie"
    4. alb.ingress.example.com/stickiness.cookie-duration: "86400"

通过上述技术方案,ALB Ingress控制器可显著提升容器化应用的流量管理能力,实现从简单路由到智能流量治理的跨越。实际部署时需结合具体业务场景调整参数配置,并建立完善的监控告警体系确保系统稳定性。