當前位置:
首頁 > 最新 > Service Mesh新成員:Consul 1.2

Service Mesh新成員:Consul 1.2

本文譯自 HashiCorp 官網關於 Consul 1.2 支持 Service Mesh 發布的博客文章。

本文是 HashiCorp 創始人 Mitchell Hashimoto 在 2018 年 6 月 26 日發布的關於 Consul 1.2 新功能 Service Mesh 的官方介紹。譯者接觸過的 Hashicorp 的產品有過不少,每款都給人感覺功能強大,設計簡潔,可以說是都是非常優秀的開源產品(當然這與背後的 Hashicorp 公司商業級支撐有關)。譯者有幸見過作者 Mitchell 一面,是個日裔混血,佩服他們取得的成就,期待他們推出的新功能能夠取得市場上的成功。

Service Mesh 是最近很火的微服務新範式,以 Istio 為首的開源項目引領著潮流,其他各大公司也在迅速跟上,包括 Hashicorp 也在 Consul 中加入類似的功能。我們後續也將提供 Service Mesh 這方面更多的技術文章,敬請期待。

我們很激動宣布 HashiCorp Consul 1.2 正式發布了。這個版本主要新增了一個新的功能叫做 Connect, 它能夠將現有的 Consul 集群自動轉變為 service mesh (服務網格)的解決方案。Connect 通過自動 TLS 加密和基於鑒權的授權機制支持服務和服務之間的安全通信。

當前全球有數以百萬計的機器上正部署著 Consul。當升級到 Consul 1.2 並打開 Connect 功能後,任何現有的集群將立刻變身為支持任何包括物理機、雲、容器和調度器等各種平台的 service mesh 方案。


Service mesh 是企業和組織採用微服務以及動態雲計算基礎設施方案的必選方案。傳統的基於主機的網路安全機制必須被替代為現代的基於服務的安全機制,以適應現代運行時環境的高度動態特性。

Service mesh 提供了以下三個關鍵問題的一種高可用分散式解決方案:

服務發現:服務之間必須能夠互相發現找到彼此。

配置:服務必須能夠從一個中心的配置源接收運行時的配置信息。

隔離:服務之間的通信必須是被授權和加密的。

直到這個版本發布之前,Consul 分別用 DNS 解決了服務發現的使用場景,以及 K/V 存儲解決了配置的使用場景。Connect 則將解決隔離的使用場景。這三項功能聯合在一起提供了一種可運行在任何平台的 service mesh 完整解決方案。


Connect 是 Consul 的一個主要新功能,旨在通過自動 TLS 加密和基於鑒權的授權機制提供服務之間的安全通信。今天宣布的 Connect 的功能是完全免費並且開源的。Consul 1.2 提供 Connect 功能面向公眾的發布。

Connect 在設計開發時就貫注了易於使用的想法。它可以僅僅通過一個配置參數就打開,在服務註冊時額外添加一行就可以使得任何現存的應用接受基於 Connect 的連接。證書更新是自動的,因此不會導致服務停機。對於所有必須的子系統,Connect 僅僅需要一個二進位文件就可以支持。後面我們會涵蓋很多其他的功能。

GIF

在易於使用的基礎上,Connect 暴露了 Consul 的很多新功能。這篇文章接下來會介紹其中一些功能的細節,不過讓我們來先列舉一下具有 Connect 的 Consul 所有主要的新功能:

流量加密:使用 Connect 創建的所有流量都是使用雙向 TLS 的,這確保了所有流量在傳輸中都是經過加密的。這使得服務可以安全地部署在低信任度的環境中。

連接授權:使用 intentions 創建服務連接圖,允許或攔截服務之間的通信。與防火牆使用 IP 地址不同,Connect 使用服務的邏輯命名。這意味著規則可以獨立地進行擴展,無論有一個 web 服務還是 100 個。Intentions 可以通過界面、命令行、API 或者 HashiCorp Terraform 來進行配置。

Sidecar 代理:應用可以使用輕量的 sidecar 代理進程來自動創建進出流量的 TLS 連接。這使得現有的應用可以不進行任何修改就可以使用 Connect。Consul 不僅提供了一個不需要任何外部依賴的內置代理,還提供了對例如 Envoy 等第三方代理的支持。

原生集成:對於性能非常敏感的應用,可以不使用代理,而通過集成原生 Consul Connect API 來創建和接受連接,從而獲得更優的性能和安全。

4 層 vs. 7 層:鑒權是在 4 層實施的。Consul 將 7 層的功能和配置代理給可插拔式的數據層。你可以集成第三方代理,例如 Envoy,來提供諸如基於請求路徑的路由,鏈路追蹤和其他的功能,將 Consul 留作服務發現、鑒權和授權的功能。

證書管理:Consul 使用 CA 生成並分發證書。Consul 提供了一個不依賴外部系統的內置 CA 系統,與 HashiCorp Vault 集成後,還可以擴展支持其他 PKI 系統。

證書更新:Connect 可以自動更新根證書和子證書。根證書更新使用證書交叉簽名來保證新老證書在更新期間可以共存,從而不影響服務。此系統還支持無縫配置新的 CA 提供商。

基於 SPIFFE 的身份認證:Consul 使用 SPIFFE 規範進行身份識別和認證。這使得使用 Connect 的服務可以創建和接受來自其他遵守 SPIFFE 系統的連接。

