一、背景
Istio的Discovery Server负责收集和分发服务之间的网络配置信息,以支持服务之间的通信和流量管理。它充当了一个中心化的组件,协调了服务的发现、负载均衡、流量路由等任务,从而帮助管理和控制微服务架构中的通信流量。它与Envoy代理协同工作,帮助服务网格中的各个组件进行动态发现和配置更新。
二、Discovery Server结构
discoveryServer的结构体详细属性如下:
2.1 Environment
Environment为Pilot提供了聚合环境API接口,主要结构有:
Environment集成了Istio的服务注册和发现功能的服务和Istio规则配置的存储结构。以及对MeshConfig的变化,做了Watch机制来动态更新MeshConfig。最重要的结构是PushContext,它是DiscoveryServer推送过程中,跟踪推送的状态、Metrics和错误。推送后会重置Metrics,一开始所有值都为零,当推送完成时,状态会重置。
2.2 ConfigGenerator
ConfigGenerator的作用是生成XDS响应,对应的是LDS、RDS、CDS、EDS的构建,也是DiscoveryServer主要的功能。
2.3 pushChannel
pushChannel是用于去抖动的缓冲区,在去抖动后,pushRequest将被发送到pushQueue。
2.4 pushQueue
pushQueue去抖动之后和真正的xds推送之前使用的缓冲区。
2.5 PushContext
pushContext作为推送的上下文在DiscoveryServer配置推送过程中传递,包括了推送状态、监控指标、错误等信息,还包括了规则导出的配置决定是否推送该规则;vs、dr的规则索引记录;envoyFilter和wasm插件的命名空间配置;认证和授权策略;网格配置等信息。