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