场景: 由于公司内部站点保护的需求, 将部分的站点添加白名单, 这边的操作是在nginx配置文件中添加如下代码
allow 127.0.0.1:
deny all;
但随之问题也出现了, 需要添加一个的时候 ,我就要1-登录服务器 2-打开配置文件并添加ip配置 3-重载nginx配置
于是乎 就想使用condf+nacos 在界面中添加配置, 保存自动完成配置的加载与服务的重载, 欧力给
[安装]
cd /usr/local/src
wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64
mkdir -p /opt/confd/bin
mv confd-0.16.0-linux-amd64 /opt/confd/bin/confd
chmod +x /opt/confd/bin/confd
# 添加环境变量
export PATH=$PATH:/opt/confd/bin
[配置]
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
[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.创建模板文件
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")}} # 注意json后面有空格
{{range $data.blackList}}
deny {{.}};
{{end}}
···
[nacos配置]
在public命名空间创建dataId为nginx.conf的配置文件,group使用默认的DEFAULT_GROUP即可,配置内容为json格式
{
"blackList":["10.0.1.104","10.0.1.103"]
}
[使用]
启动confd,从Nacos获取配置文件,渲染Nginx配置文件。backend设置成nacos,node指定访问的Nacos服务地址,watch让confd支持动态监听
confd -backend nacos -node http://console.nacos.io:80 -watch
[验证]
1.查看渲染的配置文件中是否添加了配置项
2.访问看是否生效
curl http://$IP:8080/ -i
HTTP/1.1 200
[其他]
使用Redis
confd -backend redis -node 127.0.0.1:6379/0 -client-key auth密码 -watch
-backend 指定后端服务
-node 指定服务地址
-client-key 指定密钥
-watch 不断监听变化
-onetime 执行一次即退出
问题点:
1.在使用高版本的confd的时候 已经后端不止nacos了, 所以可以选择其他的服务作为支持, 例如consul,zookeeper,etcd等
现支持
etcd
consul
vault
environment variables
file
redis
zookeeper
dynamodb
rancher
ssm (AWS Simple Systems Manager Parameter Store)
现在测试使用的是Redis, 后面会将后端服务换成consul
confd: https://github.com/kelseyhightower/confd
参考: