為什么要支持confd,老的應用配置管理模式是啟動時讀取配置文件,然后重新讀取配置文件需要應用重啟。一般的配置管理系統都是代碼侵入性的,應用接入配置管理系統都需要使用對應的SDK來查詢和監聽數據的變更。對於一些已經成熟的系統來說,接入SDK來實現動態配置管理是很難實現的,Nacos通過引入配置管理工具confd可以實現系統的配置變更做到無代碼侵入性。
confd是一個輕量級的配置管理工具,可以通過查詢后端存儲系統來實現第三方系統的動態配置管理,如Nginx、Tomcat、HAproxy、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
cd $GOPATH/src/github.com/kelseyhightower
wget https://github.com/nacos-group/nacos-confd/archive/v0.19.1.tar.gz
tar -xvf v0.19.1.tar.gz
mv nacos-confd-0.19.1 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的安裝可以參考網上文章
- 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"]
}
- 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還具有限流、反向代理等功能以及其他的系統比如Naproxy、Tomcat、Docker等也同樣可以使用Nacos+confd做管理,大家可以到Nacos官網貢獻相應的demo或者方案。