Envoy 上游集群管理器

集群管理器

  • Envoy 的集群管理器管理所有已配置的上游集群。正如 Envoy 配置可以包含任意数量的侦听器一样,该配置也可以包含任意数量的独立配置的上游集群。

  • 上游集群和主机是从网络/HTTP 过滤器堆栈中抽象出来的,因为上游集群和主机可以用于任意数量的不同代理任务。集群管理器向过滤器堆栈公开 API,允许过滤器获取到上游集群的 L3/L4 连接,或到上游集群的抽象 HTTP 连接池的句柄(上游主机是否支持 HTTP/1.1、HTTP/2 ,或 HTTP/3 被隐藏)。过滤器阶段确定它是否需要 L3/L4 连接或新的 HTTP 流,集群管理器处理所有复杂性,包括了解哪些主机可用和健康、负载平衡、上游连接数据的线程本地存储(因为大多数 Envoy 代码写成单线程)、上游连接类型(TCP/IP、UDS)、适用的上游协议(HTTP/1.1、HTTP/2、HTTP/3)等。
  • 生成集群配置的方式由静态或动态(CDS)两种;

集群预热

  • 当集群在服务器启动时以及通过 CDS 进行初始化时,它们会被“预热”。这意味着在发生以下操作之前,集群不会变得可用。
    • 初始服务发现负载(例如,DNS 解析、EDS 更新等)。

    • 如果配置了主动健康检查,则初始主动健康检查通过。Envoy 将向每个发现的主机发送健康检查请求,以确定其初始健康状态。

  • 在集群“变得可用”意味着:
    • 对于新添加的集群,集群在 Envoy 的其余部分似乎不存在,直到它被加热。即,引用集群的 HTTP 路由将导致 404 或 503(取决于配置)。

    • 对于更新后的集群,旧集群将继续存在并为流量提供服务。当新集群预热后,它将自动与旧集群交换,这样就不会发生流量中断。

集群配置框架

配置单个集群

查看代码

{
"transport_socket_matches": [],
"name": "...",
"alt_stat_name": "...",
"type": "...",
"cluster_type": "{...}",
"eds_cluster_config": "{...}",
"connect_timeout": "{...}",
"per_connection_buffer_limit_bytes": "{...}",
"lb_policy": "...",
"load_assignment": "{...}",
"health_checks": [],
"max_requests_per_connection": "{...}",
"circuit_breakers": "{...}",
"upstream_http_protocol_options": "{...}",
"common_http_protocol_options": "{...}",
"http_protocol_options": "{...}",
"http2_protocol_options": "{...}",
"typed_extension_protocol_options": "{...}",
"dns_refresh_rate": "{...}",
"dns_failure_refresh_rate": "{...}",
"respect_dns_ttl": "...",
"dns_lookup_family": "...",
"dns_resolvers": [],
 "use_tcp_for_dns_lookups": "...",
"outlier_detection": "{...}",
"cleanup_interval": "{...}",
"upstream_bind_config": "{...}",
"lb_subset_config": "{...}",
"ring_hash_lb_config": "{...}",
"maglev_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": "...",
"ignore_health_on_host_removal": "...",
"filters": [],
"track_timeout_budgets": "...",
"upstream_config": "{...}",
"track_cluster_stats": "{...}",
"preconnect_policy": "{...}",
"connection_pool_per_downstream_connection": "..."
}

参考文档

https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/cluster_manager

https://www.envoyproxy.io/docs/envoy/latest/configuration/upstream/cluster_manager/cluster_manager#config-cluster-manager

https://www.envoyproxy.io/docs/envoy/latest/configuration/upstream/cluster_manager/cds#config-cluster-manager-cds

posted @ 2022-08-27 20:59  小吉猫  阅读(74)  评论(0编辑  收藏  举报