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

一、背景

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

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

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

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

二、系统架构

在这里插入图片描述

1、kong upsteam

配置的是slb的内网IP+端口号
在这里插入图片描述

2、k8s的服务service

在这里插入图片描述

3、slb监听虚拟服务器

在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述

4、pod的ip地址

在这里插入图片描述
绿色的“Running”,表示Pod节点运行健康。
我这里使用了服务注册中心consul,从consul也能佐证java服务是健康无疑。

在这里插入图片描述

当然我还进一步验证,直接访问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"

在这里插入图片描述

2、slb监控

可以看到,出现故障之后,连接数和流量将至零。也就是说,http请求没有能够进入后端pod节点。

在这里插入图片描述

3、k8s容器的服务service

在这里插入图片描述

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

见下:

在这里插入图片描述
由此可见,是配额限制了。

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

在这里插入图片描述
可以看到,这里是默认50,所以我们到slb的配额设置查看,并申请调整至80。

在这里插入图片描述

申请调额:

在这里插入图片描述

四、踩过的坑

比较明确的一点是,问题出在slb。所以我们的思路,先是换一个,不行之后,又新建一个全新的slb。其实,问题在于我们忽视了k8s对很多指标的配额阈值。

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

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

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

service状态一直是创建中

在这里插入图片描述

3、配额限制

我们缺少监控和报警,导致我们的思路,一直不能理解发布为啥会突然出错。
在这里插入图片描述

五、总结

1、Kong upstream配置pod IP

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

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

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

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

3、架构的优化

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[React 进阶系列] React Context 案例学习:使用 TS 及 HOC 封装 Context

[React 进阶系列] React Context 案例学习:使用 TS 及 HOC 封装 Context 具体 context 的实现在这里:[React 进阶系列] React Context 案例学习:子组件内更新父组件的状态。 根据项目经验是这样的,自从换了 TS 之后,…

光线追踪12 - Defocus Blur(虚焦模糊)

现在我们的最后一个特性是虚化模糊。注意,摄影师通常称之为景深,所以请确保在光线追踪的朋友中只使用虚化模糊这个术语。 真实相机具有虚化模糊是因为它们需要一个大孔(而不仅仅是针孔)来收集光线。一个大孔会导致所有物体失去焦点…

社交媒体革新者:揭秘Facebook对在线互动的影响

1. Facebook的兴起与发展 Facebook由马克扎克伯格在哈佛大学宿舍创建,最初只是服务于哈佛大学学生的社交网络。然而,其后快速扩张到其他大学和全球,成为了全球最大的社交媒体平台之一。其发展历程不仅是数字时代的典范,也是创业成…

CrySiS勒索病毒最新变种来袭,加密后缀为kharma

CrySiS勒索病毒,又称Dharma,首次出现是在2016年,2017年5月此勒索病毒万能密钥被公布之后,之前的样本可以解密,导致此勒索病毒曾消失了一段时间,不过随后又马上出现了它的一款最新的变种样本,加密…

101 向一个不存在的路径发送请求, get 得到 404, post 得到 405

前言 这是 最近碰到的一个问题, 大概是在 2022.05.30 前端这边 发送了一个业务请求过来, 这个请求路径是服务端这边不存在的 但是 奇怪的一点就是, 如果是以 get 请求发送过来, 服务端响应的是正确的 404 "Not Found", 但是 如果是以 post 请求发送过来, 服务端这边…

Springboot整合rabbitmq(二)

spring boot,为了简化rabbitMQ的使用,它在这里面给咱们提供了一个模板对象。 这个模板对象是什么? 这个模板对象叫RabbitTemplate对象。说白了其实是用来简化rabbitMQ的操作 也就是说之后我们可以通过这个模板对象直接去向rabbitMQ中发送消息…

1分钟做的AI利润表分析报告,效果怎样?

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事! 自从去年年初ChatGPT3.5推出以来,AI大模型的话题就一直非常热了。相比于AI聊天、生成图片,亦…

STL空间配置器