網路和雲平台無關:Connect 使用基於 TCP/IP 的標準 TLS。這使得 Connect 可以支持任何網路配置,只要目標服務廣播的 IP 地址在操作系統中可以訪問。而且,服務之間可以進行跨雲通信,而不藉助於複雜的 overlay 層級。

應用可以無須進行任何修改,使用代理 sidecar 創建出入連接。在使用 Connect 後,僅僅添加如下一行服務註冊配置就可以使得這個服務能夠接受基於 Connect 的連接:

唯一的區別就是由 開頭的那行。這一行的存在使得 Consul 可以自動為這個服務啟動和管理一個代理進程。這個代理進程代表了這個特定的服務。它在一個動態分配的埠上接受連接,驗證並授權這個 TLS 連接,然後代理回一個標準的 TCP 連接到服務進程。

對於上游的依賴,可以多添加幾行配置通過 Connect 監聽連接並代理到服務。例如,假設我們的 「web」 服務需要和 「db」 服務通過 Connect 進行通信:

上面配置了一個受管代理並設置了監聽本地 9191 埠將請求代理到任何遠程 「db」 服務。通過配置 「web」 服務使用這個本地埠,所有 「web」 和 「db」 之間的通信都將成為加密的和已授權的。

需要注意的是這些例子中,原來的應用 「web」 保持沒有修改且感知不到 Connect 的存在。僅僅通過一行到幾行的配置代碼,任何應用都可以使用自動管理的代理 sidecar 來接受和創建 Connect 連接。

可以參閱 代理的使用手冊文檔 了解更多內容。如果某個應用有極高的性能需求,那麼它可以 原生地集成Connect。這使得服務可以完全不需要代理。


為了最佳的安全性,服務應該盡量做到僅僅接受基於 Connect 的連接。然而,這給連接到服務進行開發或測試帶來了挑戰。Consul 提供了一種簡單的方式通過使用 命令運行本地代理,從而使用 Connect 創建連接到服務。

考慮一個場景示例,一個 PostgreSQL 資料庫服務僅接受來自 Connect 的連接,某運維工程師因為維護需要,想使用 連接這個資料庫。他可以在本地機器上通過 命令來使用 進行連接:

在另外一個 shell 終端中,可以使用標準 客戶端連接:

其中 命令參數代表了源服務的認證信息。服務並不需要存在,但是調用者必須擁有合法的 ACL token 來註冊這個服務,Consul 必須配置為允許源和目標服務之間的連接。

對遠程服務進行本地開發和測試是 service mesh 的一個常見工作流挑戰,然而對於 Consul 和 Connect 來說卻極為容易。


服務之間的訪問控制通過 「intentions」 進行配置。一個意向(intention)是一條從源到目的服務的允許或攔截規則。Intentions 可以通過 UI 界面、命令行、API 或 Terraform 進行創建。

按照上述示例,允許從 服務到 的訪問,可以執行:

上述命令允許 「web」 服務同 「db」 服務進行通信。然後這個 intention 可以通過 立刻禁用兩個服務之間的連接。

Intentions 也可以通過服務的部署進行單獨管理,可以配置 ACL 規則,使得僅有特定的服務可以修改 intentions 。這使得安全和隔離可以動態並幾乎實時地進行配置和管控。


我們對於 Consul 1.2 和它所支持的新功能很是激動。由於這個功能和它的影響較大,Consul 1.2 中提供的 Connect 應該被認為是 beta 階段。這個夏天我們將在 Connect 上努力,希望在年底前能去掉 beta 的標籤。

在將來,我們也會圍繞 Connect 構建更多功能,包括新的 UI 增強、對 Envoy 代理的支持,以及同 Nomad 和 Kubernetes 的集成等等。Consul 1.2 中的 Connect 僅僅是個開始。

訪問 https://www.consul.io/ 下載 Consul 1.2。

下面的頁面能很好地進一步了解:

功能主頁 - 這是 Consul Connect 的專門主頁,包含對所提供功能的總覽和文檔鏈接。

Connect 使用步驟 - Consul 使用步驟新增了一步 Connect 並包含快速入門的一個瀏覽介紹。

Connect 互動式教程 - 帶你過一遍運行 Connect 關鍵步驟的互動式教程。

Connect 參考手冊 - Connect 的文檔手冊中包含關於 Connect 如何工作、代理、原生集成和證書管理等等的所有細節。在部署 Connect 之前,推薦先閱讀這個文檔手冊。

Connect 安全清單 - Connect 和 Consul 其餘的部分相比有不同的安全需求。為了運維的安全性,我們推薦查看此清單,閱讀並理解 Consul 的安全模型。

Connect 生產指引 - 這是生產環境配置 Consul 集群 Connect 功能的一個完整配置指引,包括配置最大限度安全的必要步驟。

Connect 白板介紹 - 這個視頻是創始人兼聯合 CTO Armon Dadgar 介紹 Connect 關於網路管理、安全和性能等方面的功能。

本文譯自 HashiCorp 官網關於 Consul 1.2 支持 Service Mesh 發布的博客文章。

作者:Mitchell Hashimoto翻譯:董干

原文地址:https://blog.idevfun.io/consul-1-2-service-mesh/


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 dotNET跨平台 的精彩文章:

Microsoft Graph:連接每個應用都需要的基礎數據

TAG:dotNET跨平台 |