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

在Nginx Ingress Controller前部署AWS负载均衡控制器的可行性与实现方案

架构合理性分析

这个架构完全可行,适合以下场景:

  • 需要保留Nginx Ingress Controller的现有能力(比如TCP/UDP协议转发、复杂路由规则、自定义WAF、URL重写等)
  • 希望利用AWS ALB的原生特性(比如自动扩缩容、集成AWS WAF/Shield、HTTP/3支持、与AWS服务的无缝集成)

唯一需要注意的是,额外的网络转发层级会带来轻微延迟,但在绝大多数业务场景下,该延迟可忽略不计。

具体实现步骤

1. 安装AWS负载均衡控制器(ALB Controller)

使用Helm完成安装,确保控制器权限配置正确:

# 添加AWS EKS Charts仓库
helm repo add eks https://aws.github.io/eks-charts
helm repo update

# 安装ALB控制器,替换<你的集群名>为实际集群名称
helm upgrade --install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=<你的集群名> \
  --set serviceAccount.create=true \
  --set serviceAccount.name=aws-load-balancer-controller

2. 配置IngressClass区分两个控制器

为Nginx和ALB分别创建独立的IngressClass,避免控制器之间的冲突:

Nginx IngressClass(若未配置过)

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: nginx
spec:
  controller: k8s.io/ingress-nginx

ALB IngressClass

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: alb
  annotations:
    ingressclass.kubernetes.io/is-default-class: "false" # 不要设为默认,避免干扰现有Nginx Ingress
spec:
  controller: ingress.k8s.aws/alb

3. 创建ALB Ingress指向Nginx服务

编写Ingress资源,让ALB将流量转发到集群内的Nginx Ingress Controller服务:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-to-nginx
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing # 若需内部ALB,改为internal
    alb.ingress.kubernetes.io/target-type: ip # 直接转发到Pod IP;若Nginx是NodePort类型,改为instance
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
    alb.ingress.kubernetes.io/certificate-arn: <你的ACM证书ARN> # HTTPS需要配置此参数
    alb.ingress.kubernetes.io/ssl-redirect: "443" # 自动将HTTP请求重定向到HTTPS
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: ingress-nginx-controller # Nginx控制器的服务名称,通常在ingress-nginx命名空间
                port:
                  number: 80 # Nginx服务的HTTP端口;若需转发HTTPS,改为443

注意:如果Nginx服务是ClusterIP类型,target-type用ip;如果是NodePort类型,用instance,同时确保节点安全组允许ALB访问对应NodePort端口。

4. 调整Nginx服务配置(可选)

若之前Nginx控制器使用的是经典负载均衡器,可以将其服务改为ClusterIP类型,避免暴露多余的公网入口:

kubectl patch service ingress-nginx-controller -n ingress-nginx -p '{"spec":{"type":"ClusterIP"}}'

5. 验证流量链路

  • 访问ALB分配的域名,确认能正常访问后端服务
  • 查看ALB的访问日志和Nginx控制器的日志,确认流量从ALB成功转发到Nginx,再到后端Pod
关键注意事项
  • 安全组配置:确保ALB安全组允许80/443端口的公网流量,同时集群节点/Pod的安全组允许ALB安全组访问Nginx的80/443端口
  • IAM权限:ALB控制器需要具备创建ALB、目标组、安全组等资源的IAM权限,确保绑定的IAM角色权限完整
  • SSL终止策略:可以选择在ALB层终止SSL(推荐,利用ACM证书),也可以将HTTPS流量直接转发到Nginx,由Nginx终止,根据业务需求选择
  • 监控:分别监控ALB和Nginx的指标(比如请求量、响应时间、错误率),确保链路稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:43:35