confd+Nacos实现nginx配置文件管理

场景: 由于公司内部站点保护的需求, 将部分的站点添加白名单, 这边的操作是在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 OK

 

[其他]

使用Redis

confd -backend redis -node 127.0.0.1:6379/0 -client-key auth密码 -watch

-backend  指定后端服务
-node  指定服务地址
-client-key 指定密钥
-watch 不断监听变化
-onetime  执行一次即退出

 

使用consul:

confd -backend consul -node xxx.xxx.xxx.xxx:8500 -watch

注: 这里只需要配置对应的域名+端口就可以

添加systemctl服务:

vim /lib/systemd/system/confd.service

[Unit]
Description="nginx confd"
Requires=network-online.target
After=network-online.target


[Service]
User=root
Group=root
ExecStart=/opt/confd/bin/confd -backend consul -node 172.18.105.124:8500 -watch
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

这样在consul面板上添加对应的key,nginx配置会动态进行更新

 

 

 

问题点:

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

 

参考:

  • https://nacos.io/zh-cn/blog/nacos-confd.html
  • https://mds316.top/archives/nacos%E5%AE%89%E8%A3%85%E5%92%8C%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2
posted @ 2022-09-21 18:59  X-Wolf  阅读(848)  评论(0编辑  收藏  举报