新聞中心
本文從consul提供的ACL訪問控制策略角度出發(fā),詳細介紹通過在應用層使用標簽前綴的方式,分配訪問控制權限,實現(xiàn)基于標簽隔離的社區(qū)版consul多租戶隔離,從而作為公共注冊中心。

創(chuàng)新互聯(lián)主營鼓樓網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,重慶APP軟件開發(fā),鼓樓h5小程序定制開發(fā)搭建,鼓樓網(wǎng)站營銷推廣歡迎鼓樓等地區(qū)企業(yè)咨詢
一、Consul產(chǎn)品介紹
Consul作為一款開源的組件工具,其使用GO語言開發(fā),實現(xiàn)分布式系統(tǒng)的服務發(fā)現(xiàn)與配置,主要提供分布式服務注冊和發(fā)現(xiàn)、健康檢查、Key/Value數(shù)據(jù)存儲、多數(shù)據(jù)中心的高可用性等能力。
【服務注冊與發(fā)現(xiàn)】
consul client(客戶端)使用HTTP或DNS的方式將服務注冊到consul server(服務端)注冊中心中。服務請求方通過consul server發(fā)現(xiàn)他所依賴的服務。
【健康檢查】
consul client提供對應用程序健康檢查機制,并將健康檢查狀態(tài)上報給consul server集群,用來監(jiān)控集群節(jié)點的運行狀況,并及時下線不健康的節(jié)點。
【Key/Value數(shù)據(jù)存儲】
Consul提供K/V的存儲功能,應用程序可以根據(jù)需要使用consul層級的Key/Value存儲,比如用來保存動態(tài)配置,協(xié)調服務等等。
【多數(shù)據(jù)中心】
Consul支持多個數(shù)據(jù)中心,滿足用戶的多中心部署模式和災備需求。
二、Consul基本架構
Consul是一個分布式,高可用的系統(tǒng),在consul集群中的每個節(jié)點都運行一個agent,agent可以以客戶端(client)模式或服務端(server)模式運行。
圖1 Consul基本架構圖
【數(shù)據(jù)中心(DataCenter)】
在consul數(shù)據(jù)中心中,集群中節(jié)點分為server節(jié)點和client節(jié)點,為了保證可用性和高性能,通常一個數(shù)據(jù)中心內為3-5個服務器。
【客戶端模式(Client)】
客戶端節(jié)點一般和應用部署在一起,負責注冊服務、運行健康檢查并將相關RPC轉發(fā)給服務器。在微服務應用中,本地應用只訪問client,由client和server進行通訊,實現(xiàn)集群的服務發(fā)現(xiàn)。
【服務器模式(Server)】
服務端節(jié)點維護consul集群的狀態(tài)信息,并進行持久化,server節(jié)點存儲公共信息,包括服務信息,K/V數(shù)據(jù)等。consul集群中的Server節(jié)點參與選舉,響應RPC查詢,轉發(fā)信息給Leader(領導者),Leader除了包含server的功能外,還負責同步數(shù)據(jù)到各個server,每一個集群中只能有一個Leader,保證集群內數(shù)據(jù)一致。
三、Consul多租戶隔離
在使用consul作為注冊及配置中心的過程中,多個微服務架構系統(tǒng)需要每個系統(tǒng)分別部署一套consul集群,運維成本高且存在資源浪費,于是將consul服務作為PaaS能力提供,租戶制使用便成為一種美好愿望。
社區(qū)版本不支持namespace隔離特性,多個系統(tǒng)共用一個注冊和配置中心,需要防止出現(xiàn)寫時配置相互覆蓋,讀時信息泄露等問題。因此,各系統(tǒng)在進行服務發(fā)現(xiàn)獲取服務列表和配置信息修改等操作時,只能對本系統(tǒng)進行訪問和操作,不能對其他系統(tǒng)的服務進行訪問。
Consul在應用層唯一的鑒權能力是ACL機制,能否借此可以實現(xiàn)多租戶訪問權限的控制目的?
1.ACL機制
Consuls支持AccessControlList(ACL-即訪問控制列表),用于保護對UI、API、CLI、服務和代理通信的訪問。通過開啟consul集群ACL機制,對consul執(zhí)行任何的操作,需要得到對應的令牌,即ACLToken,以此來實現(xiàn)對consul集群agent、服務注冊和發(fā)現(xiàn)、K/V數(shù)據(jù)的訪問權限控制。
ACL的核心是以token作為身份認證,將一系列規(guī)則(rule)組成策略(policy),然后將一個或多個策略與令牌token進行相關聯(lián)。在應用請求時,在其HTTP頭中添加X-Consul-Token為分配的token,應用的服務注冊、發(fā)現(xiàn)和配置更新等操作,server會根據(jù)token策略權限返回相應的服務內容以及校驗是否有對應的配置資源讀寫權限。
圖2 ACL機制運行核心
配置步驟:
(1)首先在consulserver集群的啟動參數(shù)中添加配置,開啟集群對ACL的校驗。
{
...
acl= {
enabled= true,
default_policy= "deny",
enable_token_persistence= true }
}(2)然后再創(chuàng)建policy,每個policy是由多個rule組成。policy格式為:
#rule:節(jié)點前綴為空,代表所有的節(jié)點都使用策略;
node_prefix""{
policy=’write/read/deny’
}
#rule:服務前綴為空,代表所有的服務都使用策略;
service_prefix""{
policy=’write/read/deny’’
}
#rule:key前綴為空,代表所有對所有key都使用策略;
key_prefix""{
policy=’write/read/deny’’
}
(3)最后創(chuàng)建token,并和policy綁定。
2.租戶隔離
Rule是以關鍵字前綴作為過濾條件,這樣可以統(tǒng)一分配權限。因此,可以每個租戶的節(jié)點名稱,服務名稱,配置名稱統(tǒng)一以租戶名稱為前置,然后每個租戶分配一個token。在配置rule時,都只以租戶名稱作為前綴。這樣就可以實現(xiàn)租戶間資源隔離。
例如租戶A的名稱是:“SystemA”,租戶A的相關資源命名都以SystemA為前綴:
- 節(jié)點名稱:SystemA-ip,如SystemA-192.168.0.108
- 服務名稱:SystemA-微服務名稱,如SystemA-UserService
- 配置路徑:config/SystemA-配置名稱,如config/SystemA-public,config/SystemA-UserService
租戶A的token綁定的policy策略為(默認策略為deny):
#代表SystemA前綴節(jié)點都使用該策略;
node_prefix"SystemA" {
policy="write"
}
#代表代表SystemA服務都使用該策略;
service_prefix"SystemA" {
policy="write"
}
#代表以config/SystemA開頭的key都使用該策略;
key_prefix"config/SystemA" {
policy="write"
}
以此policy策略關聯(lián)的token,其應用只能注冊以“SystemA”開頭的節(jié)點和服務,以及發(fā)現(xiàn)以“SystemA”標簽為前綴的服務,并對“config/SystemA”為開頭的key的配置信息進行編輯和修改。
四、總結
通過以統(tǒng)一租戶名稱為前置的資源命名管理+Consul產(chǎn)品ACL的方式,可以達到租戶間資源訪問隔離的效果。通過這種手段,可以將consul產(chǎn)品作為PaaS能力提供服務,豐富云原生生態(tài)。
網(wǎng)站名稱:聊聊基于Consul建設公共注冊中心
轉載注明:http://www.fisionsoft.com.cn/article/dpoiphs.html


咨詢
建站咨詢
