爲何要支持 confd,老的應用配置管理模式是啓動時讀取配置文件,而後從新讀取配置文件須要應用重啓。通常的配置管理系統都是代碼侵入性的,應用接入配置管理系統都須要使用對應的 SDK 來查詢和監聽數據的變動。對於一些已經成熟的系統來講,接入 SDK 來實現動態配置管理是很難實現的, Nacos 經過引入配置管理工具 confd 能夠實現系統的配置變動作到無代碼侵入性。node
confd 是一個輕量級的配置管理工具,能夠經過查詢後端存儲系統來實現第三方系統的動態配置管理,如 Nginx、Tomcat、hHaproxy、Docker 配置等。 confd 目前支持的後端有 etcd、Zookeeper 等,Nacos 1.1 版本經過對 confd 定製支持 Nacos 做爲後端存儲。nginx
confd 可以查詢和監聽後端系統的數據變動,結合配置模版引擎動態更新本地配置文件,保持和後端系統的數據一致,而且可以執行命令或者腳本實現系統的 reload 或者重啓。git
confd 的安裝能夠經過源碼安裝方式,confd 基於 Go 語言編寫,其編譯安裝依賴 Go,首先須要確保本地安裝了 Go,版本不低於v1.10github
建立 confd 目錄,下載 confd 源碼,編譯生成可執行文件json
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 目錄下,啓動 confdvim
sudo cp bin/confd /usr/local/bin confd
本文介紹使用 Nacos 結合 confd 實現 Nginx 配置管理,爲簡單起見以 Nginx 的黑名單功能爲演示示例,Nacos 使用官網部署的服務,域名爲 console.nacos.io 。Nginx 的安裝能夠參考網上文章後端
1.建立 confd 所需目錄curl
confd 配置文件默認在 /etc/confd 中,能夠經過參數 -confdir 指定。目錄中包含兩個子目錄,分別是:conf.d templates工具
mkdir -p /etc/confd/{conf.d,templates}
2.建立 confd 配置文件url
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 還具備限流、反向代理等功能以及其餘的系統好比Haproxy、Tomcat、Docker 等也一樣可使用 Nacos+confd 作管理,你們能夠到 Nacos官網貢獻相應的 Demo 或者方案。
本文做者:中間件小哥
本文爲雲棲社區原創內容,未經容許不得轉載。