Consul概念
Easy Service Networking 便捷的网络服务
Consul是一个可以跨任何运行时平台和公共或私有云提供连接和保护服务的网络服务解决方案。
应用场景
-
服务注册与发现
服务注册,集成了健康检查,以及DNS和HTTP协议接口用来服务注册与发现。- 背景
服务端负载平衡在当前多变的世界中效率不高。
负载平衡器通常需要前置于应用层并为其提供静态IP,这增加了成本,增加了延迟,且引入了单点故障,并且随着服务的扩展必须 更新配置。 - 解决方案
灵活动态的服务注册基础架构。
作为替代传统负载均衡器,在动态的基础架构引入了服务发现机制进行通信。服务发现机制使用注册表来保存服务、其位置和运行状况的实时列表。(client-end)服务查询注册表以发现上游服务的地址,然后直接连接。这套积极允许服务自动伸缩,并在没有负载平衡器介入的情况下优雅地处理故障。 -
特性
1)服务注册
Consul维护了一个包含所有节点和服务以及它们当前健康状态的注册列表。这方便了操作人员或运营商可以及时了解掌握当前环境状态,应用情况以及自动化运维工具通过HTTP协议的API与动态基础设施交互。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)健康检查
健康检查配合服务发现可以防止将请求路由到不健康的服务,并能使服务轻松提供断路器功能。
- 背景
-
服务网格
-
背景
网络设备如负载均衡器和防火墙,不能动态扩展配置来支持现代应用程序。 网络防火墙基于ip规则来控制进出流量。在现实世界中,应用服务跨机器移动,频繁创建和销毁,这种基于边界的形式很难扩展,因为它会导致复杂的网络拓扑结构,以及短期防火墙规则和代理配置的蔓延。
-
- 解决方案
服务网格作为一种自动化和分布式的网络通信和安全方案,可以跨平台、私有和公共云运行。
服务网格是一种新的方案来保护服务本身,而不是依赖于网络。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层的路由问题,同时保留了端到端的加密,并限制了每个网络边缘的攻击面。