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

Envoy 的 Cluster 配置详解

Clusters 相当于 nginx 的 upstream,是一组 IP 或者域名的集合, 是 Envoy 收到的请求最终流向的地方。 Cluster 的配置项比较多,见 Clusters Config

{ "name": "...", "alt_stat_name": "...", "type": "...", "cluster_type": "{...}", "eds_cluster_config": "{...}", "connect_timeout": "{...}", "per_connection_buffer_limit_bytes": "{...}", "lb_policy": "...", "hosts": [], "load_assignment": "{...}", "health_checks": [], "max_requests_per_connection": "{...}", "circuit_breakers": "{...}", "tls_context": "{...}", "common_http_protocol_options": "{...}", "http_protocol_options": "{...}", "http2_protocol_options": "{...}", "extension_protocol_options": "{...}", "typed_extension_protocol_options": "{...}", "dns_refresh_rate": "{...}", "respect_dns_ttl": "...", "dns_lookup_family": "...", "dns_resolvers": [], "outlier_detection": "{...}", "cleanup_interval": "{...}", "upstream_bind_config": "{...}", "lb_subset_config": "{...}", "ring_hash_lb_config": "{...}", "original_dst_lb_config": "{...}", "least_request_lb_config": "{...}", "common_lb_config": "{...}", "transport_socket": "{...}", "metadata": "{...}", "protocol_selection": "...", "upstream_connection_options": "{...}", "close_connections_on_host_health_failure": "...", "drain_connections_on_host_removal": "...", "filters": [] }

Cluster 的类型

type 和 cluster_type 是 cluster 的类型,type 是 envoy 支持的标准类型,cluster_type 是自定义类型。

envoy 支持的标准类型按照 service discovery types 分类:

  • Static,直接配置 IP 地址
  • Strict DNS,通过解析域名获取目标 IP,使用查询出来的所有 IP
  • Logical DNS,通过解析域名获取目标 IP,只使用第一个 IP
  • Endpoint discovery service(EDS)
  • Original destination,透明代理方式

在 go-controller-plane 中的定义分别是:

// envoy/api/v2/cds.pb.go: 43 const ( Cluster_STATIC Cluster_DiscoveryType = 0 Cluster_STRICT_DNS Cluster_DiscoveryType = 1 Cluster_LOGICAL_DNS Cluster_DiscoveryType = 2 Cluster_EDS Cluster_DiscoveryType = 3 Cluster_ORIGINAL_DST Cluster_DiscoveryType = 4 )

在配置文件中的写法分别是:

// envoy/api/v2/cds.pb.go: 72 var Cluster_DiscoveryType_value = map[string]int32{ "STATIC": 0, "STRICT_DNS": 1, "LOGICAL_DNS": 2, "EDS": 3, "ORIGINAL_DST": 4, }

Cluster 的 filter

Cluster 的 filter 字段中是 network filter,处理从 cluster 流出(outgoing)的数据。

Cluster 的负载均衡算法

Cluster 支持下面的 负载均衡算法

  • ROUND_ROBIN
  • LEAST_REQUEST
  • RING_HASH
  • RANDOM
  • MAGLEV
  • CLUSTER_PROVIDED

参考