动态配置

Envoy 支持动态配置,无需重启即可更新配置。动态配置通过发现服务 API(统称为 xDS)实现,提供了高度的灵活性和可扩展性。

配置方式对比

静态配置

静态配置在 Envoy 启动时通过配置文件加载,适用于不需要频繁更新的设置。

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address:
        address: 0.0.0.0
        port_value: 10000
  clusters:
  - name: service_a
    connect_timeout: 0.25s
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    hosts:
      - socket_address:
          address: service_a
          port_value: 80

动态配置

动态配置通过 xDS 协议从控制平面获取配置,支持热更新。

xDS 协议

xDS 是一组用于动态配置发现的 API 协议,包括:

发现服务描述
LDS (Listener Discovery Service)监听器发现服务
RDS (Route Discovery Service)路由发现服务
CDS (Cluster Discovery Service)集群发现服务
EDS (Endpoint Discovery Service)端点发现服务
SDS (Secret Discovery Service)密钥发现服务
RTDS (Runtime Discovery Service)运行时发现服务

动态配置架构

图 1: 动态配置架构
图 1: 动态配置架构

配置示例

启用动态配置

dynamic_resources:
  lds_config:
    api_config_source:
      api_type: GRPC
      grpc_services:
      - envoy_grpc:
          cluster_name: xds_cluster
  cds_config:
    api_config_source:
      api_type: GRPC
      grpc_services:
      - envoy_grpc:
          cluster_name: xds_cluster

xDS 集群配置

static_resources:
  clusters:
  - name: xds_cluster
    connect_timeout: 0.25s
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    http2_protocol_options: {}
    load_assignment:
      cluster_name: xds_cluster
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: control-plane
                port_value: 18000

配置更新机制

增量更新

Envoy 支持增量配置更新,只传输变更的部分:

dynamic_resources:
  lds_config:
    api_config_source:
      api_type: GRPC
      grpc_services:
      - envoy_grpc:
          cluster_name: xds_cluster
    resource_api_version: V3

版本控制

配置更新支持版本控制,确保配置的一致性:

dynamic_resources:
  lds_config:
    api_config_source:
      api_type: GRPC
      grpc_services:
      - envoy_grpc:
          cluster_name: xds_cluster
    initial_fetch_timeout: 0s

控制平面集成

Istio 集成

Istio 使用 xDS 协议与 Envoy 通信:

dynamic_resources:
  lds_config:
    ads: {}
  cds_config:
    ads: {}
  ads_config:
    api_type: GRPC
    grpc_services:
    - envoy_grpc:
        cluster_name: xds-grpc

自定义控制平面

可以构建自定义控制平面实现 xDS 协议:

dynamic_resources:
  lds_config:
    api_config_source:
      api_type: GRPC
      grpc_services:
      - envoy_grpc:
          cluster_name: custom-control-plane
      set_node_on_first_message_only: true

配置验证

Envoy 支持配置热重载,无需重启:

# 发送 SIGHUP 信号触发热重载
kill -HUP <envoy_pid>

在应用配置前进行验证:

dynamic_resources:
  lds_config:
    api_config_source:
      api_type: GRPC
      grpc_services:
      - envoy_grpc:
          cluster_name: xds_cluster
    initial_fetch_timeout: 0s
    resource_api_version: V3

最佳实践

1. 配置管理

  • 使用版本控制管理配置
  • 实施配置验证和测试
  • 建立配置回滚机制

2. 监控和调试

  • 监控配置更新状态
  • 记录配置变更日志
  • 设置配置更新告警

3. 性能优化

  • 合理设置更新频率
  • 使用增量更新减少网络开销
  • 优化控制平面性能

注意事项

  • 动态配置增加了系统复杂性
  • 需要确保控制平面的高可用性
  • 配置更新可能影响服务稳定性
  • 需要建立完善的监控和告警机制

动态配置是 Envoy 的核心特性之一,合理使用可以显著提高系统的灵活性和可维护性。

文章导航

章节完成

恭喜完成本章节!下一章节即将开始。下一章节:HTTP 连接管理器(HCM)

章节概览

评论区