Consul概念
Easy Service Networking 便捷的網絡服務
Consul是一個可以跨任何運作時平台和公共或私有雲提供連接配接和保護服務的網絡服務解決方案。
應用場景
-
服務注冊與發現
服務注冊,內建了健康檢查,以及DNS和HTTP協定接口用來服務注冊與發現。
-
背景
服務端負載平衡在目前多變的世界中效率不高。
負載平衡器通常需要前置于應用層并為其提供靜态IP,這增加了成本,增加了延遲,且引入了單點故障,并且随着服務的擴充必須 更新配置。Consul場景用例:服務注冊(Service discovery) & 服務網格(Service mesh)Consul概念應用場景 -
解決方案
靈活動态的服務注冊基礎架構。
作為替代傳統負載均衡器,在動态的基礎架構引入了服務發現機制進行通信。服務發現機制使用系統資料庫來儲存服務、其位置和運作狀況的實時清單。(client-end)服務查詢系統資料庫以發現上遊服務的位址,然後直接連接配接。這套積極允許服務自動伸縮,并在沒有負載平衡器介入的情況下優雅地處理故障。Consul場景用例:服務注冊(Service discovery) & 服務網格(Service mesh)Consul概念應用場景 -
特性
1)服務注冊
Consul維護了一個包含所有節點和服務以及它們目前健康狀态的注冊清單。這友善了操作人員或營運商可以及時了解掌握目前環境狀态,應用情況以及自動化運維工具通過HTTP協定的API與動态基礎設施互動。
Consul場景用例:服務注冊(Service discovery) & 服務網格(Service mesh)Consul概念應用場景 2)基于DNS的服務查找接口
Consul可以使用内置DNS伺服器進行服務發現。這簡化了現有應用程式的內建,因為幾乎所有的應用程式都支援使用DNS來解析IP位址。使用DNS替代靜态IP位址可以使服務非常輕松地做到彈性伸縮及故障轉移。
$ dig web-frontend.service.consul. ANY ; <<>> DiG 9.8.3-P1 <<>> web-frontend.service.consul. ANY ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29981 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;web-frontend.service.consul. IN ANY ;; ANSWER SECTION: web-frontend.service.consul. 0 IN A 10.0.3.83 web-frontend.service.consul. 0 IN A 10.0.1.109
3)基于HTTP協定的服務查找接口
Consul 提供了一套用來查詢服務系統資料庫中的節點,服務以及它們健康狀況的HTTP API。這套API提供了阻塞時查詢,以及對任何狀态變化的長輪訓。這允許自動化工具對服務注冊或運作狀況更改行為做出反應,以便及時更改配置或路由流量。
curl http://localhost:8500/v1/internal/ui/nodes?dc=dc1 [ { "ID": "8b6d6270-a267-6b6a-fb64-7b9bd2761d63", "Node": "localhost", "Address": "127.0.0.1", "TaggedAddresses": { "lan": "127.0.0.1", "wan": "127.0.0.1" }, "Meta": { "consul-network-segment": "" }, "Services": [ { "ID": "consul", "Service": "consul", "Tags": null, "Address": "", "Meta": { "raft_version": "3", "serf_protocol_current": "2", "serf_protocol_max": "5", "serf_protocol_min": "1", "version": "1.6.1" }, "Port": 8300, "Weights": { "Passing": 1, "Warning": 1 }, "EnableTagOverride": false, "Proxy": { "MeshGateway": {} }, "Connect": {}, "CreateIndex": 9, "ModifyIndex": 9 } ], "Checks": [ { "Node": "localhost", "CheckID": "serfHealth", "Name": "Serf Health Status", "Status": "passing", "Notes": "", "Output": "Agent alive and reachable", "ServiceID": "", "ServiceName": "", "ServiceTags": null, "Definition": {}, "CreateIndex": 9, "ModifyIndex": 9 } ] } ]
4)多資料中心(這是zk和etcd不具備的)
Consul 天然支援多資料中心且不需要複雜的配置。這允許在其他資料中心查找服務并在本地通路。預查詢進階特性實作了自動故障轉移到其他資料中心。
curl http://localhost:8500/v1/catalog/datacenters [ "DC1", "DC2" ]
5)健康檢查
健康檢查配合服務發現可以防止将請求路由到不健康的服務,并能使服務輕松提供斷路器功能。
Consul場景用例:服務注冊(Service discovery) & 服務網格(Service mesh)Consul概念應用場景
-
- 服務網格
-
網絡裝置如負載均衡器和防火牆,不能動态擴充配置來支援現代應用程式。 網絡防火牆基于ip規則來控制進出流量。在現實世界中,應用服務跨機器移動,頻繁建立和銷毀,這種基于邊界的形式很難擴充,因為它會導緻複雜的網絡拓撲結構,以及短期防火牆規則和代理配置的蔓延。
Consul場景用例:服務注冊(Service discovery) & 服務網格(Service mesh)Consul概念應用場景
-
- 解決方案
服務網格作為一種自動化和分布式的網絡通信和安全方案,可以跨平台、私有和公共雲運作。
服務網格是一種新的方案來保護服務本身,而不是依賴于網絡。Consul通過使用集中管理的服務政策和配置來實作基于服務辨別的動态路由和安全管理。這些政策在沒有基于IP的規則或網絡中間件的資料中心和大型叢集之間自動擴充。
- 特性
1)Layer 7 Traffic Management L7網絡流量控制
L7服務通信政策可以集中管理,支援進階流量管理模式,如服務故障轉移、基于路徑的路由和流量轉移,這些模式可以應用于公共或私有雲、平台和網絡。
Kind = "service-splitter"
Name = "billing-api"
Splits = [
{
Weight = 10
ServiceSubset = "v2"
},
{
Weight = 90
ServiceSubset = "v1"
},
]
2)Layer 7 Observability L7 可視化監控
L7集中管理的服務可觀測性,包括所有服務間通信的詳細名額,如連接配接數、傳輸位元組、重試次數、逾時情況、開路、請求成功\錯誤率和響應碼。
3)Secure services across any runtime platform 跨運作時平台的安全服務
傳統和現代工作負載之間的安全通信。SIDEAR代理允許應用程式在沒有代碼更改的情況下內建。L4 支援提供幾乎通用的協定相容性。
4)Certificate-Based Service Identity 基于證書的服務辨別
TLS證書用于辨別服務和保證通信安全。使用SPIFFE格式的證書與其他平台進行互動。Consul可以作為證書頒發機構以簡化部署,也可以與外部簽名頒發機構(如Vault)內建。
5)Encrypted communication通信加密
所有服務間通信都使用TLS進行加密和身份驗證。使用TLS為服務間安全通信提供了強有力的保證,并確定傳輸中的所有資料都是加密的。
6)Mesh Gateway 網格網關
不同雲區域、vpc之間以及Overlay網絡和Underlay網絡之間的連接配接通信不在需要負載的網絡隧道和NAT。
網格網關解決了TLS層的路由問題,同時保留了端到端的加密,并限制了每個網絡邊緣的攻擊面。