网关型应用配置最佳实践
应用场景
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参数来避免连接跟踪表打满导致无法新建链接的问题。