动态配置

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)运行时发现服务

动态配置架构

动态配置架构
动态配置架构

配置示例

启用动态配置

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)

章节概览