一、简介

Istio向应用中注入了istio-init和istio-proxy两个sidecar容器,Pilot-agent正是istio-proxy容器的启动命令入口。通过kubectl可以看到,在istio-proxy容器中一共有pilot-agent和Envoy两个进程,pilot-agent正是Envoy的父进程。

pilot-agent除了启动Envoy进程,还可以代理应用的健康检查,代理xDS请求,Local DNS服务,像kubelet一样支持WorkloadEntry的健康检查。

二、Pilot-agent的核心架构

Istio深入学习十 Pilot-agent的架构_架构

(1) Envoy Agent:Envoy代理守护模块,主要职责是根据进程启动参数和环境变量等输入构建Envoy Bootstrap文件;然后运行子进程Envoy并负责等待其退出。

(2) xDS Proxy: 主要用来代理xDS请求,还支持把健康检查的结果上报给Istiod

(3)SDS 服务器:由Node Agent合并而来,是工作负载的证书提供者,通过SDS接口向Envoy提供证书,并且负责证书轮转。

(4)DNS服务器:处理本地应用DNS的解析请求针对虚拟机应用和ServiceEntry定义的服务网格外部服务。

(5) App Prober: 用来代理Kubelet的Readiness Probe和Liveness Probe,可以避免Envoy对流量进行拦截导致的健康检查失败问题。

(6) HealthChecker: 周期性执行健康检查,通过xDS Proxy将健康检查结果上报给Istiod。

三、Pilot-agent的原理

1.Envoy的启动

生成Bootstrap配置文件 ,准备Envoy参数列表 ,创建exec.Cmd启动对象,并且通过其Start方法启动Envoy进程。

2.Envoy异常退出流程

Envoy Agent执行清理工作,清理Boostrap文件,发送退出通知;Envoy Agent主线程监听退出通知队列,接收到退出通知后,自己主动退出,Pilot agent主进程结束。

3.优雅退出

Sidecar 优雅退出流程如下

1.Pilot-agent有个独立的信号处理线程,接收SIGTERM信号,然后通知Envoy Agent停止Envoy子进程

2.Envoy Agent模块接收到停止信号后,通知Envoy进程优雅地关闭监听器,然后Envoy Agent等待一段优雅删除时间,这时Envoy主动优雅地断开连接,最后发送强制杀掉Envoy进程的通知。

3.Envoy Proxy模块接收到强制删除Envoy进程通知后,如果Envoy进程还没有退出,则强制将其杀掉。

4.xDS代理

1.下游ADS服务器:接收Envoy的xDS请求,并透明地转发给上游请求处理模块,还将上游响应处理模块转发的xDS响应透明地转发给Envoy。

2.上游请求处理模块:单纯地将队列中的xDS请求按照顺序发送到上游的Istiod

3.上游响应处理模块:接收控制面Istiod发送回来的xDS响应,对NDS,PCDS,ECDS这三种资源做单独的拦截处理,将其余类型直接透明转发到下游ADS服务器。

5.证书管理

SDS工作形态有两种

1.工作负载mTLS证书被挂载到Sidecar容器时,SDS根据本地证书文件生成

SDS secret。

2.本地没有证书挂载,SDS作为客户端向Citadel发起createCertificate请求

Citadel CA处理createCertificate请求,为工作负载签发证书,然后把证书发送到SDS服务器

SDS先把证书缓存下来,并且负责证书的轮转;然后把工作负载证书转换成Envoy Secret,并且发送给Envoy

6.DNS服务器

本地DNS服务器负责应用的DNS解析,本地DNS服务器找不到DNS记录时,本地DNS服务器继续通过级联的方式向上游DNS服务发起解析请求。

知识总结

  1. 角色与功能
  • Pilot-agent主要负责生成Envoy代理的配置文件,并管理其生命周期。
  • 它通过与Istio控制平面的交互,确保Envoy代理能够正确配置并高效运行。
  1. 策略网络
  • 作为Pilot-agent的核心部分,策略网络使用神经网络来表示和学习策略。
  • 策略网络根据环境状态输出行动的概率分布,使得Pilot-agent能够基于过去的交互经验进行学习和调整策略。
  1. Envoy代理管理
  • Pilot-agent负责启动Envoy代理,并在其运行过程中进行监控和管理。
  • 如果Envoy代理出错或配置发生变更,Pilot-agent会负责重启或重新加载Envoy代理。
  1. 配置生成
  • Pilot-agent根据Istio控制平面的指令和配置信息,生成Envoy代理所需的配置。
  • 这些配置包括路由规则、服务定义、监听设置等,确保Envoy代理能够正确处理服务网格中的流量。
  1. 服务发现与流量管理
  • Pilot-agent与Istio的其他组件协同工作,实现服务发现功能。
  • 它通过监听Kubernetes等注册中心的服务信息,将服务发现结果传递给Envoy代理,使Envoy能够正确地路由流量。
  • 此外,Pilot-agent还参与流量管理功能,如A/B测试、金丝雀发布等,以及提供弹性功能,如超时、重试、熔断器等。
  1. 安全性
  • Pilot-agent还涉及服务之间的安全性管理。
  • 它与Istio的证书颁发机构(CA)交互,为Envoy代理签发证书,确保服务之间的通信安全。
  1. 集成与扩展性
  • Pilot-agent作为Istio的一部分,与其他组件(如Istiod、Envoy等)紧密集成,共同构建服务网格的功能。
  • 它也提供扩展性,允许用户根据具体需求进行定制和扩展。