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

参考