1. 程式人生 > >confd + Nacos | 無程式碼侵入的配置變更管理

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 或者方案。


原文連結
本文為雲棲社群原創內容,未經