背景:
在某项目部署测试过程中, k8s中的微服务出现连接集群之外的数据库服务超时,虽然是偶发性,但出现频率较高,已对安全产品按期交付构成较大风险,需要尽快解决。
问题分析:
为方便更加清晰的理解问题,首先介绍下服务整体部署架构。在3台VM虚机中部署k8s集群,在k8s集群内部署安全产品的容器服务,而数据库服务则是部署另外3台VM进行高可用,部署架构图1如下:

控制台中的日志报错为以下截图2:

起初我也认为这是一个简单的数据库连接超时问题,于是首先进行了常规的排查。
1.检查工程的k8s配置文件中db host的配置问题,没有问题;
2.检查网络状态,进入容器中对数据库ip地址进行telnet测试,也是可以正常返回的,没有问题;
3.检查数据库主机是否有对源包进行限制,运维同事反馈并未对安全产品访问做限制,没有问题;
4.检查HikariCP数据库连接池配置,经过日志排查,发现启动的时候连接是没有报错的,且前几次连接都没有问题,超时是出现在几次正常连接后;
5.检查是否存在慢查询和数据库连接数是否正常,一切正常。
定位问题:
经过多轮的检查,并尝试修改数据库连接配置,发现无论对数据库配置连接的参数如何修改,虽然数据库连接日志报错信息发生了变化,但是寻根究底,其本质原因依旧是超时的问题,如下图3。

由于所有资源池都使用了相同的标准化k8s环境,导致排查问题时直接忽略了k8s本身,各种尝试未果后我们将目光重新投向了k8s集群本身。