当前位置:首页 > 云计算 > 如何将第三方服务注册集成到 Istio ? > 正文

如何将第三方服务注册集成到 Istio ?

导读:本文转载自微信公众号“赵。如需转载本文,请与赵公共号码联系。目录Istio服务模型试点服务模型源代码分析第三方服务注册表集成咨询集成其他服务注册表集成摘要参考文档作为

本文转载自微信公众号“赵。如需转载本文,请与赵公共号码联系。

AI人工智能网

目录

Istio服务模型试点服务模型源代码分析第三方服务注册表集成咨询集成其他服务注册表集成摘要参考文档作为云本地服务网格域中的热门开源项目,Istio可以为流量管理、安全通信、服务可见性等微服务提供非侵入性服务治理能力。目前,越来越多的微服务项目开始考虑将其微服务基础设施迁移到Istio。

Istio对Kubernetes有很强的依赖性,其服务发现基于Kubernetes。大量现有的微型服务项目要么尚未迁移到库本内特斯;库本内特斯用于部署和管理,但领事、尤里卡和其他服务注册解决方案或自建服务注册中心仍在使用。

在这种情况下,我们如何以最低的成本将现有的微服务项目与Istio快速集成,以享受由Istio提供的各种服务治理功能?本文将对Istio 服务注册机制的原理进行分析,并提出几个可行的与第三方服务注册中心整合的方案,供读者参考。

Istio服务模式

让我们看看Istio的内部服务模型。在Istio控制平面中,Pilot组件负责管理服务网格中的服务和流量策略。飞行员将服务信息和路由策略转换成xDS接口的标准数据结构,并在数据平面上发送给特使。

Pilot不负责网格本身中的服务注册表,而是通过集成其他服务注册表来获取网格中管理的服务。此外,Istio还支持通过API向网格添加除注册表以外的独立服务。

图1 Istio服务模型数据源

从上图可以看出,在Pilot中管理的服务数据有两个数据源:

服务注册:它来自每个服务注册的表,例如Kubernetes中的服务和consulkata中注册的服务。Istio这些服务注册表通过特定的适配器连接,适配器将服务注册表中的私有服务模型转换为由Istio内部支持的标准服务模型。配置存储:来自各种配置数据源的独立服务通过由Istio定义的服务入口和工作负载入口资源类型添加到飞行员的内部服务模型中。飞行员服务模型的源代码分析

下图显示了Pilot服务模型中涉及的代码模块:

图2与试点服务模型相关的代码结构

Pilot的入口功能是Pilot/cmd/Pilot-Discovery/main . go中的主要方法,主要方法创建Discovery Server,Discovery Server,主要包含与服务模型相关的三个部分:

配置控制器:用于管理各种配置数据,包括用户创建的流量管理规则和策略。在与服务模型相关的配置数据中有两个API的对象,即服务入口和工作负载入口。Istio当前支持三种类型的config controller:Kubernetes:Kubernetes用作配置数据的存储。这个方法直接连接到kubernetes强大的CRD机制来存储配置数据。它简单方便,是Istio的默认配置存储方案。内存:一个内存中的配置控制器实现,它可以监控一个文件目录,并加载在该目录的yaml文件中定义的Istio API配置对象。这种方法主要用于测试。通过网状配置协议,一个到多个网状配置协议Server可以被访问。Pilot从MCP服务器获取网格配置数据,包括由服务入口和工作负载入口定义的服务数据,以及其他配置,如路由规则,如虚拟服务和目标规则。在Istio中有一个厨房组件,它被实现为MCP Server,配置数据从Kubernetes API Server获得,然后通过MCP协议提供给Pilot。服务控制器:负责访问各种服务注册中心,并从服务注册中心同步需要在网格中管理的服务。目前,Istio支持的服务注册包括:Kubernetes:与Kubernetes注册对接,Kubernetes的服务和端点可以收集到Istio中。领事:对于领事目录,将领事中注册的服务数据收集到Istio中。外部服务发现:此服务注册是特殊的。后端不接收服务注册表,但侦听来自配置控制器的配置更改消息。从配置控制器获取服务入口和工作负载入口资源,并以服务注册表的形式提供给服务控制器。发现服务:将服务模型和控制平面配置转换成数据平面的标准数据格式,并通过xDS接口发送给数据平面的代理。主要包括以下逻辑:

启动GRPC Server并接收来自特使方的连接请求。从特使端接收xDS请求,从配置控制器和服务控制器获取配置和服务信息,生成响应消息并发送给特使。监控来自配置控制器的配置更改消息和来自服务控制器的服务更改消息,并通过xDS接口将配置和服务更改内容推送给特使。第三方服务注册表集成

领事一体化

