confd + Nacos | 無程式碼侵入的配置變更管理
為什麼要支援 confd,老的應用配置管理模式是啟動時讀取配置檔案,然後重新讀取配置檔案需要應用重啟。一般的配置管理系統都是程式碼侵入性的,應用接入配置管理系統都需要使用對應的 SDK 來查詢和監聽資料的變更。對於一些已經成熟的系統來說,接入 SDK 來實現動態配置管理是很難實現的, Nacos 通過引入配置管理工具 confd 可以實現系統的配置變更做到無程式碼侵入性。
confd 是一個輕量級的配置管理工具,可以通過查詢後端儲存系統來實現第三方系統的動態配置管理,如 Nginx、Tomcat、hHaproxy、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 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 目錄下,啟動 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 還具有限流、反向代理等功能以及其他的系統比如Haproxy、Tomcat、Docker 等也同樣可以使用 Nacos+confd 做管理,大家可以到 Nacos官網貢獻相應的 Demo 或者方案。
原文連結
本文為雲棲社群原創內容,未經