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
参考资料
- ingress nginx benchmark:https://qingwave.github.io/ingress-benchmark/
「真诚赞赏,手留余香」
请我喝杯咖啡?
使用微信扫描二维码完成支付
