更新时间:2024-09-26 GMT+08:00
分享

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控制器

相关文档