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

测试方案

通过wrk压测后端nginx服务,对比ingress-nginx, 原生nginx,以及直连后端性能的差异,如下图:
在这里插入图片描述

  • 方案1,经过ingress
  • 方案2,经过nginx
  • 方案3,直连ip

硬件环境

  • CPU: 2x Intel® Xeon® CPU E5-2620 v4 @ 2.10GHz, 32 cores
  • Network: 10-Gigabit
  • Memory: 128 GB

测试工具

  • wrk, 4.1.0, 在k8s master测试,减少网络影响
  • ingress-nginx, 0.30.0, https://github.com/kubernetes/ingress-nginx
  • nginx, 1.13.5
  • k8s, v1.14.9
  • centos, 7.3.1611(Linux 4.9.2)

测试方法

ingress-nginx主要工作是转发请求到后端pod, 我们着重对其RPS(每秒请求量)进行测试

通过以下命令

wrk -t4 -c1000 -d120s --latency http://my.nginx.svc/1kb.bin

测试结果

不同cpu下的性能

对比不同ingress-nginx启动不同worker数量的性能差异,以下测试ingress-nginx开启了keepalive等特性

CPURPS
15534
211203
422890
847025
1693644
24125990
32153473

在这里插入图片描述

如图所示,不同cpu下,ingress的rps与cpu成正比,cpu在16核之后增长趋势放缓。

不同方案的性能对比

方案RPS备注
ingress-nginx(原始)69171
ingress-nginx(配置优化)153473调整worker,access-log, keepalive等
nginx336769开启keepalive, 关闭log
直连ip340748测试中的pod ip为真实ip

通过实验可以看到,使用nginx代理和直连ip,rps相差不大;原始ingress-nginx rps很低,优化后rps提升一倍,但对比nginx还是有较大的性能差异。

结论

默认ingress-nginx性能较差,配置优化后也只有15w RPS,对比原生nginx(33W) 差距较大。经过分析主要瓶颈在于ingress-nginx的lua过滤脚本,具体原因需要进一步分析。

参考

  1. https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#upstream-keepalive-connections
  2. https://www.nginx.com/blog/testing-performance-nginx-ingress-controller-kubernetes/

配置文件

本测试所有配置见qingwave/ingress-nginx-benchmark

Logo

开源、云原生的融合云平台

更多推荐