Envoy 使用 XDS(eXtensible Discovery Service)来动态配置代理的各种方面。XDS 配置通过不同类型的资源来管理 Envoy 的行为。主要的 XDS 类型包括:
1. LDS (Listener Discovery Service)
- 作用: 管理 Envoy 的监听器(Listener)配置。
- 用途: 指定 Envoy 监听的端口和处理的网络连接类型(如 HTTP、TCP)。每个监听器可以定义其使用的过滤器链(Filter Chain)和网络协议。
2. RDS (Route Discovery Service)
- 作用: 管理 Envoy 的路由配置。
- 用途: 定义如何将请求路由到不同的集群或服务。RDS 控制路由规则、重定向、路由优先级等。
3. CDS (Cluster Discovery Service)
- 作用: 管理 Envoy 的集群(Cluster)配置。
- 用途: 配置 Envoy 如何连接和负载均衡到后端服务或集群。集群定义了服务的终端节点、负载均衡策略、连接池配置等。
4. EDS (Endpoint Discovery Service)
- 作用: 管理集群的具体端点(Endpoint)配置。
- 用途: 定义集群中的实际服务器或节点。EDS 提供了集群中可用端点的动态列表,并允许 Envoy 实现负载均衡和故障转移。
5. SDS (Secret Discovery Service)
- 作用: 管理 Envoy 的秘密(Secret)配置,如 TLS 证书和密钥。
- 用途: 提供 TLS 证书和密钥信息,供 Envoy 用于加密通信。SDS 支持动态加载和更新秘密,确保安全通信的稳定性。
6. ADS (Aggregated Discovery Service)
- 作用: 统一管理所有 XDS 类型的资源。
- 用途: 通过一个统一的端点来推送所有 XDS 配置类型。ADS 简化了配置管理和推送过程,使 Envoy 能够从单个端点接收多个类型的配置数据。
7. WASM (WebAssembly)
- 作用: 允许 Envoy 使用 WebAssembly 进行自定义过滤器配置。
- 用途: 通过 WebAssembly 执行自定义的逻辑和过滤器,用于扩展 Envoy 的功能或处理特定的业务需求。
示例配置
LDS:
{
"name": "listener_0",
"address": {
"socket_address": {
"address": "0.0.0.0",
"port_value": 10000
}
},
"filter_chains": [
{
"filters": [
{
"name": "envoy.filters.network.http_connection_manager",
"config": {
"stat_prefix": "ingress_http",
"route_config": {
"name": "local_route",
"virtual_hosts": [...]
},
"http_filters": [...]
}
}
]
}
]
}
RDS:
{
"name": "local_route",
"virtual_hosts": [
{
"name": "local_service",
"domains": ["*"],
"routes": [...]
}
]
}
CDS:
{
"name": "service_cluster",
"connect_timeout": "30s",
"type": "STRICT_DNS",
"lb_policy": "ROUND_ROBIN",
"hosts": [...]
}
EDS:
{
"cluster_name": "service_cluster",
"endpoints": [
{
"lb_endpoints": [
{
"endpoint": {
"address": {
"socket_address": {
"address": "192.168.1.1",
"port_value": 80
}
}
}
}
]
}
]
}
SDS:
{
"name": "example_cert",
"tls_certificate": {
"certificate_chain": {
"filename": "/etc/certs/tls.crt"
},
"private_key": {
"filename": "/etc/certs/tls.key"
}
}
}
-
ADS: 通过
http://localhost:15000/ads
端点统一管理所有配置。
这些 XDS 类型使 Envoy 能够灵活地管理和配置代理的各个方面,从网络层到应用层的路由和安全设置。