【轉】【linux系統】nacos + confd配置nginx


為什么要支持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的安裝可以參考網上文章

image

  • 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"]
}

image

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM