Nginx Ingress使用建议
Nginx型的Ingress在集群中部署NGINX Ingress控制器来对流量进行负载均衡及访问控制。由于NGINX Ingress控制器插件使用开源社区的模板与镜像,且部署在集群内部,因此它的稳定性与使用时的配置、当前集群状态密切相关。本文介绍Nginx Ingress Controller的使用建议,您可以参考以下使用建议,对集群内的Ingress Controller进行配置,获得最佳的使用效果。
Nginx Ingress Controller优化设置
- 使用合适的副本数和资源限制
默认情况下,通过插件中心安装的Nginx Ingress Controller的实例数为2,您可以根据业务的实际需要进行调整。
在部署Nginx Ingress Controller时,多实例会默认分配到不同可用区或者是同一可用区的不同节点。
同时建议您不要将Nginx Ingress Controller的资源限制设置太小,避免OOM所带来的流量中断。建议CPU限制值不低于1000m、内存限制值不低于2 GiB。
- 使用独占节点来提升Nginx Ingress性能与稳定性
提前在创建节点时,设置节点的污点。在安装Nginx Ingress Controller插件时,在容忍策略中添加该节点的污点。详情请参见独占节点部署。
- 优化Nginx Ingress性能
Nginx Ingress Controller性能调优主要分为系统参数调优和Nginx参数调优:
- 系统参数调优:华为云上的操作系统已经默认优化了一些常见参数,其他还需要调优的系统参数主要包括连接队列的大小、源端口的范围。系统参数调优后可以保证Nginx处理高并发请求的能力,以及在连接后端时不会因为端口耗尽而失败。
- Nginx参数调优:
- 调高 keepalive 连接最大请求数:高并发环境中,增大 Nginx 与 client 的 keepalive 连接的最大请求数量,避免产生大量的TIME_WAIT 连接。
- 调高单个 Worker 最大连接数:Nginx参数主要可以调整单个Worker的最大连接数来保证Nginx Ingress Controller处理高并发请求的能力。
- 调高 keepalive 最大空闲连接数:高并发环境下,建议将 keepalive 值配置为1000。
- 设置网关超时:请您确保后端的业务长连接的超时时间不低于Nginx Ingress Controller的连接超时时间。
- 对Nginx Ingress Controller配置HPA进行自动扩容
一般情况下,Nginx Ingress Controller已经有足够的能力应对业务的突发流量。如果在高负载情况下仍不满足您的要求,也可以配置HPA对Nginx Ingress Controller进行扩容。具体操作,请参见创建HPA策略。
- 为后端服务配置合理的preStop Hook
后端服务滚动更新时,Nginx Ingress Controller会将正在终止的Pod从后端服务器中移除,但会保持还在处理的请求的连接。如果后端服务Pod在收到结束信号后立即退出,可能会导致正在处理的请求失败或部分流量仍被转发到已经退出的Pod中,导致部分流量损失。为了避免这种情况,建议在后端服务的Pod中配置preStop Hook,在Pod被移除后继续工作一段时间,以解决流量中断的问题。
工作负载配置示例如下:
... spec: template: spec: containers: - name: app lifecycle: # 配置preStop Hook,等待30秒后退出。 # 需要容器中存在sleep命令。 preStop: exec: command: - sleep - 30
Nginx Ingress Controller的可观测性
华为云提供了云原生监控插件,可以实现对Nginx Ingress Controller的可观测性监控,帮助您更好地了解Ingress流量状态。操作详情请参见监控NGINX Ingress控制器指标。
Nginx Ingress Controller进阶功能
- 使用多套Nginx Ingress Controller
在应用中,您可能会因为内外网隔离等需要,在集群中部署多套Nginx Ingress Controller。操作详情请参见安装多个NGINX Ingress控制器。
- 通过Nginx Ingress Controller进行应用的蓝绿或灰度发布
支持通过Nginx Ingress实现对服务的灰度发布,操作详情请参见使用Nginx Ingress实现灰度发布和蓝绿发布。
- 通过Nginx Ingress Controller配置重定向规则
支持通过Nginx Ingress设置重定向规则,操作详情请参见为Nginx Ingress配置重定向规则。
- Nginx Ingress对接不同协议的后端服务
Ingress默认使用HTTP协议连接到后端服务,但也可以代理不同协议的后端服务:
- HTTPS:请参见为Nginx Ingress配置HTTPS协议的后端服务。
- gRPC:请参见为Nginx Ingress配置GRPC协议的后端服务。