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