我目前正在研究1.6版中的服务网格Istio。数据平面(Envoy代理)由受控平面配置。特别是Pilot(istiod的一部分)负责将路由规则和配置传播给特使。我想知道通讯方式如何?
谢谢!
答案 0 :(得分:2)
初始化
Envoy在启动时如何进行自身初始化很复杂。本节从高层次上解释了该过程的工作方式。在所有侦听器开始侦听并接受新连接之前,以下所有情况都会发生。
在启动过程中,cluster manager经历了多阶段初始化,首先初始化静态/ DNS群集,然后初始化预定义的EDS群集。然后,它会初始化CDS(如果适用),等待bounded period of time的一个响应(或失败),并对CDS提供的集群执行相同的主/次初始化。
如果集群使用active health checking,则Envoy还会进行一次主动运行状况检查。
集群管理器初始化完成后,RDS和LDS初始化(如果适用)。服务器等待bounded period of time对LDS / RDS请求的至少一个响应(或失败)。之后,它开始接受连接。
如果LDS本身返回需要RDS响应的侦听器,则Envoy进一步等待bounded period of time直到收到RDS响应(或失败)。请注意,此过程发生在以后通过LDS进行的每个将来的侦听器添加上,称为listener warming。
完成所有前面的步骤之后,侦听器开始接受新的连接。此流程可确保在热重启期间,新进程完全能够在耗尽旧进程之前接受并处理新连接。
初始化的主要设计原则是,始终确保Envoy在initial_fetch_timeout内进行初始化,并尽最大努力在管理服务器可用性的范围内获得完整的xDS配置集。
关于更新特使配置:
运行时配置
Envoy支持“运行时”配置(也称为“功能标志”和“决策器”)。可以更改配置设置,这将影响操作,而无需重新启动Envoy或更改主要配置。当前支持的实现使用文件系统文件树。 Envoy在已配置的目录中监视符号链接交换,并在发生这种情况时重新加载树。这种类型的系统通常部署在大型分布式系统中。其他实现将不难实现。支持的运行时配置设置在操作指南的相关部分中进行了说明。 Envoy将使用默认的运行时值和“空”提供程序正常运行,因此不需要这样的系统即可运行Envoy。
运行时configuration。
有关{@ 3}}的特使代理工作方式的更多信息。
合并的好处:引入istiod documentation
已经确定微服务的许多常见好处并不适用于Istio控制平面,因此我们决定将它们统一为一个二进制文件: istiod (“ d”用于{{ 3}})。
让我们看看新包装的好处:
安装变得更容易。所需的Kubernetes部署和相关配置更少,因此Istio的配置选项和标志集大大减少了。在最简单的情况下, 您可以通过启动一个Pod来启动启用了所有功能的Istio控制面板。
配置变得更加容易。 Istio如今拥有的许多配置选项都是编排控制平面组件的方法,因此不再需要。您也不再需要更改群集范围的
PodSecurityPolicy
来部署Istio。使用虚拟机变得更加容易。要将工作负载添加到网格中,现在只需要安装一个代理和生成的证书即可。该代理仅连接回单个服务。
维护变得更加容易。安装,升级和删除Istio不再需要复杂的版本依赖性和启动顺序。例如:要升级,您只需要在现有控制平面旁边启动一个新的isidod版本,对其进行微调,然后将所有流量移至该平面即可。
可扩展性变得更容易。现在只有一个要扩展的组件。
调试变得更加容易。更少的组件意味着更少的跨组件环境调试。
启动时间缩短了。组件不再需要彼此等待以定义的顺序启动。
资源使用率下降而响应性上升。组件之间的通信得到保证,并且不受gRPC大小限制。可以安全地共享缓存,从而减少了资源占用。
istiod将Pilot,Galley,Citadel和Sidecar喷油器先前执行的功能统一为一个二进制文件。
一个单独的组件istio-agent通过将配置和秘密安全地传递给Envoy代理,帮助每个小车连接到网格。严格来说,虽然代理仍然是控制平面的一部分,但它是按单点运行的。通过将以前作为DaemonSet运行的每个节点功能滚动到每个Pod代理中,我们进一步简化了操作。
希望有帮助。