
# Nginx Ingress使用建议
Nginx型的Ingress在集群中部署[NGINX Ingress控制器](https://support.huaweicloud.com/usermanual-cce/cce_10_0034.html)来对流量进行负载均衡及访问控制。由于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插件时，在容忍策略中添加该节点的污点。详情请参见[独占节点部署](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_10027.html#cce_bestpractice_10027__section8921175018146)。
  

- **优化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策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0208.html)。
  

- **为后端服务配置合理的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的可观测性
CCE提供了[云原生监控插件](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html)，可以实现对Nginx Ingress Controller的可观测性监控，帮助您更好地了解Ingress流量状态。操作详情请参见[监控NGINX Ingress控制器指标](https://support.huaweicloud.com/usermanual-cce/cce_10_0830.html)。
#### Nginx Ingress Controller进阶功能
- **使用多套Nginx Ingress Controller**
  在应用中，您可能会因为内外网隔离等需要，在集群中部署多套Nginx Ingress Controller。操作详情请参见[安装多个NGINX Ingress控制器](https://support.huaweicloud.com/usermanual-cce/cce_10_0034.html#cce_10_0034__section1057051834311)。
  

- **通过Nginx Ingress Controller进行应用的蓝绿或灰度发布**
  支持通过Nginx Ingress实现对服务的灰度发布，操作详情请参见[使用Nginx Ingress实现灰度发布和蓝绿发布](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_10003.html)。
  

- **通过Nginx Ingress Controller配置重定向规则**
  支持通过Nginx Ingress设置重定向规则，操作详情请参见[为Nginx Ingress配置重定向规则](https://support.huaweicloud.com/usermanual-cce/cce_10_0780.html)。
  

- **Nginx Ingress对接不同协议的后端服务**
  Ingress默认使用HTTP协议连接到后端服务，但也可以代理不同协议的后端服务：
  - HTTPS：请参见[为Nginx Ingress配置HTTPS协议的后端服务](https://support.huaweicloud.com/usermanual-cce/cce_10_0697.html)。
  
  - gRPC：请参见[为Nginx Ingress配置gRPC协议的后端服务](https://support.huaweicloud.com/usermanual-cce/cce_10_0855.html)。
   
 
