日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)

發(fā)布時間:2023/12/4 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

上一篇簡單介紹了Consul,并使用開發(fā)模式(dev)進行流程演示,但在實際開發(fā)中需要考慮Consul的高可用和操作安全性,所以接著來聊聊集群和ACL的相關(guān)配置,涉及到的命令會在環(huán)境搭建過程中詳細介紹。

正文

關(guān)于集群,第一反應(yīng)就是多搞幾臺機器(或者容器等),將其關(guān)聯(lián)在一塊,提供功能即可;在搭建集群環(huán)境之前,需要對幾個角色進行熟悉,因為在Consul中,它們至關(guān)重要。見下圖(以一個數(shù)據(jù)中心為例):


  • 數(shù)據(jù)中心(DataCenter):Consul運行的節(jié)點集連接在一起稱為數(shù)據(jù)中心;在數(shù)據(jù)中心中,各個Consul節(jié)點可以以服務(wù)器(Server)或客戶端模式(Client)運行;為了保證可用性和高性能,通常一個數(shù)據(jù)中心內(nèi)推薦3~5個服務(wù)器(不超過5個),客戶端個數(shù)建議不要超過5000個(具體根據(jù)業(yè)務(wù)決定)。

  • 客戶端模式(Client):客戶端負責注冊服務(wù)、運行健康檢查并將相關(guān)RPC轉(zhuǎn)發(fā)給服務(wù)器,相對來說是無狀態(tài)的。Client+LAN gossip協(xié)議組成了一個數(shù)據(jù)中心中的節(jié)點集,通信效率高。

  • 服務(wù)器模式(Server):服務(wù)器包含客戶端的功能,每個Server還參與選舉,響應(yīng)RPC查詢,轉(zhuǎn)發(fā)信息給ServerLeader等;另外還負責維護Consul的集群狀態(tài)(持久化):包括其他服務(wù)器和客戶端的信息、哪些服務(wù)可供發(fā)現(xiàn)、哪些服務(wù)允許相互通信;每個Consul數(shù)據(jù)中心必須至少有一個服務(wù)器。

  • 服務(wù)器領(lǐng)導者(Server Leader):除了包含Server的功能外,還負責同步數(shù)據(jù)到各個Server;每一個集群中只能有一個ServerLeader,保證集群內(nèi)數(shù)據(jù)一致。

在整個集群中是通過網(wǎng)絡(luò)進行關(guān)聯(lián),需要多個端口實現(xiàn)對應(yīng)功能,如上圖;端口簡介:

了解到Consul的架構(gòu)及各個角色功能,接下來就是實操啦。

1. 搭建集群

在這里,就不搞那么多機器了,兩臺搭集群,一臺服務(wù)器模式,一臺客戶端模式(電腦有限,不想搞那么多虛擬機),原理是一樣的,主要還是著重說說過程:

1.1 啟動一個Server(就一臺Server,那它肯定是Leader了)

這里演示在啟動節(jié)點前,將配置文件目錄和data創(chuàng)建好,如下:

使用命令啟動:

consul?agent?-server?-bootstrap-expect?1?-datacenter=dc_zoe?-config-dir=./config?-data-dir?./data?-node=s1?-ui?-rejoin?-bind=192.168.1.6?-client?0.0.0.0

啟動起來時包含一些節(jié)點信息,如下:

命令解析

  • agent:Consul的核心進程,每個節(jié)點都需要代理的形式運行;

  • -server:代表是Server模式,如果沒有-server就代表是Client模式;

  • -bootstrap-expect:在一個數(shù)據(jù)中心中期望的Server的節(jié)點個數(shù),直到啟動Server個數(shù)達到設(shè)置的個數(shù)時,集群才能起作用,并從中選舉出一個ServerLeader;

  • -bootstrap:手動指定Server為Leader;當Server個數(shù)大于0時,該參數(shù)不能和-bootstrap-expect一起使用(以上命令中沒有用到);

  • -datacenter:指定數(shù)據(jù)中心的名稱;

  • -config-dir:指定配置文件目錄,這里指定的是當前目錄下的config目錄,Consul會自動加載里面所有Json格式的配置文件(.json結(jié)尾);

  • -data-dir:指定節(jié)點運行時數(shù)據(jù)狀態(tài)保存的路徑,這里將其對應(yīng)的數(shù)據(jù)保存在當前文件夾下的data目錄中;

  • -node:指定節(jié)點的名稱,在集群中必須是唯一的,默認是主機名;

  • -ui:使用默認UI界面,Consul提供一個UI項目,下載可以指定對應(yīng)的目錄,使用-ui-dir 指定對應(yīng)的UI目錄即可;

  • -rejoin:忽略之前的斷開,重新啟動時會嘗試加入集群;

  • -bind:指定綁定的地址,該地址通常用來在集群內(nèi)部通訊,集群內(nèi)的所有節(jié)點地址都必須正常通訊;

  • -client:Consul服務(wù)監(jiān)聽的地址,這個地址提供HTTP/DNS/RPC等服務(wù),默認是127.0.0.1,所以外部不能訪問,UI通過IP地址也不能訪問;如果需要提供服務(wù),將其指定為0.0.0.0即可。

  • -encrypt:指定一個秘鑰,在通訊時進行加密,這個秘鑰可以通過consul keygen生成,在同一個集群中,各節(jié)點必須使用相同的秘鑰;

