当前位置: 首页>编程语言>正文

阿里云k8s环境下,因slb限额导致的发布事故

一、背景

阿里云k8s容器,在发布java应用程序的时候,客户端访问出现500错误。

后端服务是健康且可用的,网关层大量500错误请求,slb没有流入和流出流量。

经过回滚,仍未能解决错误。可谓是一次血的教训,特此记录下来,如果你也使用的是阿里云slb来实现k8s的service,值得一看,希望对你有所帮助。

在讲述这个事故前,我们还是照旧把系统架构交待清楚。

二、系统架构

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第1张

1、kong upsteam

配置的是slb的内网IP+端口号
阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第2张

2、k8s的服务service

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第3张

3、slb监听虚拟服务器

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第4张
阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第5张

下面是重点需要关注的,,虚拟服务器组下的四个服务器,对应的就是4个pod的ip地址。

本文所述的发布事故,就是这里的服务器没有及时更新导致。

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第6张

4、pod的ip地址

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第7张
绿色的“Running”,表示Pod节点运行健康。
我这里使用了服务注册中心consul,从consul也能佐证java服务是健康无疑。

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第8张

当然我还进一步验证,直接访问pod的接口,比如/info和/health接口,返回的版本号和健康状态也都是正常。

三、问题排查

1、kong网关报错

23937#0: *2832787172 connect() failed (111: Connection refused) while connecting to upstream
request: request: "PUT /api/v3/pub/user/extend HTTP/1.1"

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第9张

2、slb监控

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第10张

3、k8s容器的服务service

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第11张

Error syncing load balancer [lb-bpxxxxxxxxxx6ndspgh]: Message: There is backend server has reached to the quota limit number of load balancers that it could be related to.

根据错误信息,查找阿里云的帮助文档,https://help.aliyun.com/zh/slb/classic-load-balancer/developer-reference/api-slb-2014-05-15-errorcodes

见下:

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第12张
由此可见,是配额限制了。

继续查找文档,
https://help.aliyun.com/zh/slb/classic-load-balancer/product-overview/limits-1

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第13张
可以看到,这里是默认50,所以我们到slb的配额设置查看,并申请调整至80。

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第14张

申请调额:

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第15张

四、踩过的坑

1、slb的每个实例可以保有的监听数量超过了限制

所以尝试把k8s的服务service修改到另外一个slb,结果还是一样报错。

2、新建一个slb,跟上面的报错一样。

service状态一直是创建中

阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第16张

3、配额限制

我们缺少监控和报警,导致我们的思路,一直不能理解发布为啥会突然出错。
阿里云k8s环境下,因slb限额导致的发布事故,在这里插入图片描述,第17张

五、总结

1、Kong upstream配置pod IP

在没有解决问题前,只能在Kong的upstream配置pod IP,而非slb ip。虽然能解决,但是不够动态,显然是临时解决方案。

因为我们没有去做动态注册kong upstream。

2、阿里云的限额配置不直观

说同一台服务器可以重复添加为slb后端服务器的次数使用了53,可是到底是哪些,并不知晓。。为啥不弄个明细给用户可以查看。

3、架构的优化

  • 去slb的依赖
  • kong部署到k8s
  • 引入ingress网关
  • 使用k8s内部的发现机制

https://www.xamrdz.com/lan/5qn1849186.html

相关文章: