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

envoy 的 lds/cds/rds/sds/eds

dynamic_resources 配置中只有 lds_configcds_configads_config,分别对应 listenter、cluster 和聚合发现:

"dynamic_resources": {
  "lds_config": "{...}",
  "cds_config": "{...}",
  "ads_config": "{...}"
},

但可以动态下发的配置不只有 listener 和 cluster。

cluster 中的 endpoint、tls 用到的 secret、HttpConnectionManager 中用到 route 也可以动态下发,对应的发现服务分别是 edssdsrds。这些发现服务不在 dynamic_resources 中配置,而是独立配置或者在用到它们的 filter 中配置。

RDS 的配置

以 HttpConnectionManager 为例。

HttpConnectionManager 是一个处理 http 请求的 filter,它用到的 http 路由可以从 rds 中动态发现,rds 就在这个 filter 中指定。

下面是我们使用的简陋控制平面中一段代码,可以看到 Rds 字段配置的类型是 Ads,http 路由将从 ads_cluster 中获取:

listen_filter_http_conn_ := &http_conn_manager.HttpConnectionManager{
    StatPrefix: "ingress_http",
    RouteSpecifier: &http_conn_manager.HttpConnectionManager_Rds{
        Rds: &http_conn_manager.Rds{
            RouteConfigName: "ads_route",
            ConfigSource: &core.ConfigSource{
                ConfigSourceSpecifier: &core.ConfigSource_Ads{
                    Ads: &core.AggregatedConfigSource{}, //使用ADS
                },
            },
        },
    },
    ...
}

类似于 ADS 方式中的 cds_config 和 lds_config:

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

参考