confd + Nacos | 无代码侵入的配置变更管理
为什么要支持 confd,老的应用配置管理模式是启动时读取配置文件,然后重新读取配置文件需要应用重启。一般的配置管理系统都是代码侵入性的,应用接入配置管理系统都需要使用对应的 SDK 来查询和监听数据的变更。对于一些已经成熟的系统来说,接入 SDK 来实现动态配置管理是很难实现的, Nacos 通过引入配置管理工具 confd 可以实现系统的配置变更做到无代码侵入性。
confd 是一个轻量级的配置管理工具,可以通过查询后端存储系统来实现第三方系统的动态配置管理,如 Nginx、Tomcat、hHaproxy、Docker 配置等。 confd 目前支持的后端有 etcd、Zookeeper 等,Nacos 1.1 版本通过对 confd 定制支持 Nacos 作为后端存储。
confd 能够查询和监听后端系统的数据变更,结合配置模版引擎动态更新本地配置文件,保持和后端系统的数据一致,并且能够执行命令或者脚本实现系统的 reload 或者重启。
安装 confd 插件
confd 的安装可以通过源码安装方式,confd 基于 Go 语言编写,其编译安装依赖 Go,首先需要确保本地安装了 Go,版本不低于v1.10
创建 confd 目录,下载 confd 源码,编译生成可执行文件
复制 confd 文件到 bin 目录下,启动 confd
confd 结合 Nacos 实现 Nginx 配置管理示例
本文介绍使用 Nacos 结合 confd 实现 Nginx 配置管理,为简单起见以 Nginx 的黑名单功能为演示示例,Nacos 使用官网部署的服务,域名为 console.nacos.io 。Nginx 的安装可以参考网上文章
1.创建 confd 所需目录
confd 配置文件默认在 /etc/confd 中,可以通过参数 -confdir 指定。目录中包含两个子目录,分别是:conf.d templates
2.创建 confd 配置文件
confd 会先读取 conf.d 目录中的配置文件(toml格式),然后根据文件指定的模板路径去渲染模板。
内容为如下,其中 nginx.conf.tmpl 文件为 confd 的模版文件,keys 为模版渲染成配置文件所需的配置内容,/usr/local/nginx/conf/nginx.conf 为生成的配置文件
3.创建模版文件
拷贝 Nginx 原始的配置,增加对应的渲染内容
增加内容为:
4.在 Nacos 上创建所需的配置文件
在 public 命名空间创建 dataId 为 nginx.conf 的配置文件,group 使用默认的 DEFAULT_GROUP 即可,配置内容为 json 格式
5. 启动confd
启动 confd,从 Nacos 获取配置文件,渲染 Nginx 配置文件。backend 设置成 Nacos,node 指定访问的 Nacos 服务地址,watch 让 confd 支持动态监听
6.查看 Nginx 配置文件,验证 Nginx 启动
查看生成的 /usr/local/nginx/conf/nginx.conf 配置文件是否存在如下内容
curl 命令访问 Nginx,验证是否返回正常。http 响应状态码为 200 说明访问 Nginx 正常
7.查看本机 Ip,加到 Nacos 配置文件黑名单中
假设本机的 Ip 为30.5.125.107,将本机的 Ip 加入到 Nginx 黑名单
8.查看 Nginx 配置文件,验证黑名单是否生效
查看生成的/usr/local/nginx/conf/nginx.conf配置文件是否存在如下内容
curl 命令访问 Nginx,访问应该被拒绝,返回 403
总结
本文介绍了使用 Nacos 结合 confd 来做自动化管理,confd 作为轻量级的配置管理工具可以做到对第三方系统无代码侵入性。本文只是简单使用 Nginx 的黑名单功能来演示 Nacos+confd 的使用方式,当然 Nginx 还具有限流、反向代理等功能以及其他的系统比如Haproxy、Tomcat、Docker 等也同样可以使用 Nacos+confd 做管理,大家可以到 Nacos官网贡献相应的 Demo 或者方案。
本文作者:中间件小哥
本文为云栖社区原创内容,未经允许不得转载。