LDS、RDS、CDS 和 EDS 是 Envoy 使用的 xDS API 的不同部分,用于动态配置和管理代理的各种方面。xDS API 是 Envoy 用于接收和应用动态配置的机制,使其能够适应不断变化的环境和需求。以下是每个组件的详细解释:
Listener Discovery Service (LDS) 用于动态配置 Envoy 的监听器。监听器是 Envoy 用于接收传入连接的网络端点(例如,特定 IP 和端口的绑定)。
功能:
示例:
{
"listeners": [
{
"name": "listener_0",
"address": {
"socket_address": {
"address": "0.0.0.0",
"port_value": 8080
}
},
"filter_chains": [
{
"filters": [
{
"name": "envoy.filters.network.http_connection_manager",
"typed_config": {
"@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager",
"stat_prefix": "ingress_http",
"route_config": {
"name": "local_route",
"virtual_hosts": [
{
"name": "local_service",
"domains": ["*"],
"routes": [
{
"match": {"prefix": "/"},
"route": {"cluster": "service_cluster"}
}
]
}
]
},
"http_filters": [
{
"name": "envoy.filters.http.router"
}
]
}
}
]
}
]
}
]
}
Route Discovery Service (RDS) 用于动态配置 HTTP 路由。路由决定了传入的 HTTP 请求应该如何被转发到后端服务。
功能:
示例:
{
"route_config": {
"name": "local_route",
"virtual_hosts": [
{
"name": "local_service",
"domains": ["*"],
"routes": [
{
"match": {"prefix": "/"},
"route": {"cluster": "service_cluster"}
}
]
}
]
}
}
Cluster Discovery Service (CDS) 用于动态配置集群。集群是 Envoy 用于管理和负载均衡的一组上游服务器。
功能:
示例:
{
"clusters": [
{
"name": "service_cluster",
"connect_timeout": "0.25s",
"type": "STRICT_DNS",
"lb_policy": "ROUND_ROBIN",
"load_assignment": {
"cluster_name": "service_cluster",
"endpoints": [
{
"lb_endpoints": [
{
"endpoint": {
"address": {
"socket_address": {
"address": "127.0.0.1",
"port_value": 8081
}
}
}
}
]
}
]
}
}
]
}
Endpoint Discovery Service (EDS) 用于动态配置集群的具体端点(endpoints)。端点是集群中实际的上游服务器实例。
功能:
示例:
{
"cluster_name": "service_cluster",
"endpoints": [
{
"lb_endpoints": [
{
"endpoint": {
"address": {
"socket_address": {
"address": "127.0.0.1",
"port_value": 8081
}
}
}
}
]
}
]
}
这些 xDS API 的组合使得 Envoy 能够灵活、高效地适应动态变化的环境,提供强大的流量管理和负载均衡功能。