文章

ingress-nginx 性能压测

Ingress是目前Kubernetes集群流量接入的重要入口,了解其性能指标有助于用户选用合适的网络方案。

测试方案

通过wrk压测后端nginx服务,对比ingress-nginx和原生nginx以及直连后端性能的差异,如下图:

  • 方案1:压测后端Nginx,通过直连POD IP,Service IP以及External IP等方式

  • 方案2:压测经过Nginx代理,通过直连POD IP,Service IP以及External IP等方式

  • 方案3:压测经过Ingress,通过域名以及不同CPU和worker的性能差距

硬件配置

  • CPU:2.5GHz Intel® Xeon® Cascade Lake 处理器,睿频3.1GHz,8 cores

  • Memory: 32GB

测试环境

  • wrk: 0896020 [epoll] Copyright (C) 2012 Will Glozer

  • nginx:1.19.4

  • k8s:1.18.4

  • centos:7.9.2009

  • Linux:Linux version 4.14.105-19-0012 (root@TENCENT64.site) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16)

wrk的安装可以参考如下文章:Http性能压测工具 | wrk

性能测试

通过wrk测试,主要关注RPS(每秒请求量):

 wrk -t8 -c200 -d30s --latency <待测试地址>

如Ingress测试命令:

 wrk -t8 -c200 -d30s --latency http://nginx.qcloud.com/1kb.bin

以下表格数据的单位都是RPS

方案1:压测后端Nginx

分别对POD IP,Service IP以及External IP进行多次测试取平均值:

直连POD IP

Service IP

External IP

184301.41

164534.72

166734.20

方案2:压测经过Nginx代理

分别对POD IP,Service IP以及External IP进行多次测试取平均值:

直连POD IP

Service IP

External IP

86305.15

80890.86

80651.81

方案3: 压测经过Ingress

对比默认配置下,ingress-ingress的性能:

默认配置(process worker: auto)

优化配置(8 wrokers)

31143.15

36255.13

对比不同CPU,不同worker数量的性能差异,以下ingress-nginx已做性能调优:

CPU

Worker

RPS

1

1

11347.38

2

2

17564.26

4

4

29761.89

8

8

41613.75

不同方案性能对比

方案

访问方式

RPS

备注

后端Nginx

External IP

166734

经过Nginx代理

External IP

80651

开启keepalive, 关闭log

ingress-nginx(原始)

域名

31143

ingress-nginx(优化)

域名

36255

调整worker,access-log, keepalive等

以上测试的影响因素还有很多,但是可以看出ingress-nginx的rps对比后端Nginx相差挺大的,而且最新版本的ingress-nginx优化过后的性能提升也不明显。

配置文件

本文测试文件见:https://github.com/DevOpsDays2020/ingress-nginx-benchmark

参考资料

  1. ingress nginx benchmark:https://qingwave.github.io/ingress-benchmark/

License:  CC BY 4.0