暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

KubeSphere ingress 优化

一笑而起 2021-10-24
3636

Ingress简介:应用路由提供一种聚合服务的方式,您可以将集群的内部服务通过一个外部可访问的 IP 地址暴露给集群外部。其本质还是nginx。

KubeSphere 中ingress配置方式参见官网即可。

应用路由 (kubesphere.io)


ingress 参照nginx,在高并发的场景下,我们是需要优化的,默认值无法满足我们的需求。

参考官方优化文档:

Tuning NGINX for Performance - NGINX

参考上面的文档,ingress的优化配置,我们分成两部分来进行改写。ingress一部分配置来源于configmap,用于所有ingress应用的基本配置;一部分是每个具体应用的单独配置,这部分是ingress的注解配置。

ingress注解:


修改方式如上图所示,可以增加的配置项具体可以参考如下官方链接,来详细了解,这里我抽几个介绍,来进行优化。

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

比如,如下的三个配置值:

    nginx.ingress.kubernetes.io/proxy-connect-timeout: '1'

    nginx.ingress.kubernetes.io/proxy-read-timeout: '2'

    nginx.ingress.kubernetes.io/proxy-send-timeout: '2'

proxy-connect-timeout 选项 设置 nginx 与 upstream pod 连接建立的超时时间,ingress nginx 默认设置为 5s,由于在 nginx 和业务均在内网同机房通信,我们将此超时时间缩短到 1s。

proxy-read-timeout 选项 设置 nginx 与 upstream pod 之间读操作的超时时间,ingress nginx 默认设置为 60s,当业务方服务异常导致响应耗时飙涨时,异常请求会长时间夯住 ingress 网关,我们在拉取所有服务正常请求的 P99.99 耗时之后,将网关与 upstream pod 之间读写超时均缩短到 3s(根据实际业务的数值进行调整),使得 nginx 可以及时掐断异常请求,避免长时间被夯住。

configmap调整:

configmap的调整是需要admin权限的。在项目kubesphere-controls-system中找到需要修改的configmap。名称规则:kubesphere-router-{项目名称}-nginx。其中项目名称是ingress所在的项目名称。


具体可以修改的configmap值可以参考官方文档,查看具体释义和默认值。

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/


nginx 充当服务端,调整 keep-alive 连接超时和最大请求数

ingress-nginx 使用 keep-alive 选项设置 接入层 nginx 和 ingress nginx 之间的连接超时时间(默认超时时间为 75s)

使用 keep-alive-requests 选项设置 接入层 nginx 和 ingress nginx 之间 单个连接可承载的最大请求数(默认情况下单连接处理 100 个请求之后就会断开释放)。

keep-alive: "75"

keep-alive-requests: "10000"

nginx 充当客户端,调整 upstream-keepalive 连接超时和最大空闲连接数

upstream-keepalive-connections: "200"

upstream-keepalive-requests: "10000"

upstream-keepalive-timeout: "100"



对于初学者而言,ingress的configmap的寻找方式可能都是很难的。本文对大体的修改内容、修改方式、优化建议,以及对应的详细官方文档进行了梳理,方便深入学习和对照。



文章转载自一笑而起,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论