参考《STL源码剖析-侯捷》一书 (SGI版本STL) 前置 六大组件 空间配置器实现 SGI版本的空间配置器有两个,一个名为allocator,一个名为alloc。前者符合部分标准,但效率不好,只是对operator new和operator delete进行了封装&#…

工业互联网平台的专题报告

文 | BFT机器人 前言: 现在是工业时代,也是数字化时代。随着信息技术的快速发展,工业不得不依托数字化转型升级。当前数字化转型已经成为企业提升竞争力的关键手段。 工业互联网平台作为数字化转型的重要支撑,能够帮助企业实现生…

(day 2)JavaScript学习笔记(基础之变量、常量和注释)

概述 这是我的学习笔记,记录了JavaScript的学习过程,我是有一些Python基础的,因此在学习的过程中不自觉的把JavaScript的代码跟Python代码做对比,以便加深印象。我本人学习软件开发纯属个人兴趣,大学所学的专业也非软件…

Linux系统编程(六)高级IO

目录 1. 阻塞和非阻塞 IO 2. IO 多路转接(select、poll、epoll) 3. 存储映射 IO(mmap) 4. 文件锁(fcntl、lockf、flock) 5. 管道实例 - 池类算法 1. 阻塞和非阻塞 IO 阻塞 IO:会等待操作的…

猫咪挑食怎么办?预防猫咪挑食的生骨肉冻干分享

在现今社会,养猫的人越来越多,大家都把自家的小猫当作宝贝来宠爱。然而,这种宠爱有时也会导致猫咪养成挑食的不良习惯。那么,猫咪挑食怎么办呢? 今天,我要分享一个既能确保猫咪不受苦,又能有效…

嵌入式学习第二十六天!(网络传输:TCP编程)

TCP通信: 1. TCP发端: socket -> connect -> send -> recv -> close 2. TCP收端: socket -> bind -> listen -> accept -> recv -> send -> close 3. TCP需要用到的函数: 1. co…

MySQL--索引底层数据结构详解

索引是什么? 索引是帮助MySQL高效获取数据的排好序的数据结构,因此可知索引是数据结构。 概念很抽象,但是类比生活中的例子就很容易理解,比如一本厚厚的书,我们想取找某一小节,我们可以根据目录去快速找到…

Python实现快速排序算法

Python实现快速排序算法 下面是使用 Python 实现的快速排序算法的示例代码&#xff1a; def quick_sort(arr):if len(arr) < 1:return arrelse:pivot arr[0]less_than_pivot [x for x in arr[1:] if x < pivot]greater_than_pivot [x for x in arr[1:] if x > pi…

Spring Boot中Excel数据导入导出的高效实现

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

基于SpringBoot+MYSQL的大学生租房平台

目录 1、 前言介绍 2、主要技术 3、系统流程 3.1、操作流程 3.2、登录流程 3.3、删除信息流程 3.4、添加信息流程 4、功能需求 5、系统设计 5.1、功能结构设计 5.1、数据库概念设计 6、运行截图(部分) 6.1、管理员功能实现 6.1.1、房东管理 6.1.2、信息审批管理 …

Redis 配置文件详解

Units 单位 配置大小单位&#xff0c;开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit&#xff0c;大小写不敏感。 # Redis configuration file example. # # Note that in order to read the configuration file, Redis must be # started with …

聚观早报 | 腾讯QQ测试AI对话功能;哪吒L官宣4月交付

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月8日消息 腾讯QQ测试AI对话功能 哪吒L官宣4月交付 中国对瑞士等6国试行免签 Redmi K70至尊版细节曝光 Meta正…

IDEA自定义Maven仓库

Maven 是一款广泛应用于 Java 开发的工具&#xff0c;其作用类似于一个全自动的 JAR 包管理器&#xff0c;能够方便地导入开发所需的相关 JAR 包。在使用 Maven 进行 Java 程序开发时&#xff0c;开发者能够极大地提高开发效率。以下是关于如何安装 Maven 以及在 IDEA 中配置自…