confd+etcd实现nginx配置管理
·
confd是一个轻量级的配置管理工具,可以通过查询后端存储系统来实现第三方系统的动态配置管理,如Nginx、Tomcat、HAproxy、Docker配置等。
confd能够查询和监听后端系统的数据变更,结合配置模版引擎动态更新本地配置文件,保持和后端系统的数据一致,并且能够执行命令或者脚本实现系统的reload或者重启。
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、在etcd上创建所需的配置 #
使用etcdctl添加配置如下:
etcdctl set /nginx/conf {"blackList":["10.0.1.104","10.0.1.103"]}
5、启动confd #
启动confd,从etcd获取配置,渲染Nginx配置文件。backend设置成etcd,node指定访问的etcd服务地址,watch让confd支持动态监听
confd -backend etcd -node http://127.0.0.1:2379 -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:8000/ -i
HTTP/1.1 200 ok
...
7、查看本机IP,加到etcd配置文件黑名单中 #
假设本机IP为10.1.70.20,将本机的IP加入到Nginx黑名单
etcdctl set /nginx/conf {"blackList":["10.0.1.104","10.0.1.103","10.1.70.20"]}
8、查看Nginx配置文件,验证黑名单是否生效 #
查看生成的/usr/local/nginx/conf/nginx.conf配置文件是否存在如下内容
...
deny 10.0.1.104;
deny 10.0.1.103;
deny 10.1.70.20;
...
curl命令访问Nginx,访问应该被拒绝,返回403
curl http://$IP:8080/ -i
HTTP/1.1 403 Forbidden
...