以上列舉常用的參數(shù),還有一些不太常用的,小伙伴如果用到去官網(wǎng)上查查(偷偷告訴小伙伴,參數(shù)還可以統(tǒng)一放在配置文件中哦)。

如果是多個Server,只需在每臺機器上執(zhí)行以上命令即可,根據(jù)Server數(shù)量,修改bootstrap-expect后面的數(shù)量即可,然后再改改bind后面的地址即可。

1.2 啟動一個Client

啟動一個Client和Server幾乎一樣,只是不用指定Server參數(shù),默認就是客戶端模式,命令如下:

consul?agent?-datacenter=dc_zoe?-config-dir=./config?-data-dir?./data?-node=c1?-bind=192.168.1.8?-client?0.0.0.0

這樣Client 就啟動起來了

如果是多個Client,在各臺機器上執(zhí)行以上命令即可,只是改改bind的地址即可。

1.3 將節(jié)點加入到集群中

上面只是將各節(jié)點啟動,如果是Server節(jié)點,不是Leader的話,會一直提示找不到Leader;如果是Client節(jié)點,就會提示找不到對應(yīng)的Server節(jié)點;因為一個集群中至少得有一個Server,在Server中必須得要有且只有一個ServerLeader。所以節(jié)點啟動之后,下一步就是要將各節(jié)點加入到集群中,通常的做法是在各個節(jié)點上執(zhí)行以下命令:

consul?join?192.168.1.6?#?通常后面跟的地址是ServerLeader的地址

執(zhí)行命令之后,對應(yīng)的節(jié)點就加入到集群中了,可以通過UI看到節(jié)點:

也可以通過命令查看:

最終這樣一個簡單集群就搭建完成了,流程就是這樣,其余的就是節(jié)點個數(shù)的問題。

2. ACL配置

Consul使用 Access Control Lists(ACL-訪問控制列表)來保護對UI、API、CLI、服務(wù)通信和代理通信的訪問;ACL的核心是將規(guī)則分組為策略,然后將一個或多個策略與令牌相關(guān)聯(lián)。

Consul使用token的形式進行安全控制訪問,這里的token就是隨機的字符串,有了token就有對應(yīng)的操作權(quán)限啦;就好比之前說到WebAPI接口加訪問控制一樣,通過一個授權(quán)token就可以訪問相關(guān)的接口資源。

配置ACL的前提是所有節(jié)點都需要將ACL啟用,然后還要一個bootstrap token,因為針對子權(quán)限(策略)生成token的時候需要用到,就好比MySQL中的root用戶一樣,只有有了root權(quán)限才能給其他用戶分配更多的權(quán)限。接下就以UI的訪問和Services的控制進行ACL配置演示,其他基本上都一樣,重點就是規(guī)劃好策略規(guī)則。

首先在各節(jié)點啟動時將ACL啟用,在配置文件夾目錄中(這里目錄名是config)增加acl.hcl文件(每個節(jié)點都需要加),內(nèi)容如下:

acl?=?{enabled?=?truedefault_policy?=?"deny"enable_token_persistence?=?true? }

參數(shù)說明:

  • enabled=true 代表開啟ACL;

  • default_policy=“deny”默認為allow,如果需要自定義權(quán)限,需要將其設(shè)置為deny;

  • enable_token_persistence =true開啟token持久化,將token持久化到磁盤上;

這里需要注意一點,之前說配置目錄下的Json文件會被自動加載,其實還有hcl文件也會被自動加載,這里用hcl的形式演示一下。配置文件準備好之后,重新啟動節(jié)點即可(集群中的所有節(jié)點都需要用上),訪問UI試試,就會彈出如下界面:

