K8s集群中如何将Nginx Ingress Controller与AWS ALB集成?
AWS环境下Nginx Ingress Controller集成七层ALB的常用方案
下面是目前市场上常用的几种实现思路,兼顾ALB的七层特性和Nginx Ingress的灵活路由能力:
方案一:ALB作为前端七层入口,转发流量到Nginx Ingress Controller
- 部署Nginx Ingress Controller时,选择用NodePort或者内部NLB暴露服务(不需要外部四层LB)。
- 在AWS控制台/基础设施即代码工具(Terraform/CloudFormation)中创建七层ALB,配置HTTP/HTTPS监听规则,将所有目标域名的流量转发到Nginx Ingress的NodePort节点池或者内部NLB。
- 路由流程:用户请求先到ALB,ALB完成基础七层校验(比如主机头匹配、WAF拦截),再转发到Nginx Ingress;Nginx负责URL重写、精细路径路由到后端Pod(比如把
domain.com/order重写到/swagger/index.html)。 - 核心优势:保留ALB的所有七层功能(访问日志、请求统计、WAF集成、证书管理),同时完全利用Nginx的URL重写、正则路由等高级能力。
- 注意事项:确保ALB所在安全组开放对应端口,能访问到Kubernetes集群节点;Nginx Ingress的Service端口映射要和ALB转发端口一致。
方案二:自定义Target Group绑定ALB与Nginx Ingress Pod
- 部署Nginx Ingress Controller时,不使用默认的LoadBalancer Service,而是创建AWS Target Group,将运行Nginx Ingress Pod的节点(或直接用Pod IP,需开启IP模式)注册到该Target Group。
- 创建七层ALB,将监听规则指向这个Target Group,让ALB直接把流量转发到Nginx Ingress Pod。
- 路由流程:ALB直接对接Nginx Pod,跳过中间的Service层,Nginx处理所有路由和重写逻辑。
- 核心优势:减少流量转发环节,性能更优;同时保留ALB的七层配置项和统计数据。
- 注意事项:如果用节点注册,需要维护节点在Target Group中的状态;如果用Pod IP,需借助Kubernetes控制器或AWS Lambda自动同步Pod IP到Target Group,避免Pod重启后流量中断。
方案三:混合使用Gateway API与Nginx Ingress Controller
- 同时部署AWS Gateway API控制器和Nginx Ingress Controller。
- 通过Gateway API定义
HTTPRoute资源,将需要URL重写的路径(如/order、/customer)转发到Nginx Ingress的Service,其他路径可直接由ALB处理。 - 核心优势:兼顾Gateway API的标准化路由定义,同时保留Nginx的灵活重写能力和ALB的管理特性。
- 注意事项:需确保Gateway API控制器与Kubernetes集群版本兼容,熟悉
HTTPRoute的规则配置。
附Nginx Ingress重写配置示例
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: service-route-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /swagger/index.html$1 spec: ingressClassName: nginx rules: - host: domain.com http: paths: - path: /order(/|$)(.*) pathType: Prefix backend: service: name: orderservice port: { number: 80 } - path: /customer(/|$)(.*) pathType: Prefix backend: service: name: customerservice port: { number: 80 }
内容的提问来源于stack exchange,提问作者Sammy
相关产品推荐
相关产品推荐

