confd + Nacos | 無代碼侵入的配置變動管理

爲何要支持 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 的安裝能夠經過源碼安裝方式,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

confd 結合 Nacos 實現 Nginx 配置管理示例

本文介紹使用 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 或者方案。

 

本文做者:中間件小哥

原文連接 

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索