视频讲解: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: {}}

参考