天天看點

docker服務發現——confd

confd通過讀取配置(支援etcd,consul,環境變量),通過go的模闆,生成最終的配置檔案。

安裝和etcd一樣,非常友善,已經提供了64位的可執行程式,下載下傳下來之後直接放到path中(/usr/local/bin)即可(别忘了+x)。

confd配置檔案預設在/etc/confd中,可以通過參數-confdir指定。目錄中包含兩個子目錄,分别是:conf.d templates。

confd會先讀取conf.d目錄中的配置檔案(toml格式),然後根據檔案指定的模闆路徑去渲染模闆。

基于之前配置的etcd叢集,讀取/services/web中的目錄和key。結構為:

其中domain表示注冊應用的域名,host表示注冊機器的主機名。

首先建立confd配置檔案:

現在隻測試模闆生成,是以不關注檢查、重新開機等指令,配置模闆名稱、目标路徑和擷取的key即可。

着重看下模闆變動部分(前面就是寫死的一些haproxy的标準配置,如日志等)

這裡主要有兩個循環,第一個循環所有的域名,第一個循環每一個域名下的所有主機。

haproxy需要通過設定acl的方式來進行按照域名做負載均衡。是以首先循環域名,為每個域名建立一個acl規則和一個規則的使用。

下面再通過一個循環,建立沒個域名對應的後段。

confd模闆詳細文檔可以參考github上的文檔。

大緻的意思是通過lsdir擷取目前目錄下的所有子目錄。第一層子目錄為域名,根據域名即可生成acl規則、規則使用、後端名稱等資料。

再重新通過瓶裝域名目錄,對域名目錄執行lsdir,讀取目錄下的每個主機名,建立後端的server條目(一個域名下的負載均衡後段伺服器),

同時擷取挂在這個目錄下的屬性鍵值對(這裡隻有ip和port)。

建立完模闆和配置之後,先構造一些測試資料:

這裡模拟三個容器,其中兩個作為域名a.abc.com運作容器,一個作為b.abc.com容器。

然後執行confd,檢查生成的配置檔案:

剛才那段模闆渲染後為:

轉載自:https://coolex.info/blog/483.html