在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
相关产品推荐
相关产品推荐

