Consul场景用例:服务注册(Service discovery) & 服务网格(Service mesh)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Consul服务注册于发现

Consul概念

Easy Service Networking 便捷的网络服务
Consul是一个可以跨任何运行时平台和公共或私有云提供连接和保护服务的网络服务解决方案。

应用场景

  1. 服务注册与发现
    服务注册,集成了健康检查,以及DNS和HTTP协议接口用来服务注册与发现。

    • 背景
      服务端负载平衡在当前多变的世界中效率不高。
      r1
      负载平衡器通常需要前置于应用层并为其提供静态IP,这增加了成本,增加了延迟,且引入了单点故障,并且随着服务的扩展必须 更新配置。
    • 解决方案
      灵活动态的服务注册基础架构。
      r1
      作为替代传统负载均衡器,在动态的基础架构引入了服务发现机制进行通信。服务发现机制使用注册表来保存服务、其位置和运行状况的实时列表。(client-end)服务查询注册表以发现上游服务的地址,然后直接连接。这套积极允许服务自动伸缩,并在没有负载平衡器介入的情况下优雅地处理故障。
    • 特性
      1)服务注册
      Consul维护了一个包含所有节点和服务以及它们当前健康状态的注册列表。这方便了操作人员或运营商可以及时了解掌握当前环境状态,应用情况以及自动化运维工具通过HTTP协议的API与动态基础设施交互。
      r1

      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)健康检查
      健康检查配合服务发现可以防止将请求路由到不健康的服务,并能使服务轻松提供断路器功能。
      r1

  2. 服务网格

    • 背景

      网络设备如负载均衡器和防火墙,不能动态扩展配置来支持现代应用程序。
      网络防火墙基于ip规则来控制进出流量。在现实世界中,应用服务跨机器移动,频繁创建和销毁,这种基于边界的形式很难扩展,因为它会导致复杂的网络拓扑结构,以及短期防火墙规则和代理配置的蔓延。

      _2019_11_07_11_50_33

- 解决方案
    服务网格作为一种自动化和分布式的网络通信和安全方案,可以跨平台、私有和公共云运行。
    服务网格是一种新的方案来保护服务本身,而不是依赖于网络。Consul通过使用集中管理的服务策略和配置来实现基于服务标识的动态路由和安全管理。这些策略在没有基于IP的规则或网络中间件的数据中心和大型集群之间自动扩展。

r1

- 特性
  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集中管理的服务可观测性,包括所有服务间通信的详细指标,如连接数、传输字节、重试次数、超时情况、开路、请求成功\错误率和响应码。

r1

  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层的路由问题,同时保留了端到端的加密,并限制了每个网络边缘的攻击面。

相关文章
|
3月前
|
运维 Kubernetes 安全
利用服务网格实现全链路mTLS(一):在入口网关上提供mTLS服务
阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容Istio开源服务网格,用于简化服务治理,包括流量管理和拆分、安全认证及网格可观测性,有效减轻开发运维负担。ASM支持通过mTLS提供服务,要求客户端提供证书以增强安全性。本文介绍如何在ASM入口网关上配置mTLS服务并通过授权策略实现特定用户的访问限制。首先需部署ASM实例和ACK集群,并开启sidecar自动注入。接着,在集群中部署入口网关和httpbin应用,并生成mTLS通信所需的根证书、服务器证书及客户端证书。最后,配置网关上的mTLS监听并设置授权策略,以限制特定客户端对特定路径的访问。
128 2
|
28天前
|
自然语言处理 监控 Cloud Native
探索微服务架构中的服务网格Service Mesh
【10月更文挑战第7天】服务网格(Service Mesh)是微服务架构中的关键组件,通过在每个服务实例旁部署Sidecar代理,实现服务间通信的管理、监控和安全增强。本文介绍了服务网格的基本概念、核心组件、优势及实施步骤,探讨了其在现代开发中的应用,并提供了实战技巧。
|
3月前
|
运维 负载均衡 监控
探索微服务架构下的服务网格(Service Mesh)实践之路
【8月更文挑战第30天】 在当今日益复杂的分布式系统中,微服务架构已成为众多企业解决系统扩展与维护难题的利器。然而,随着服务的不断增多和网络交互的复杂性提升,传统的微服务管理方式开始显得力不从心。服务网格(Service Mesh)作为一种新兴的解决方案,旨在通过提供应用层的网络基础设施来简化服务间通讯,并增强系统的可观察性和安全性。本文将分享我在采用服务网格技术过程中的经验与思考,探讨如何在现代云原生环境中有效地实施服务网格,以及它给开发和运维带来的变革。
|
3月前
|
Prometheus Kubernetes 监控
打造无缝灾备新境界:运用服务网格ASM,将集群外服务无缝融入集群内服务,铸就高可用性坚盾!
【8月更文挑战第2天】随着微服务架构的应用,服务的高可用性变得至关重要。服务网格如阿里巴巴的ASM提供流量管理、服务发现等功能,支撑高可靠服务系统。本文介绍如何利用ASM实现集群外服务作为集群内服务的灾备方案,确保服务连续性。先决条件包括已部署ASM的Kubernetes集群环境及内外部的关键服务副本。通过定义服务条目、配置虚拟服务和目的地规则,可实现自动或手动故障转移。借助ASM的流量管理能力,确保服务高可用性和业务连续性。
50 10
|
3月前
|
Kubernetes 安全 数据安全/隐私保护
利用服务网格实现全链路mTLS(二):通过出口网关访问外部mTLS服务
阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容Istio开源服务网格,简化服务治理,包括流量管理、服务间通信安全及网格可观测性。ASM出口网关统一管理网格内的出口流量,实现全链路加密通信与精细访问控制。本文介绍如何配置ASM出口网关以管理出口流量并发起mTLS通信,涉及配置ServiceEntry、创建出口网关、设置虚拟服务及目标规则等步骤,最终实现安全可控的mTLS服务访问。
148 3
|
3月前
|
Perl
如何利用服务网格ASM使用集群外服务做集群内服务的灾备
本文档指导您如何配置阿里云服务网格(ASM)以实现在多集群环境下,服务间的优先访问及故障转移策略。
113 2
|
6月前
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
6月前
|
负载均衡 监控 Go
Golang深入浅出之-Go语言中的服务网格(Service Mesh)原理与应用
【5月更文挑战第5天】服务网格是处理服务间通信的基础设施层,常由数据平面(代理,如Envoy)和控制平面(管理配置)组成。本文讨论了服务发现、负载均衡和追踪等常见问题及其解决方案,并展示了使用Go语言实现Envoy sidecar配置的例子,强调Go语言在构建服务网格中的优势。服务网格能提升微服务的管理和可观测性,正确应对问题能构建更健壮的分布式系统。
447 1
|
6月前
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践之路
【4月更文挑战第30天】 在现代云计算的大背景下,微服务架构以其灵活性和可扩展性成为众多企业转型的首选。然而,随着服务的激增和网络交互的复杂化,传统的服务通信模式已无法满足需求,服务网格(Service Mesh)应运而生。本文通过分析服务网格的核心组件、运作机制以及在企业中的实际应用案例,探讨了服务网格在微服务架构中的关键作用及其带来的变革,同时提出了实施过程中面临的挑战和解决策略。
|
6月前
|
存储 网络协议 数据中心
服务注册中心Consul
服务注册中心Consul
72 1