歡迎來到 HashiCorp 的學(xué)習(xí)平臺!
在這里,您將找到如何執(zhí)行常見 Consul 任務(wù)的分步示例。 本合集將教你Consul的基礎(chǔ)知識以及如何操作Consul。
在深入了解 Consul 之前,您必須了解什么是服務(wù)網(wǎng)格。
什么是 Service Mesh?
服務(wù)網(wǎng)格是為本地、云或多云基礎(chǔ)設(shè)施提供安全的服務(wù)到服務(wù)通信的專用層。 服務(wù)網(wǎng)格通常與微服務(wù)架構(gòu)模式一起使用,可以在涉及復(fù)雜網(wǎng)絡(luò)的任何場景中提供價值。
服務(wù)網(wǎng)格通常由控制平面 和 數(shù)據(jù)平面組成。
控制平面維護(hù)一個中央注冊表,跟蹤所有服務(wù)及其各自的 IP 地址,這稱為服務(wù)發(fā)現(xiàn)。
只要應(yīng)用程序在控制平面上注冊,控制平面就可以與服務(wù)網(wǎng)格的其他成員共享如何與應(yīng)用程序通信,并強(qiáng)制執(zhí)行誰可以相互通信的規(guī)則。
控制平面負(fù)責(zé)保護(hù)網(wǎng)格、促進(jìn)服務(wù)發(fā)現(xiàn)、健康檢查、策略實(shí)施和其他類似的操作問題。
數(shù)據(jù)平面處理服務(wù)之間的通信。 許多服務(wù)網(wǎng)格解決方案使用 sidecar 代理來處理數(shù)據(jù)平面通信,因此限制了服務(wù)對網(wǎng)絡(luò)環(huán)境所需的感知水平。
什么是 Consul?
Consul 是服務(wù)網(wǎng)格的控制面。
Consul 是一個多網(wǎng)絡(luò)工具,提供功能齊全的服務(wù)網(wǎng)格解決方案,可解決運(yùn)營微服務(wù)和云基礎(chǔ)設(shè)施的網(wǎng)絡(luò)和安全挑戰(zhàn)。 Consul 提供了一種軟件驅(qū)動的路由和分段方法。 它還帶來了額外的好處,例如故障處理、重試和網(wǎng)絡(luò)可觀察性。 這些功能中的每一個都可以根據(jù)需要單獨(dú)使用,也可以一起使用以構(gòu)建完整的服務(wù)網(wǎng)格并實(shí)現(xiàn)零信任安全。
您可以將 Consul 與虛擬機(jī) (VM)、容器或容器編排平臺(例如 Nomad 和 Kubernetes)一起使用。 Consul 與平臺無關(guān),因此非常適合所有環(huán)境,包括遺留平臺。
如前所述,Consul 是一種多網(wǎng)絡(luò)工具,可提供服務(wù)網(wǎng)格之外的功能。 出于本教程的目的,范圍將僅限于服務(wù)網(wǎng)格。 要了解有關(guān) Consul 網(wǎng)絡(luò)功能的更多信息,請?jiān)L問 consul.io。
Consul 是如何工作的?
架構(gòu)概述
Consul 是一個分布式系統(tǒng),旨在運(yùn)行在節(jié)點(diǎn)集群上。
Consul 節(jié)點(diǎn)可以是物理服務(wù)器、云實(shí)例、虛擬機(jī)或容器。
Consul 運(yùn)行的節(jié)點(diǎn)集連接在一起,稱為數(shù)據(jù)中心。 一個數(shù)據(jù)中心將有 3 到 5 臺服務(wù)器和許多客戶端。

Consul agent
Consul 可以作為單個二進(jìn)制文件使用,并且可以作為長時間運(yùn)行的守護(hù)進(jìn)程運(yùn)行。
運(yùn)行 Consul 二進(jìn)制文件的節(jié)點(diǎn)經(jīng)常被稱為 Consul agent。
Consul 可以在兩種模式下運(yùn)行,服務(wù)器或客戶端。
服務(wù)器 agent 為 Consul 維護(hù)一致的狀態(tài)。 保持一致的狀態(tài)包括許多責(zé)任,但在高層次上,它包括以下(但不限于):
- 跟蹤可用服務(wù)、它們的 IP 地址以及它們當(dāng)前的運(yùn)行狀況和狀態(tài)
- 跟蹤可用節(jié)點(diǎn)、它們的 IP 地址以及它們當(dāng)前的運(yùn)行狀況和狀態(tài)
- 構(gòu)建了解服務(wù)和節(jié)點(diǎn)可用性的服務(wù)目錄 (DNS)
- 維護(hù)和更新 K/V 存儲
- 向所有 agent 傳達(dá)更新(八卦協(xié)議)
客戶端是一個輕量級進(jìn)程,在運(yùn)行服務(wù)的每個節(jié)點(diǎn)上運(yùn)行。
請?jiān)L問 Consul agent 文檔頁面以深入了解 Consul agent。
應(yīng)用程序開發(fā)人員通常會作為客戶端與 Consul 進(jìn)行交互。應(yīng)用程序通過使用 Envoy 等 第三方代理與 Consul 集成。 Sidecar 與應(yīng)用程序和 Consul agent一起部署。
下圖顯示了 Consul 如何與應(yīng)用程序集成。

Consul and proxies
Consul 服務(wù)網(wǎng)格中的數(shù)據(jù)平面由代理(proxies)支持和擁有。
使用 Consul 的應(yīng)用程序,將指向 localhost 并將所有流量(傳入和傳出)引導(dǎo)到本地接口。 代理將打開 localhost 上的端口,并將流量從應(yīng)用程序引導(dǎo)到其他微服務(wù)。 代理還將接收流量并將此流量引導(dǎo)回應(yīng)用程序。
Consul agent(客戶端)通過有關(guān)服務(wù)網(wǎng)格的信息使代理保持最新。 這包括諸如哪些服務(wù)可用(服務(wù)發(fā)現(xiàn))以及應(yīng)用程序是否可以與其他服務(wù)通信(服務(wù)網(wǎng)格)等信息。
在下面的示例代碼中,同一應(yīng)用程序的兩個實(shí)例與另一個服務(wù)(訂單服務(wù))進(jìn)行通信。
第一個示例選項(xiàng)卡代表應(yīng)用程序直接查詢 API 的傳統(tǒng)方法。
第二個示例選項(xiàng)卡使用 Consul 和代理。 注意 Consul 示例應(yīng)用程序是如何指向 localhost 而不是 API URL。 這種抽象為應(yīng)用程序引入了新的靈活性。 它允許動態(tài)網(wǎng)絡(luò)行為,例如故障轉(zhuǎn)移,而無需更改應(yīng)用程序。
- 傳統(tǒng)方法
resp, err := http.Get("http://api.example/v1/orders")
if err != nil {
log.Fatalln(err)
}
- Consul
resp, err := http.Get("http://localhost/v1/orders")
if err != nil {
log.Fatalln(err)
}
Consul agent 為應(yīng)用程序和代理提供了許多其他好處,例如生成代理配置、為 mTLS 創(chuàng)建 x509 證書、以及動態(tài)輪換證書。 通過將所有網(wǎng)絡(luò)責(zé)任委托給代理,應(yīng)用程序開發(fā)人員可以將注意力集中在開發(fā)業(yè)務(wù)邏輯上。 請?jiān)L問 Consul 服務(wù)網(wǎng)格文檔頁面以了解有關(guān) Consul 為應(yīng)用程序提供的好處的更多信息。