confd + Nacos | 无代码侵入的配置变更管理

本文涉及的产品
云原生网关 MSE Higress,422元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 为什么要支持 confd,老的应用配置管理模式是启动时读取配置文件,然后重新读取配置文件需要应用重启。一般的配置管理系统都是代码侵入性的,应用接入配置管理系统都需要使用对应的 SDK 来查询和监听数据的变更。

为什么要支持 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 源码,编译生成可执行文件

mkdir -p $GOPATH/src/github.com/kelseyhightower
wget https://github.com/nacos-group/confd/archive/v0.18.0.tar.gz
tar -xvf v0.18.0.tar.gz
mv confd-0.18.0 confd
cd confd
make

复制 confd 文件到 bin 目录下,启动 confd

sudo cp bin/confd /usr/local/bin
confd

confd 结合 Nacos 实现 Nginx 配置管理示例

本文介绍使用 Nacos 结合 confd 实现 Nginx 配置管理,为简单起见以 Nginx 的黑名单功能为演示示例,Nacos 使用官网部署的服务,域名为 console.nacos.io 。Nginx 的安装可以参考网上文章

003

1.创建 confd 所需目录

confd 配置文件默认在 /etc/confd 中,可以通过参数 -confdir 指定。目录中包含两个子目录,分别是:conf.d templates

mkdir -p /etc/confd/{conf.d,templates}

2.创建 confd 配置文件

confd 会先读取 conf.d 目录中的配置文件(toml格式),然后根据文件指定的模板路径去渲染模板。

vim /etc/confd/conf.d/nginx.toml

内容为如下,其中 nginx.conf.tmpl 文件为 confd 的模版文件,keys 为模版渲染成配置文件所需的配置内容,/usr/local/nginx/conf/nginx.conf 为生成的配置文件

[template]
src = " nginx.conf.tmpl"
dest = "/usr/local/nginx/conf/nginx.conf"
keys = [
"/nginx/conf",
]
check_cmd = "/usr/local/nginx/sbin/nginx -t -c {{.src}}"
reload_cmd = "/usr/local/nginx/sbin/nginx -s reload"

3.创建模版文件

拷贝 Nginx 原始的配置,增加对应的渲染内容

cp /usr/local/nginx/conf/nginx.conf /etc/confd/templates/nginx.conf.tmpl
vim /etc/confd/templates/nginx.conf.tmpl

增加内容为:

···
{{$data := json (getv "/nginx/conf")}}
{{range $data.blackList}}
  deny {{.}};
{{end}}
···

4.在 Nacos 上创建所需的配置文件

在 public 命名空间创建 dataId 为 nginx.conf 的配置文件,group 使用默认的 DEFAULT_GROUP 即可,配置内容为 json 格式

{
  "blackList":["10.0.1.104","10.0.1.103"]
}

002

5. 启动confd

启动 confd,从 Nacos 获取配置文件,渲染 Nginx 配置文件。backend 设置成 Nacos,node 指定访问的 Nacos 服务地址,watch 让 confd 支持动态监听

confd -backend nacos -node http://console.nacos.io:80 -watch

6.查看 Nginx 配置文件,验证 Nginx 启动

查看生成的 /usr/local/nginx/conf/nginx.conf 配置文件是否存在如下内容

...
deny 10.0.1.104;

deny 10.0.1.103;
...

curl 命令访问 Nginx,验证是否返回正常。http 响应状态码为 200 说明访问 Nginx 正常

curl http://$IP:8080/ -i
HTTP/1.1 200 OK
...

7.查看本机 Ip,加到 Nacos 配置文件黑名单中

假设本机的 Ip 为30.5.125.107,将本机的 Ip 加入到 Nginx 黑名单

{
  "blackList":["10.0.1.104","10.0.1.103","30.5.125.107"]
}

8.查看 Nginx 配置文件,验证黑名单是否生效

查看生成的/usr/local/nginx/conf/nginx.conf配置文件是否存在如下内容

...
deny 10.0.1.104;

deny 10.0.1.103;

deny 30.5.125.107;
...

curl 命令访问 Nginx,访问应该被拒绝,返回 403

curl http://$IP:8080/ -i
HTTP/1.1 403 Forbidden
...

总结

本文介绍了使用 Nacos 结合 confd 来做自动化管理,confd 作为轻量级的配置管理工具可以做到对第三方系统无代码侵入性。本文只是简单使用 Nginx 的黑名单功能来演示 Nacos+confd 的使用方式,当然 Nginx 还具有限流、反向代理等功能以及其他的系统比如Haproxy、Tomcat、Docker 等也同样可以使用 Nacos+confd 做管理,大家可以到 Nacos官网贡献相应的 Demo 或者方案。

相关文章
|
3月前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
583 81
高效搭建Nacos:实现微服务的服务注册与配置中心
|
5天前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
35 14
|
3月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
378 16
|
4月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
618 18
|
4月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
228 1
Nacos配置中心
|
4月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
77 5
|
4月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
57 4
|
4月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
75 3
|
4月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
172 3
|
4月前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
200 0