【Consul on VMs】什么是Consul?

歡迎來到 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ù)器和許多客戶端。


架構(gòu).png

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)用程序集成。


image.png

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)用程序提供的好處的更多信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容