xDS概述
xds通用模式
LDS/EDS/CDS/EDS 这四个xDS API的定义非常类似,模式都是一样的。
LDS:
service ListenerDiscoveryService {
rpc StreamListeners(stream DiscoveryRequest) returns (stream DiscoveryResponse) {
}
rpc FetchListeners(DiscoveryRequest) returns (DiscoveryResponse) {
}
}
RDS:
service RouteDiscoveryService {
rpc StreamRoutes(stream DiscoveryRequest) returns (stream DiscoveryResponse) {
}
rpc DeltaRoutes(stream DeltaDiscoveryRequest) returns (stream DeltaDiscoveryResponse) {
}
rpc FetchRoutes(DiscoveryRequest) returns (DiscoveryResponse) {
}
}
CDS:
service ClusterDiscoveryService {
rpc StreamClusters(stream DiscoveryRequest) returns (stream DiscoveryResponse) {
}
rpc DeltaClusters(stream DeltaDiscoveryRequest) returns (stream DeltaDiscoveryResponse) {
}
rpc FetchClusters(DiscoveryRequest) returns (DiscoveryResponse) {
}
}
EDS:
service EndpointDiscoveryService {
rpc StreamEndpoints(stream DiscoveryRequest) returns (stream DiscoveryResponse) {
}
rpc FetchEndpoints(DiscoveryRequest) returns (DiscoveryResponse) {
}
}
模式都是通用的:
- 都有一个单次调用的
Fetch***
方法和一个gRPC双向流的 Stream***` - 而且四个xDS API的这两个方法的参数都是一样的:DiscoveryRequest / DiscoveryResponse
- RDS和CDS 还有用于增量更新的
Delta***
,参数也相同:DeltaDiscoveryRequest / DeltaDiscoveryResponse
ADS
ADS 的定义在 api/envoy/service/discovery/v2/ads.proto
。
注意:ADS 是只能用于 gRPC 的API
service AggregatedDiscoveryService {
rpc StreamAggregatedResources(stream envoy.api.v2.DiscoveryRequest)
returns (stream envoy.api.v2.DiscoveryResponse) {
}
rpc DeltaAggregatedResources(stream envoy.api.v2.DeltaDiscoveryRequest)
returns (stream envoy.api.v2.DeltaDiscoveryResponse) {
}
}
模式其实和LDS/EDS/CDS/EDS 这四个xDS API的定义是一样的。