Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 58 additions & 14 deletions api/cds.proto
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import "api/tls_context.proto";

import "google/api/annotations.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/wrappers.proto";

// Return list of all clusters this proxy will load balance to.
Expand Down Expand Up @@ -102,7 +103,7 @@ message Cluster {
}
LbPolicy lb_policy = 6;

// If the service discovery type is static, strict_dns or logical_dns, then
// If the service discovery type is STATIC, STRICT_DNS or LOGICAL_DNS, then
// hosts is required.
repeated Address hosts = 7;

Expand Down Expand Up @@ -138,20 +139,20 @@ message Cluster {
}

// If the dns refresh rate is specified and the cluster type is either
// strict_dns, or logical_dns, this value is used as the cluster’s dns refresh
// STRICT_DNS, or LOGICAL_DNS, this value is used as the cluster’s dns refresh
// rate. If this setting is not specified, the value defaults to 5000. For
// cluster types other than strict_dns and logical_dns this setting is
// cluster types other than STRICT_DNS and LOGICAL_DNS this setting is
// ignored.
google.protobuf.Duration dns_refresh_rate = 16;

// The DNS IP address resolution policy. The options are v4_only, v6_only, and
// auto. If this setting is not specified, the value defaults to v4_only. When
// v4_only is selected, the DNS resolver will only perform a lookup for
// addresses in the IPv4 family. If v6_only is selected, the DNS resolver will
// only perform a lookup for addresses in the IPv6 family. If auto is
// The DNS IP address resolution policy. The options are V4_ONLY, V6_ONLY, and
// AUTO. If this setting is not specified, the value defaults to V4_ONLY. When
// V4_ONLY is selected, the DNS resolver will only perform a lookup for
// addresses in the IPv4 family. If V6_ONLY is selected, the DNS resolver will
// only perform a lookup for addresses in the IPv6 family. If AUTO is
// specified, the DNS resolver will first perform a lookup for addresses in
// the IPv6 family and fallback to a lookup for addresses in the IPv4 family.
// For cluster types other than strict_dns and logical_dns, this setting is
// For cluster types other than STRICT_DNS and LOGICAL_DNS, this setting is
// ignored.
enum DnsLookupFamily {
AUTO = 0;
Expand All @@ -160,11 +161,11 @@ message Cluster {
}
DnsLookupFamily dns_lookup_family = 17;

// If DNS resolvers are specified and the cluster type is either strict_dns,
// or logical_dns, this value is used to specify the cluster’s dns resolvers.
// If DNS resolvers are specified and the cluster type is either STRICT_DNS,
// or LOGICAL_DNS, this value is used to specify the cluster’s dns resolvers.
// If this setting is not specified, the value defaults to the default
// resolver, which uses /etc/resolv.conf for configuration. For cluster types
// other than strict_dns and logical_dns this setting is ignored.
// other than STRICT_DNS and LOGICAL_DNS this setting is ignored.
repeated Address dns_resolvers = 18;

// If specified, outlier detection will be enabled for this upstream cluster.
Expand Down Expand Up @@ -214,20 +215,63 @@ message Cluster {
OutlierDetection outlier_detection = 19;

// The interval for removing stale hosts from a cluster type
// original_dst. Hosts are considered stale if they have not been used
// ORIGINAL_DST. Hosts are considered stale if they have not been used
// as upstream destinations during this interval. New hosts are added
// to original destination clusters on demand as new connections are
// redirected to Envoy, causing the number of hosts in the cluster to
// grow over time. Hosts that are not stale (they are actively used as
// destinations) are kept in the cluster, which allows connections to
// them remain open, saving the latency that would otherwise be spent
// on opening new connections. If this setting is not specified, the
// value defaults to 5000ms. For cluster types other than original_dst
// value defaults to 5000ms. For cluster types other than ORIGINAL_DST
// this setting is ignored.
google.protobuf.Duration cleanup_interval = 20;

// Optional configuration used to bind newly established upstream connections.
// This overrides any bind_config specified in the bootstrap proto.
// If the addres and port are empty, no bind will be performed.
BindConfig upstream_bind_config = 21;

// Optionally divide the endpoints in this cluster into subsets defined by
// endpoint metadata and selected by route and weighted cluster metadata.
message LbSubsetConfig {
// The behavior used when no endpoint subset matches the selected route's
// metadata. The options are NO_FALLBACK, ANY_ENDPOINT, or DEFAULT_SUBSET.
// The value defaults to NO_FALLBACK. If NO_FALLBACK is selected, a result
// equivalent to no healthy hosts is reported. If ANY_ENDPOINT is selected,
// any cluster endpoint may be returned (subject to policy, health checks,
// etc). If DEFAULT_SUBSET is selected, load balancing is performed over the
// endpoints matching the values from the default_subset field.
enum LbSubsetFallbackPolicy {
NO_FALLBACK = 0;
ANY_ENDPOINT = 1;
DEFAULT_SUBSET = 2;
}
LbSubsetFallbackPolicy fallback_policy = 1;

// Specifies the default subset of endpoints used during fallback if
// fallback_policy is DEFAULT_SUBSET. Each field in default_subset is
// compared to the matching LbEndpoint.Metadata under the "envoy.lb"
// namespace. It is valid for no hosts to match, in which case the behavior
// is the same as a fallback_policy of NO_FALLBACK.
google.protobuf.Struct default_subset = 2;

// Specifications for subsets. For each entry, LbEndpoint.Metadata's
// "envoy.lb" namespace is traversed and a subset is created for each unique
// combination of key and value. For example:
// { "subset_keys": [
// { "keys": [ "version" ] },
// { "keys": [ "stage", "hardware_type" ] }
// ]}
// A subset is matched when the metadata from the selected route and
// weighted cluster contains the keys and values from the subset's
// metadata. Extra keys in the route metadata are ignored when comparing the
// subset's metadata. Subsets may overlap. In the case of overlapping
// subsets, the first matching subset is selected.
message LbSubsetKeys {
repeated string keys = 1;
}
repeated LbSubsetKeys subset_keys = 3;
}
LbSubsetConfig lb_subset_config = 22;
}