如何通过Terraform创建NLB并在Helm安装Nginx-controller时完成关联且二者部署分离
问题解答
完全可以实现,该拆分方案是生产环境常用的最佳实践,既可以实现负载均衡层和Ingress控制器层的独立管理迭代,也能避免Ingress控制器重装时触发负载均衡重建导致的业务中断。
前置准备:Terraform创建NLB的注意要点
- 提前通过Terraform完成对应云厂商NLB资源创建,同步创建匹配后续Nginx Controller暴露端口的目标组:默认HTTP对应80端口、HTTPS对应443端口,目标组类型根据K8s集群节点类型选择,例如AWS EKS的EC2节点选
instance类型、Fargate节点选ip类型。 - 配置NLB、目标组关联的安全组规则,放通NLB到K8s节点对应业务端口的流量,同时确保健康检查端口的访问权限配置正确。
Helm安装Nginx Controller关联已有NLB的配置方法
不需要使用Helm默认的自动创建LoadBalancer类型Service的逻辑,只需修改values.yaml配置指定已有NLB的关联参数即可,不同云厂商只需替换对应annotation配置,通用配置逻辑如下:
- 调整Service类型配置,禁用自动创建负载均衡:
controller: service: # 目标组为instance类型时选NodePort,ip类型时可以选ClusterIP type: NodePort annotations: # 以下为AWS NLB的示例annotation,其他云厂商替换为对应厂商的指定已有LB的配置即可 service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: instance service.beta.kubernetes.io/aws-load-balancer-name: <你提前创建的NLB名称>
- 执行安装命令加载自定义配置:
helm install ingress-nginx ingress-nginx/ingress-nginx -f values.yaml -n ingress-nginx --create-namespace
后续独立管理说明
- 如需调整NLB的监听规则、带宽、安全组等配置,直接修改Terraform代码执行
terraform apply即可,无需改动Nginx Controller的部署配置 - 如需升级/调整Nginx Controller的配置,直接执行Helm相关操作即可,不会影响已有的NLB资源配置,完全实现两个组件的生命周期解耦
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