點擊登錄,需要輸入一個Token,如果是在配置文件中配置,輸入配置的token即可,如果沒有配置,可以在運行時生成一個bootstrap token,在任意一個Server中執(zhí)行consul acl bootstrap命令獲得該bootstrap token;Consul中token都很重要,需要保存好。

將生成的bootstrap token輸入在登錄框中,然后就可以正常獲取信息啦;

bootstrap token權(quán)限很大,不可能每個小伙伴都擁有,就像MySQL的root權(quán)限一樣,只能有個別的人知道。其他用戶的權(quán)限需單獨控制;Consul也是如此,針對不同權(quán)限策略,生成對應(yīng)的token,使用這個token就只能訪問或操作對應(yīng)權(quán)限范圍內(nèi)的資源。

UI方式配置

ACL的配置其他token可以通過命令的形式,也可以通過UI界面的形式(因為現(xiàn)在有bootstrap token超級權(quán)限),這里通過UI的形式很方便的,三步走:

  • 創(chuàng)建策略:


    策略其他信息基本上沒啥說的,主要是規(guī)則(Rules)的配置,通常主要針對節(jié)點(node)、服務(wù)(service)、鍵值對(K/V)進行配置,可以模糊指定,也可以具體指定,如下:

    node_prefix "":節(jié)點前綴為空,代表所有的節(jié)點都使用策略;

    service_prefix "":服務(wù)前綴為空,代表所有的服務(wù)都使用策略;

    service "Code6688Name":指定對應(yīng)的服務(wù)使用策略;

    key_prefix "redis/":只對前綴有"redis/"的key使用對應(yīng)策略;

    key "dashboard-app":指定對應(yīng)的key使用策略;

    以上指定策略的范圍是比較常用的方式,具體可以參照官網(wǎng);

    規(guī)則中關(guān)于策略(policy)通常有以下幾種:

    read:只能查詢;

    write:可查可寫;

    deny:不能讀不能寫;

    其他細節(jié)可以參考ACL官方配置文檔。

  • 根據(jù)策略生成token:

    有了策略之后,接下來就要針對策略生成對應(yīng)的token啦,如下:


    在對應(yīng)彈出框中輸入對應(yīng)的信息即可,如下:


    保存之后就生成對應(yīng)的token,可以進入到詳細頁看到生成的token,直接將token給別人用即可。


  • 使用token:

    ui測試,直接將token發(fā)給其他小伙伴,登錄時輸入即可,如果是其他操作,帶上token即可;對于自己界面測試,切換一下token就可以啦,如下:


    切換之后,界面中除了node能查出信息,其他都不能使用,操作Key/Value,還報如下錯誤:


    在服務(wù)注冊或服務(wù)發(fā)現(xiàn)中使用該token,也不能注冊和查詢服務(wù)成功,如下:


    如果是用配置文件進行服務(wù)注冊,在配置文件中也要指定token,否則注冊服務(wù)不成功,如下:


    服務(wù)發(fā)現(xiàn)也是一個道理:


    直接使用HTTP API也是一樣需要帶上token:


    命令方式

UI配置的這種形式是不是夠直接,命令的方式我就不演示的了吧,步驟的一樣,只是全靠命令即可,如下:

  • 編寫規(guī)則文件;


  • 根據(jù)規(guī)則文件生成策略;


  • 根據(jù)策略生成token;


  • 使用token;

    有了token就可以能干對應(yīng)權(quán)限范圍的事了,具體使用就不介紹了,不管是UI、還是API查詢,小伙伴自己體驗一下吧(上面已經(jīng)說到)。

注:以上步驟中開啟ACL之后,沒有統(tǒng)一配置好超級管理員的boostrap token,所以每次操作都需要帶上-token參數(shù)。

總結(jié)

集群再加ACL訪問控制配置就先說到這啦,文中更主要的是提供相關(guān)思路,并沒有把所有權(quán)限配置方式舉例演示(比較多),剩下小伙伴自己嘗試吧;通過上一篇(來,Consul 服務(wù)發(fā)現(xiàn)入個門(一看就會的那種))的使用,再加上這篇的集群環(huán)境和ACL配置思路介紹,小伙伴應(yīng)該日常使用沒問題了吧;其余的功能根據(jù)業(yè)務(wù)需要再去研究吧,我如果有對應(yīng)的應(yīng)用場景,依然會第一時間分享。下期聊聊網(wǎng)關(guān)吧~~~

一個被程序搞丑的帥小伙,關(guān)注"Code綜藝圈",跟我一起學~~~

總結(jié)

以上是生活随笔為你收集整理的运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。