Consul ACL集群配置說(shuō)明以及ACL Token的用法

在上一篇文章里面,我們講了如何搭建帶有Acl控制的Consul集群。
這一篇文章主要講述一下上一篇文章那一大串配置文件的含義。

1.配置說(shuō)明

1.1 勘誤

上一篇文章關(guān)于機(jī)器規(guī)劃方面肠仪,consul client agent的端口寫的有誤。這里再貼一下正確的機(jī)器規(guī)劃备典。


在這里插入圖片描述

1.2 我們先來(lái)看一下consul server agent的配置异旧。

上一節(jié)中,提供了三個(gè)配置文件提佣,consul-server1.json, consul-server2.json以及consul-server3.json吮蛹。
其中consul-server1.json參數(shù)最多,這里就以它來(lái)說(shuō)明各個(gè)配置的含義:

{
    "datacenter":"dc1",
    "primary_datacenter":"dc1",
    "bootstrap_expect":1,
    "start_join":[
        "10.211.55.25",
        "10.211.55.26"
    ],
    "retry_join":[
        "10.211.55.25",
        "10.211.55.26"
    ],
    "advertise_addr": "10.211.55.28",
    "bind_addr": "10.211.55.28",
    "server":true,
    "connect":{
        "enabled":true
    },
    "node_name":"consul-server1",
    "data_dir":"/opt/consul/data/",
    "enable_script_checks":false,
    "enable_local_script_checks":true,
    "log_file":"/opt/consul/log/",
    "log_level":"info",
    "log_rotate_bytes":100000000,
    "log_rotate_duration":"24h",
    "encrypt":"krCysDJnrQ8dtA7AbJav8g==",
    "acl":{
        "enabled":true,
        "default_policy":"deny",
        "enable_token_persistence":true,
        "tokens":{
            "master":"cd76a0f7-5535-40cc-8696-073462acc6c7",
        "agent":"deaa315d-98c5-b9f6-6519-4c8f6574a551"
        }
    }
}
  • datacenter 此標(biāo)志表示代理運(yùn)行的數(shù)據(jù)中心拌屏。如果未提供潮针,則默認(rèn)為“dc1”。 Consul擁有對(duì)多個(gè)數(shù)據(jù)中心的一流支持倚喂,但它依賴于正確的配置每篷。同一數(shù)據(jù)中心中的節(jié)點(diǎn)應(yīng)在同一個(gè)局域網(wǎng)內(nèi)。
  • primary_datacenter: 這指定了對(duì)ACL信息具有權(quán)威性的數(shù)據(jù)中心端圈。必須提供它才能啟用ACL焦读。
  • bootstrap_expect: Consul將等待指定數(shù)量的服務(wù)器可用,然后才會(huì)引導(dǎo)群集舱权。這允許自動(dòng)選擇初始領(lǐng)導(dǎo)者矗晃。
  • start_join: 一個(gè)字符串?dāng)?shù)組,指定是其他的consul server agent的地址宴倍。這里這樣配置张症,會(huì)在啟動(dòng)時(shí),嘗試將consul-server2鸵贬,consul-server3這兩個(gè)節(jié)點(diǎn)加進(jìn)來(lái)俗他,形成一個(gè)集群。
  • retry_join: 允許start_join時(shí)失敗時(shí)恭理,繼續(xù)重新連接拯辙。重試的時(shí)間間隔,可以用retry_interval設(shè)置颜价,默認(rèn)是30s;重試的最大次數(shù)涯保,可以用retry_max設(shè)置,默認(rèn)是0周伦,也就是無(wú)限次重試夕春。關(guān)于retry_interval和retry_max,這里都是用的默認(rèn)值专挪。
  • bind_addr: 內(nèi)部群集通信綁定的地址及志。這是群集中所有其他節(jié)點(diǎn)都應(yīng)該可以訪問的IP地址片排。默認(rèn)情況下,這是“0.0.0.0”速侈,這意味著Consul將綁定到本地計(jì)算機(jī)上的所有地址率寡,并將第一個(gè)可用的私有IPv4地址通告給群集的其余部分。如果有多個(gè)私有IPv4地址可用倚搬,Consul將在啟動(dòng)時(shí)退出并顯示錯(cuò)誤冶共。如果指定“[::]”,Consul將通告第一個(gè)可用的公共IPv6地址每界。如果有多個(gè)可用的公共IPv6地址捅僵,Consul將在啟動(dòng)時(shí)退出并顯示錯(cuò)誤。 Consul同時(shí)使用TCP和UDP眨层,并且兩者使用相同的端口庙楚。如果您有防火墻,請(qǐng)務(wù)必同時(shí)允許這兩種協(xié)議趴樱。
  • advertise_addr: 更改我們向群集中其他節(jié)點(diǎn)通告的地址馒闷。默認(rèn)情況下,會(huì)使用-bind參數(shù)指定的地址.
  • server: 是否是server agent節(jié)點(diǎn)叁征。
  • connect.enabled: 是否啟動(dòng)Consul Connect窜司,這里是啟用的。
  • node_name:節(jié)點(diǎn)名稱航揉。
  • data_dir: agent存儲(chǔ)狀態(tài)的目錄。
  • enable_script_checks: 是否在此代理上啟用執(zhí)行腳本的健康檢查金刁。有安全漏洞帅涂,默認(rèn)值就是false,這里單獨(dú)提示下尤蛮。
  • enable_local_script_checks: 與enable_script_checks類似媳友,但只有在本地配置文件中定義它們時(shí)才啟用它們。仍然不允許在HTTP API注冊(cè)中定義的腳本檢查产捞。
  • log-file: 將所有Consul Agent日志消息重定向到文件醇锚。這里指定的是/opt/consul/log/目錄。
  • log_rotate_bytes:指定在需要輪換之前應(yīng)寫入日志的字節(jié)數(shù)坯临。除非指定焊唬,否則可以寫入日志文件的字節(jié)數(shù)沒有限制
  • log_rotate_duration:指定在需要旋轉(zhuǎn)日志之前應(yīng)寫入日志的最長(zhǎng)持續(xù)時(shí)間。除非另有說(shuō)明看靠,否則日志會(huì)每天輪換(24小時(shí)赶促。單位可以是"ns", "us" (or "μs"), "ms", "s", "m", "h", 比如設(shè)置值為24h
  • encrypt:用于加密Consul Gossip 協(xié)議交換的數(shù)據(jù)挟炬。在啟動(dòng)各個(gè)server之前鸥滨,配置成同一個(gè)UUID值就行嗦哆,或者你用命令行consul keygen 命令來(lái)生成也可以。
  • acl.enabled: 是否啟用acl.
  • acl.default_policy: “allow”或“deny”; 默認(rèn)為“allow”婿滓,但這將在未來(lái)的主要版本中更改老速。當(dāng)沒有匹配規(guī)則時(shí),默認(rèn)策略控制令牌的行為凸主。在“allow”模式下橘券,ACL是黑名單:允許任何未明確禁止的操作。在“deny”模式下秕铛,ACL是白名單:阻止任何未明確允許的操作.
  • acl.enable_token_persistence: 可能值為true或者false约郁。值為true時(shí),API使用的令牌集合將被保存到磁盤但两,并且當(dāng)代理重新啟動(dòng)時(shí)會(huì)重新加載鬓梅。
  • acl.tokens.master: 具有全局管理的權(quán)限,也就是最大的權(quán)限谨湘。它允許操作員使用眾所周知的令牌密鑰ID來(lái)引導(dǎo)ACL系統(tǒng)绽快。需要在所有的server agent上設(shè)置同一個(gè)值,可以設(shè)置為一個(gè)隨機(jī)的UUID紧阔。這個(gè)值權(quán)限最大坊罢,注意保管好。
  • acl.tokens.agent: 用于客戶端和服務(wù)器執(zhí)行內(nèi)部操作.比如catalog api的更新擅耽,反熵同步等活孩。

1.3 再來(lái)說(shuō)下consul-client1的相關(guān)配置。

我再貼一下配置信息乖仇。

{
    "datacenter":"dc1",
    "primary_datacenter":"dc1",
    "advertise_addr": "10.211.55.27",
    "start_join":[
         "10.211.55.25",
        "10.211.55.26",
        "10.211.55.28"
    ],
    "retry_join":[
         "10.211.55.25",
        "10.211.55.26",
        "10.211.55.28"
    ],
    "bind_addr":"10.211.55.27",
    "node_name":"consul-client1",
    "client_addr":"0.0.0.0",
    "connect":{
        "enabled":true
    },
    "data_dir":"/opt/consul/data/",
    "log_file":"/opt/consul/log/",
    "log_level":"info",
    "log_rotate_bytes":100000000,
    "log_rotate_duration":"24h",
    "encrypt":"krCysDJnrQ8dtA7AbJav8g==",
    "ui":true,
    "enable_script_checks":false,
    "enable_local_script_checks":true,
    "disable_remote_exec":true,
    "ports":{
        "http":7110
    },
    "acl":{
        "enabled":true,
        "default_policy":"deny",
        "enable_token_persistence":true,
        "tokens":{
        "agent":"deaa315d-98c5-b9f6-6519-4c8f6574a551"
        }
    }
}

這里憾儒,start_join, retry_join都是指定的server agent的地址。
另外還沒有提過(guò)的配置就是client_addr乃沙, ui, ports.http .
下面依次說(shuō)明:

  • client_addr: Consul將綁定客戶端接口的地址起趾,包括HTTP和DNS服務(wù)器
  • ui: 啟用內(nèi)置Web UI服務(wù)器和對(duì)應(yīng)所需的HTTP路由
  • ports.http: 更改默認(rèn)的http端口。

2. ACL Token的用法

2.1 ACL Token 有什么用呢警儒?

可以有人會(huì)說(shuō)训裆,你上面讓我又是搭建環(huán)境,又是看配置說(shuō)明蜀铲,我建好了一個(gè)這么一個(gè)帶ACL控制的Consul集群有什么用呢边琉?

ACL 全稱 Access Control List,也就是訪問控制列表的意思蝙茶,現(xiàn)在我們生成了帶有ACL控制的集群艺骂,就意味不是誰(shuí)都能來(lái)向我注冊(cè)的,也不是誰(shuí)都能像我獲取服務(wù)列表-- 也就是你想對(duì)Consul執(zhí)行任何操作隆夯,你得對(duì)應(yīng)的令牌钳恕,也就是ACL Token别伏。

2.2 不帶Token行不行?

為了模擬一般的Http請(qǐng)求忧额,我這里下載一個(gè)Postman, 是的這里沒有用命令行curl厘肮。
我們現(xiàn)在postman輸入
http://127.0.0.1:7110/v1/catalog/nodes
會(huì)發(fā)現(xiàn)一個(gè)節(jié)點(diǎn)都拿不到:

without token

此時(shí)如果加上master token, 也就是訪問
http://127.0.0.1:7110/v1/catalog/nodes?token=cd76a0f7-5535-40cc-8696-073462acc6c7
會(huì)發(fā)現(xiàn)可以拿到所有節(jié)點(diǎn)的數(shù)據(jù)(下圖只截取一部分)
with token

2.3 不帶token是不行,那能不能帶權(quán)限小點(diǎn)的token呢睦番?

前面說(shuō)過(guò)master token是權(quán)限最大的token类茂,假如這樣給出去,各個(gè)部分都拿來(lái)用托嚣。如果兩個(gè)不同的部分注冊(cè)名稱一樣的服務(wù)該怎么辦巩检,取消注冊(cè)了其他部門的服務(wù)又該怎么辦∈酒簦總之兢哭,權(quán)限能不能給小點(diǎn),答案是可以的夫嗓。
首先說(shuō)一下目標(biāo):
1.不同部門的服務(wù)必須要有自己的前綴迟螺,比如deptA表示部門A,比如deptB表示部門B
2.不同部門只能更改自己的服務(wù)舍咖。

2.3.1 先給兩個(gè)部門各注冊(cè)一個(gè)服務(wù)

注冊(cè)服務(wù)deptA-pingbaidu1, 注意這里選擇的PUT方法矩父。

 PUT http://127.0.0.1:7110/v1/agent/service/register?token=cd76a0f7-5535-40cc-8696-073462acc6c7
 {
    "ID": "deptA-pingbaidu1",
    "Name": "deptA-pingbaidu",
    "Tags": [
        "primary",
        "v1"
    ],
    "Address": "127.0.0.1",
    "Port": 8000,
    "Meta": {
        "my_version": "4.0"
    },
    "EnableTagOverride": false,
    "Check": {
        "DeregisterCriticalServiceAfter": "90m",
        "HTTP": "http://www.baidu.com/",
        "Interval": "10s"
    }
} 

在截個(gè)圖,當(dāng)返回status為200時(shí)排霉,表示成功注冊(cè)

注冊(cè)成功

此時(shí)可以在consul web ui中進(jìn)行查看窍株,打開consul-client1所在的機(jī)器,在瀏覽器中攻柠,輸入http://127.0.0.1:7110/ui/dc1/services夹姥,( 注意在此之前你需要先設(shè)置consul web ui的token,上一篇文章末尾已經(jīng)提及)辙诞,此時(shí)會(huì)看到
service-on-web-ui

類似地,在注冊(cè)個(gè)deptA-pingMe1的服務(wù)

 PUT http://127.0.0.1:7110/v1/agent/service/register?token=cd76a0f7-5535-40cc-8696-073462acc6c7
{
    "ID": "deptB-pingMe1",
    "Name": "deptB-pingMe",
    "Tags": [
        "primary",
        "v1"
    ],
    "Address": "127.0.0.1",
    "Port": 7000,
    "Meta": {
        "my_version": "4.0"
    },
    "EnableTagOverride": false,
    "Check": {
        "DeregisterCriticalServiceAfter": "90m",
        "HTTP": "https://blog.csdn.net/yellowstar5",
        "Interval": "10s"
    }
} 

2.3.2. 生成兩個(gè)token轻抱,讓部門A飞涂,B各自管理自己的服務(wù)

首先我們來(lái)生成部門A的policy, 意思度所有節(jié)點(diǎn)具有寫權(quán)限(寫權(quán)限包括讀)祈搜,并且只能寫deptA開頭的服務(wù)较店。

2.3.2.1先生成部門A的token

node_prefix "" {
        policy = "write"
  }

service_prefix "deptA"{
      policy = "write"
  }

下面是具體的生成過(guò)程
1.新建policy并保存

在這里插入圖片描述

2.生成token


在這里插入圖片描述

在這里插入圖片描述

3.查看token列表,并點(diǎn)擊deptA-policy那一項(xiàng)查看并復(fù)制token


在這里插入圖片描述

在這里插入圖片描述

2.3.2. 2.在生成部門B的token

只需要把policy稍作修改就可以容燕,其他部門和部門A的類似梁呈,這里就不貼圖了。

node_prefix "" {
        policy = "write"
  }

service_prefix "deptB"{
      policy = "write"
  }

2.3.用不同的token來(lái)獲取服務(wù)列表

最后我們拿到部門A和部門B的token蘸秘,以及master的token
我這里deptA的token是:8764c083-0acb-e11e-433d-8d8803db9bd2
deptB的token是: 052f467f-9581-cc7c-a8a5-84d8df51dc9d
master token是: d76a0f7-5535-40cc-8696-073462acc6c7
下面用postman測(cè)試一下官卡,看看不同token返回的服務(wù)列表

deptA-token
http://127.0.0.1:7110/v1/agent/services?token=8764c083-0acb-e11e-433d-8d8803db9bd2

在這里插入圖片描述

deptB-token
http://127.0.0.1:7110/v1/agent/services?token=052f467f-9581-cc7c-a8a5-84d8df51dc9d
在這里插入圖片描述

master-token
http://127.0.0.1:7110/v1/agent/services?token=cd76a0f7-5535-40cc-8696-073462acc6c7
在這里插入圖片描述

可以發(fā)現(xiàn)deptA-token只能看到部門A的服務(wù)蝗茁,deptB-token只能看到部門B的服務(wù),master-token可以看到所以的寻咒。
另外取消注冊(cè)哮翘,注冊(cè)之類的驗(yàn)證大家可以自己試試,都與上面的方式差不多毛秘,只不過(guò)要使用不同的Http API
饭寺,https://www.consul.io/api/agent/service.html,在這個(gè)地址你可以看到consul 提供的關(guān)于服務(wù)相關(guān)的api叫挟。

參考:

https://www.consul.io/api/agent/service.html
https://www.consul.io/docs/agent/options.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末艰匙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抹恳,更是在濱河造成了極大的恐慌员凝,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件适秩,死亡現(xiàn)場(chǎng)離奇詭異绊序,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)秽荞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門骤公,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人扬跋,你說(shuō)我怎么就攤上這事阶捆。” “怎么了钦听?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵洒试,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我朴上,道長(zhǎng)垒棋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任痪宰,我火速辦了婚禮叼架,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衣撬。我一直安慰自己乖订,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布具练。 她就那樣靜靜地躺著乍构,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扛点。 梳的紋絲不亂的頭發(fā)上哥遮,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天岂丘,我揣著相機(jī)與錄音,去河邊找鬼昔善。 笑死元潘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的君仆。 我是一名探鬼主播翩概,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼返咱!你這毒婦竟也來(lái)了钥庇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咖摹,失蹤者是張志新(化名)和其女友劉穎评姨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萤晴,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吐句,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了店读。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗦枢。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖屯断,靈堂內(nèi)的尸體忽然破棺而出文虏,到底是詐尸還是另有隱情,我是刑警寧澤殖演,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布氧秘,位于F島的核電站,受9級(jí)特大地震影響趴久,放射性物質(zhì)發(fā)生泄漏丸相。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一彼棍、第九天 我趴在偏房一處隱蔽的房頂上張望已添。 院中可真熱鬧,春花似錦滥酥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宇葱,卻和暖如春瘦真,著一層夾襖步出監(jiān)牢的瞬間刊头,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工诸尽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留原杂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓您机,卻偏偏與公主長(zhǎng)得像穿肄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子际看,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • [TOCM] Consul版本 v0.9.2 1. 配置 1.1 CLI配置 Consul Agent有各種各樣的...
    Liberalman閱讀 8,018評(píng)論 18 3
  • 由于文章太長(zhǎng)咸产,簡(jiǎn)書放不下,完整文檔見Consul文檔仲闽。 一脑溢、安裝 Consul Consul 的安裝很簡(jiǎn)單,安裝 ...
    FlySheep_ly閱讀 10,125評(píng)論 1 13
  • Consul服務(wù)注冊(cè)發(fā)現(xiàn) Consul是一個(gè)輕量級(jí)的服務(wù)注冊(cè)與發(fā)現(xiàn)工具, 支持集群, 支持k/v存儲(chǔ), 支持對(duì)服務(wù)...
    渺小Y閱讀 7,565評(píng)論 0 7
  • 一赖欣、Consul簡(jiǎn)介 Consul 是一套開源的分布式服務(wù)發(fā)現(xiàn)和配置管理系統(tǒng)屑彻,由 HashiCorp 公司用 Go...
    QIQIHAL閱讀 4,920評(píng)論 0 11
  • 一、安裝 Consul Consul 下載地址:https://www.consul.io/downloads.h...
    FlySheep_ly閱讀 5,382評(píng)論 0 3