由于与库本内特斯的密切关系,Istio最初专注于库本内特斯服务注册的整合。虽然在Istio的初始版本中有Consort和Eureka自适应代码,但是这些代码基本上是原型验证中的节点,并且存在许多故障和性能问题。

由于领事用作自主研究的后端存储服务注册,我们对领事与Istio集成时的适应性进行了大量的测试和研究,解决了功能和性能效率方面的一些问题。这些领事适应问题解决后,已被纳入Istio版本。请参阅以下公关:

使用监视而不是轮询来获取来自领事目录#17881的更新修复:领事高CPU使用率(#15509) # 15510避免不必要的服务更改事件(# 11971) # 12148使用服务元来转换协议和其他服务属性# 9713在这些问题解决之后,领事注册表的集成已经基本可用。要将领事连接到飞行员,只需在飞行员发现启动命令中通过这两个参数指定注册表类型和领事的连接地址:-注册表领事-领事服务器。

其他服务注册表的集成

虽然尤里卡的改编代码框架在1.0版中仍然可用,但是尤里卡改编的相关代码在Istio之后的版本中已经被完全删除。本机Istio代码不支持除库伯内特和领事之外的其他服务注册表。但是,我们可以通过以下三种方式将其集成到Istio中。

图3集成第三方服务注册表的三种方法

在上图中,三种不同的集成方法分别标有红色、绿色和三种颜色。

定制服务注册适配器

如图3中的红色箭头所示,我们可以编写一个自定义适配器来集成第三方服务注册表。定制适配器从第三方服务注册表中获取服务和服务实例,将其转换为Pilot中的标准模型,并将其集成到服务控制器中。自定义适配器需要实现serviceregistry。实例接口。这种方法的原理类似于领事服务登记处的改编,可以参照领事服务登记处的改编代码编写。

该方案的实现需要熟悉Pilot内部服务模型和服务注册自适应相关Istio源代码,并且需要将定制适配器代码和Pilot代码一起编译以生成定制PILOT二进制执行文件。这个方案的问题是它与Istio代码强耦合,并且在升级Istio的后续版本时,可能需要修改和重新编译适配器代码。

自定义MCP Server

这种集成方法的业务流程如图3中的蓝色箭头所示。该方案需要编写一个定制的MCP Server来从第三方注册中心获取服务和服务实例,然后将它们转换成服务入口和工作负载入口资源,并通过MCP协议提供给导频中的MCP配置控制器。

这样,自定义MCP Server的地址需要通过全局方法选项中的配置源参数来设置。应当注意,当前的1.6配置控制器实现不允许同时使用不同类型的配置控制器。这意味着,如果定制MCP Server用于获取第三方注册中心的服务数据,厨房也必须用于获取其他控制面的配置。

config sources:-address:istio-Galile . istio-system . SVC:990address:$ { you-cous Tom-MCP-server }:9901。从1.5版开始,厨房的功能和被合并到Istiod,默认情况下被禁用。从伊西托控制面的简化趋势来看,厨房将来可能会逐渐被废弃,其自身功能的稳定性也值得怀疑。因此,我不建议在产品中使用厨房。

此外,根据Istio社区中的该MCP over XDS提议,该社区正在讨论使用XDSv3/UDPA来代替当前的MCP协议来传输配置数据,因此MCP服务器和Pilot之间的通信机制可能会在版本1.7中改变。

将服务条目和工作负载条目写入API Server

这种集成方法的业务流程如图3中的绿色箭头所示。我们只需要编写一个独立的服务,它从第三个方法服务注册表中获取服务和服务实例数据,然后将它们转换为Istio的ServiceEntry和WorkloadEntry资源,并通过K8s API Server将它们写入API Server中。内置于Pilot的Kube配置控制器将监听与K8s API Server和Istio相关的资源对象的变化,并将服务入口和工作负载入口转换为Piolot的内部服务模型。

摘要

本文分析了集成Istio和第三方服务注册表的几种可能方法,包括定制服务注册表适配器代码、定制MCP Server和使用独立服务将ServiceEntry和WorkloadEntry编写为API Server的三种方法。有需要的读者可以根据项目的实际情况选择采用哪种方法。由于第一种和第二种方法目前都存在一些问题,我建议先采用第三种方法,并考虑在完成对厨房和MCP的修改后再采用第二种方法。

注:本文的分析和建议基于使用Istio 1.6的前提。随着Istio版本的不断发展,其服务模式和注册相关机制可能会发生变化,与第三方服务注册表的集成方法也可能会发生变化。

参考文件

Istio 服务注册插件机制Istio导频代码深度分辨率Istio和管理微服务Istio1.6更改说明将第三方服务注册中心与Istio集成的推荐方法


推荐阅读:

      如何将第三方服务注册集成到 Istio ?

最新动态