视频讲解:Envoy手把手入门视频讲解

envoy 用 ADS 动态发现配置的方法

这里使用的配置文件是 envoy-docker-run/envoy-1-ads.yaml

为什么要使用 ADS ?

cds_config 和 lds_config 是分开的,这意味着 cluster 和 listener 配置可以从不同的控制平面获取,这样会遇到配置不同步的问题,即使它们用的是同一个控制平面也可能因为到达次序不同而不同步。

譬如 listenerA 中使用了 clusterA,但是 listenerA 的配置可能在 clusterA 之前下发到 envoy ,使 envoy 认为 listenerA 使用了一个不存在的 clusterA。

ADS 支持所有类型动态配置的下发,并且会处理配置间的依赖,保证配置的下发顺序,是优先选用的配置发现方法,实现原理见配置下发协议的说明 xDS REST and gRPC protocol

配置 ADS 地址

首先配置 ADS 的地址,ADS 地址的配置方式与 XDS 相同,都是以 cluster 形式在配置文件中设置:

static_resources:
  clusters:
  - name: ads_cluster
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    http2_protocol_options: {}
    load_assignment:
      cluster_name: ads_cluster
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: 127.0.0.1
                port_value: 5678

配置 ads_config

然后配置 ads_config,在 ads_config 中引用上面配置的 ads_cluster,另外 cds_config 和 lds_config 设置成 ads 方式,如下:

dynamic_resources:
  ads_config:
    api_type: GRPC
    grpc_services:
      envoy_grpc:
        cluster_name: ads_cluster
  cds_config: {ads: {}}
  lds_config: {ads: {}}

运行效果

除了启动 envoy 时用 envoy-1-ads.yaml 文件,过程与 用 XDS 下发配置 相同:

./run.sh envoy-1-ads.yaml

参考