动态配置
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 的核心特性之一,合理使用可以显著提高系统的灵活性和可维护性。