上篇作为 Nacos 5W1H 系列文章的开篇,从“What” 讲述了 Nacos 配置管理能帮我们解决的问题:以简单、优雅、高效的方式管理配置,实现配置的动态变更,大大降低运维成本。
本文将围绕“Where”,讲述 Nacos 配置管理的三个典型的应用场景:数据库连接信息
限流阈值和降级开关
流量的动态调度
数据库连接信息
曾经有朋友跟我聊过一个问题,“业务飞速发展,团队越来越大,人员流动也相对频繁起来,怎么才能更好的保证数据的安全性,不被泄露呢?”。他提到这样一个场景,公司创立初期,服务后端的代码都是他一行一行码出来的,当时只有他一个人,后端与数据库的连接配置信息也就直接放置在项目的配置文件中。他使用的是 Spring Boot 框架,配置信息就是存放在 application.properties 中,使用 Spring 的 profile 属性保证不同环境连接不同的数据库。如下所示:
生产环境:application-prod.propertiesspring.datasource.url=生产环境的数据库连接地址
spring.datasource.username=生产环境的数据库用户账号
spring.datasource.password=生产环境的数据库用户密码
开发环境:application-dev.propertiesspring.datasource.url=开发环境的数据库连接地址
spring.datasource.username=开发环境的数据库用户账号
spring.datasource.password=开发环境的数据库用户密码
测试、预发环境也是类似。这种将数据库连接信息直接放置在配置文件中,跟着项目代码一起通过 Git 管理,的确是有蛮大的数据泄露的风险。试想,一个新来不久的小伙伴,他一当要投入研发工作,有 Git Pull 代码的权限之后,代表他可能就拥有了直接操作线上数据库的权限了。当时的我给他建议可以通过以下几个方面去降低数据风险:将数据库连接信息等敏感配置从项目中剥离;
数据库增加 IP 白名单连接限制;
最小权限原则:每个账号只配置所必需的权限,避免删表删库等高危操作;
定期修改数据库账号、密码。
回想起来,我当时给的建议并没有完全解决他的问题,甚至还带来了其他一些问题。例如,上述的第一点,“将敏感配置从项目剥离”,剥离出来的敏感配置存放到哪里?怎么管理这些配置呢?也许,你会想到,存放到应用部署机器的环境变量或某个文件中。不,一样有风险,说不定哪天开发同学必须得登录上机器排查问题,就有泄露的风险,总之,得尽可能地做到在整个开发流程都不会有任何泄露的风险。应用中可能不只是连接一个数据源,分库分表的情况&