Istio服务网格中的XDS通信

本文深入探讨了Istio服务网格中Envoy代理与控制平面Pilot组件之间的XDS通信协议。讲解了go-control-plane项目、Pilot组件(包括pilot-discovery和pilot-agent)的工作原理,以及XDS协议在服务发现和配置下发中的应用。重点分析了Envoy如何通过ADS与Istio进行集成,展示了Envoy、Agent和Discovery之间的通信流程。
摘要由CSDN通过智能技术生成

背景

服务网格解决方案Istio的架构从逻辑上分为数据平面控制平面

  • 数据平面 由一组智能代理(Envoy)组成,被部署为 边车。这些代理负责协调和控制微服务之间的所有网络通信。它们还收集和报告所有网格流量的遥测数据。

  • 控制平面 管理并配置代理来进行流量路由。

其中控制面与数据面之间的通信协议为 XDS (X Discovery Service),其中x代表其他单一类型资源的API,如LDS(Listener DS),RDS(Router DS),CDS(Cluster DS)等。

XDS通信协议API由Envoy提出,用于实现其动态配置,来应对不断变化的基础架构。

在通过XDS进行不同单一类型资源配置时,存在顺序一致性上的问题,可能导致部分临时流量的丢失。

因此Envoy又推出了ADS (Aggregated Discovery Service),ADS 允许单一管理服务器通过单个 gRPC 流,提供所有的 API 更新。配合仔细规划的更新顺序,ADS 可规避更新过程中流量丢失。

本文就服务网格Istio中如何与Envoy进行XDS协议通信为主体内容进行讲解。

go-control-plan项目

项目go-control-plane是Envoy基于Go语言实现的服务发现API工程

项目中提供了两个库:

  • API服务: 基于GRPC实现了xDS API的服务端,该服务负责推送、更新Envoy配置。

  • 配置缓存: 为了能够快速响应Envoy请求,代码库会在内存中缓存一份Envoy配置。

样例

Envoy在其github源码仓库提供了一个xDS Server样例,本节进行讲解。

源码修改

由于测试网络限制,对部分源码进行修改:

 

编译与运行

运行命令为make example,为了方便查看日志,将envoyxDS Server两个进程运行分成两个命令。

xDS Server

编译二进制:

 go build -race -o bin/example internal/example/main/main.go

运行xDS Server:

其中打印的部分配置缓存json内容如下:

启动之后,xDS Server阻塞在监听端口18000上,等待请求的连接。

envoy

启动配置文件部分释义如下:

 # sample/bootstrap-xds.yaml
 admin:
   address:
     socket_address:
       address: 127.0.0.1
       port_value: 19000              # envoy admin端口为19000
 dynamic_resources:                   # 动态资源配置(xds配置)
   cds_config:                        # cds 
     api_config_source:
       api_type: GRPC                 # GRPC通信方式
       grpc_services:
       - envoy_grpc:
           cluster_name: xds_cluster  # xDS Server集群名称为'xds_cluster'
   lds_config:                        # lds 
       # ......
           cluster_name: xds_cluster
 node:
   id: test-id                        # envoy本机信息ID
 static_resourc
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值