网关型应用配置最佳实践
应用场景
NGINX、API Gateway等网关型应用通常作为系统的统一流量入口,承担着高并发请求的调度、转发、认证等核心功能。
当系统面临短时间内大量外部请求(如促销活动、系统切换、定时任务触发等高峰时段)时,网关所在节点会迅速建立大量连接,此时节点的连接跟踪表会迅速增长。为了避免连接跟踪表打满后新建连接请求被内核丢弃,导致请求访问失败,需要采取措施确保连接跟踪表的容量能够应对这些高峰流量。
本文将为您提供网关型应用的配置建议,具体优化项如下:
优化kube-proxy配置
建议网关型应用根据请求量调整节点的kube-proxy中的连接跟踪表和等待时间配置,确保连接跟踪表的容量能够满足高峰诉求,避免连接跟踪表打满导致请求访问失败。
调整节点kube-proxy参数的步骤如下:
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“节点管理”,在右侧选择“节点池”页签。
- 单击节点池名称后的“配置管理”。
- 在侧边栏滑出的“配置管理”窗口中,修改kube-proxy参数。
     
     名称 参数 参数说明 取值 修改说明 配置方式 节点连接跟踪表中保留的最小连接跟踪条目数 conntrack-min 用于设置Linux连接跟踪表(conntrack table)中保留的最小连接跟踪条目数。该参数确保系统始终预留指定数量的连接跟踪记录,即使当前实际连接数较低,以避免因动态分配/释放资源带来的性能开销。 可通过以下命令查询: sysctl net.nf_conntrack_max 默认:131072 - 控制台/API TCP连接在关闭状态下等待的时间 conntrack-tcp-timeout-close-wait 控制TCP连接在关闭状态下等待的时间。 可通过以下命令查询: sysctl net.netfilter.nf_conntrack_tcp_timeout_close_wait 默认:1h0m0s - 控制台/API 更多参数说明请参见修改节点池配置。 
- 单击“确定”,完成配置操作。
     
       如果集群中包含不同的节点池,您需要确保将网关型应用调度至调整kube-proxy参数后的节点池中。操作详情请参见设置节点亲和调度(nodeAffinity)。 
增加告警配置
告警配置
- 在集群中安装CCE节点故障检测插件,该插件将会为您监控集群节点的异常事件,请关注连接跟踪表耗尽的检查项指标,该指标的默认告警阈值为90%。详情请参见CCE节点故障检测。
- 安装云原生监控插件,并设置监控数据上报至AOM服务。详情请参见云原生监控插件。
- 开启告警中心,告警中心默认规则中包含节点链接跟踪表不足的告警。详情请参见通过告警中心一键配置告警。
     
     告警项 告警说明 告警类型 依赖项 PromQL 节点链接跟踪表不足 检查节点链接跟踪表是否充足 指标类 云原生监控插件 节点故障检测插件 problem_gauge{type="ConntrackFullProblem"} >= 1 
触发告警后排查建议
触发上述告警后,建议您排查内核日志(dmesg)中出现conntrack full的报错日志,说明Conntrack数量已经达到conntrack_max数量限制。您需要提升Linux连接跟踪Conntrack数量限制。
执行以下命令,确认目前Conntrack中的各协议占用情况和数量。
- 查看表明细,可以配合grep管道查看状态,也可以使用cat /proc/net/nf_conntrack查看。 
     conntrack -L 
- 查看计数 
     cat /proc/sys/net/netfilter/nf_conntrack_count 
- 查看表当前最大值 
     cat /proc/sys/net/netfilter/nf_conntrack_max 
告警解决建议
- 如果出现大量TCP协议的占用,您需要确认具体业务,如果是短连接型应用可以考虑整改成长连接型。
- 建议您在业务上线前进行压测,并观察对应指标,确认应用是否存在连接未及时释放的情况。
- 您可以通过扩容节点或调整kube-proxy参数来避免连接跟踪表打满导致无法新建链接的问题。
 
  