xds_api/generated/envoy.config.cluster.v3.rs
1// This file is @generated by prost-build.
2/// :ref:`Circuit breaking<arch_overview_circuit_break>` settings can be
3/// specified individually for each defined priority.
4#[derive(Clone, PartialEq, ::prost::Message)]
5pub struct CircuitBreakers {
6 /// If multiple :ref:`Thresholds<envoy_v3_api_msg_config.cluster.v3.CircuitBreakers.Thresholds>`
7 /// are defined with the same :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`,
8 /// the first one in the list is used. If no Thresholds is defined for a given
9 /// :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`, the default values
10 /// are used.
11 #[prost(message, repeated, tag = "1")]
12 pub thresholds: ::prost::alloc::vec::Vec<circuit_breakers::Thresholds>,
13 /// Optional per-host limits which apply to each individual host in a cluster.
14 ///
15 /// .. note::
16 /// currently only the :ref:`max_connections
17 /// <envoy_v3_api_field_config.cluster.v3.CircuitBreakers.Thresholds.max_connections>` field is supported for per-host limits.
18 ///
19 /// If multiple per-host :ref:`Thresholds<envoy_v3_api_msg_config.cluster.v3.CircuitBreakers.Thresholds>`
20 /// are defined with the same :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`,
21 /// the first one in the list is used. If no per-host Thresholds are defined for a given
22 /// :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`,
23 /// the cluster will not have per-host limits.
24 #[prost(message, repeated, tag = "2")]
25 pub per_host_thresholds: ::prost::alloc::vec::Vec<circuit_breakers::Thresholds>,
26}
27/// Nested message and enum types in `CircuitBreakers`.
28pub mod circuit_breakers {
29 /// A Thresholds defines CircuitBreaker settings for a
30 /// :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`.
31 /// \[#next-free-field: 9\]
32 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
33 pub struct Thresholds {
34 /// The :ref:`RoutingPriority<envoy_v3_api_enum_config.core.v3.RoutingPriority>`
35 /// the specified CircuitBreaker settings apply to.
36 #[prost(
37 enumeration = "super::super::super::core::v3::RoutingPriority",
38 tag = "1"
39 )]
40 pub priority: i32,
41 /// The maximum number of connections that Envoy will make to the upstream
42 /// cluster. If not specified, the default is 1024.
43 #[prost(message, optional, tag = "2")]
44 pub max_connections: ::core::option::Option<
45 super::super::super::super::super::google::protobuf::UInt32Value,
46 >,
47 /// The maximum number of pending requests that Envoy will allow to the
48 /// upstream cluster. If not specified, the default is 1024.
49 /// This limit is applied as a connection limit for non-HTTP traffic.
50 #[prost(message, optional, tag = "3")]
51 pub max_pending_requests: ::core::option::Option<
52 super::super::super::super::super::google::protobuf::UInt32Value,
53 >,
54 /// The maximum number of parallel requests that Envoy will make to the
55 /// upstream cluster. If not specified, the default is 1024.
56 /// This limit does not apply to non-HTTP traffic.
57 #[prost(message, optional, tag = "4")]
58 pub max_requests: ::core::option::Option<
59 super::super::super::super::super::google::protobuf::UInt32Value,
60 >,
61 /// The maximum number of parallel retries that Envoy will allow to the
62 /// upstream cluster. If not specified, the default is 3.
63 #[prost(message, optional, tag = "5")]
64 pub max_retries: ::core::option::Option<
65 super::super::super::super::super::google::protobuf::UInt32Value,
66 >,
67 /// Specifies a limit on concurrent retries in relation to the number of active requests. This
68 /// parameter is optional.
69 ///
70 /// .. note::
71 ///
72 /// If this field is set, the retry budget will override any configured retry circuit
73 /// breaker.
74 #[prost(message, optional, tag = "8")]
75 pub retry_budget: ::core::option::Option<thresholds::RetryBudget>,
76 /// If track_remaining is true, then stats will be published that expose
77 /// the number of resources remaining until the circuit breakers open. If
78 /// not specified, the default is false.
79 ///
80 /// .. note::
81 ///
82 /// If a retry budget is used in lieu of the max_retries circuit breaker,
83 /// the remaining retry resources remaining will not be tracked.
84 #[prost(bool, tag = "6")]
85 pub track_remaining: bool,
86 /// The maximum number of connection pools per cluster that Envoy will concurrently support at
87 /// once. If not specified, the default is unlimited. Set this for clusters which create a
88 /// large number of connection pools. See
89 /// :ref:`Circuit Breaking <arch_overview_circuit_break_cluster_maximum_connection_pools>` for
90 /// more details.
91 #[prost(message, optional, tag = "7")]
92 pub max_connection_pools: ::core::option::Option<
93 super::super::super::super::super::google::protobuf::UInt32Value,
94 >,
95 }
96 /// Nested message and enum types in `Thresholds`.
97 pub mod thresholds {
98 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
99 pub struct RetryBudget {
100 /// Specifies the limit on concurrent retries as a percentage of the sum of active requests and
101 /// active pending requests. For example, if there are 100 active requests and the
102 /// budget_percent is set to 25, there may be 25 active retries.
103 ///
104 /// This parameter is optional. Defaults to 20%.
105 #[prost(message, optional, tag = "1")]
106 pub budget_percent: ::core::option::Option<
107 super::super::super::super::super::r#type::v3::Percent,
108 >,
109 /// Specifies the minimum retry concurrency allowed for the retry budget. The limit on the
110 /// number of active retries may never go below this number.
111 ///
112 /// This parameter is optional. Defaults to 3.
113 #[prost(message, optional, tag = "2")]
114 pub min_retry_concurrency: ::core::option::Option<
115 super::super::super::super::super::super::google::protobuf::UInt32Value,
116 >,
117 }
118 impl ::prost::Name for RetryBudget {
119 const NAME: &'static str = "RetryBudget";
120 const PACKAGE: &'static str = "envoy.config.cluster.v3";
121 fn full_name() -> ::prost::alloc::string::String {
122 "envoy.config.cluster.v3.CircuitBreakers.Thresholds.RetryBudget".into()
123 }
124 fn type_url() -> ::prost::alloc::string::String {
125 "type.googleapis.com/envoy.config.cluster.v3.CircuitBreakers.Thresholds.RetryBudget"
126 .into()
127 }
128 }
129 }
130 impl ::prost::Name for Thresholds {
131 const NAME: &'static str = "Thresholds";
132 const PACKAGE: &'static str = "envoy.config.cluster.v3";
133 fn full_name() -> ::prost::alloc::string::String {
134 "envoy.config.cluster.v3.CircuitBreakers.Thresholds".into()
135 }
136 fn type_url() -> ::prost::alloc::string::String {
137 "type.googleapis.com/envoy.config.cluster.v3.CircuitBreakers.Thresholds"
138 .into()
139 }
140 }
141}
142impl ::prost::Name for CircuitBreakers {
143 const NAME: &'static str = "CircuitBreakers";
144 const PACKAGE: &'static str = "envoy.config.cluster.v3";
145 fn full_name() -> ::prost::alloc::string::String {
146 "envoy.config.cluster.v3.CircuitBreakers".into()
147 }
148 fn type_url() -> ::prost::alloc::string::String {
149 "type.googleapis.com/envoy.config.cluster.v3.CircuitBreakers".into()
150 }
151}
152#[derive(Clone, PartialEq, ::prost::Message)]
153pub struct Filter {
154 /// The name of the filter configuration.
155 #[prost(string, tag = "1")]
156 pub name: ::prost::alloc::string::String,
157 /// Filter specific configuration which depends on the filter being
158 /// instantiated. See the supported filters for further documentation.
159 /// Note that Envoy's :ref:`downstream network
160 /// filters <config_network_filters>` are not valid upstream network filters.
161 /// Only one of typed_config or config_discovery can be used.
162 #[prost(message, optional, tag = "2")]
163 pub typed_config: ::core::option::Option<
164 super::super::super::super::google::protobuf::Any,
165 >,
166 /// Configuration source specifier for an extension configuration discovery
167 /// service. In case of a failure and without the default configuration, the
168 /// listener closes the connections.
169 /// Only one of typed_config or config_discovery can be used.
170 #[prost(message, optional, tag = "3")]
171 pub config_discovery: ::core::option::Option<
172 super::super::core::v3::ExtensionConfigSource,
173 >,
174}
175impl ::prost::Name for Filter {
176 const NAME: &'static str = "Filter";
177 const PACKAGE: &'static str = "envoy.config.cluster.v3";
178 fn full_name() -> ::prost::alloc::string::String {
179 "envoy.config.cluster.v3.Filter".into()
180 }
181 fn type_url() -> ::prost::alloc::string::String {
182 "type.googleapis.com/envoy.config.cluster.v3.Filter".into()
183 }
184}
185/// See the :ref:`architecture overview <arch_overview_outlier_detection>` for
186/// more information on outlier detection.
187/// \[#next-free-field: 25\]
188#[derive(Clone, PartialEq, ::prost::Message)]
189pub struct OutlierDetection {
190 /// The number of consecutive server-side error responses (for HTTP traffic,
191 /// 5xx responses; for TCP traffic, connection failures; for Redis, failure to
192 /// respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.
193 #[prost(message, optional, tag = "1")]
194 pub consecutive_5xx: ::core::option::Option<
195 super::super::super::super::google::protobuf::UInt32Value,
196 >,
197 /// The time interval between ejection analysis sweeps. This can result in
198 /// both new ejections as well as hosts being returned to service. Defaults
199 /// to 10000ms or 10s.
200 #[prost(message, optional, tag = "2")]
201 pub interval: ::core::option::Option<
202 super::super::super::super::google::protobuf::Duration,
203 >,
204 /// The base time that a host is ejected for. The real time is equal to the
205 /// base time multiplied by the number of times the host has been ejected and is
206 /// capped by :ref:`max_ejection_time<envoy_v3_api_field_config.cluster.v3.OutlierDetection.max_ejection_time>`.
207 /// Defaults to 30000ms or 30s.
208 #[prost(message, optional, tag = "3")]
209 pub base_ejection_time: ::core::option::Option<
210 super::super::super::super::google::protobuf::Duration,
211 >,
212 /// The maximum % of an upstream cluster that can be ejected due to outlier
213 /// detection. Defaults to 10% but will eject at least one host regardless of the value.
214 #[prost(message, optional, tag = "4")]
215 pub max_ejection_percent: ::core::option::Option<
216 super::super::super::super::google::protobuf::UInt32Value,
217 >,
218 /// The % chance that a host will be actually ejected when an outlier status
219 /// is detected through consecutive 5xx. This setting can be used to disable
220 /// ejection or to ramp it up slowly. Defaults to 100.
221 #[prost(message, optional, tag = "5")]
222 pub enforcing_consecutive_5xx: ::core::option::Option<
223 super::super::super::super::google::protobuf::UInt32Value,
224 >,
225 /// The % chance that a host will be actually ejected when an outlier status
226 /// is detected through success rate statistics. This setting can be used to
227 /// disable ejection or to ramp it up slowly. Defaults to 100.
228 #[prost(message, optional, tag = "6")]
229 pub enforcing_success_rate: ::core::option::Option<
230 super::super::super::super::google::protobuf::UInt32Value,
231 >,
232 /// The number of hosts in a cluster that must have enough request volume to
233 /// detect success rate outliers. If the number of hosts is less than this
234 /// setting, outlier detection via success rate statistics is not performed
235 /// for any host in the cluster. Defaults to 5.
236 #[prost(message, optional, tag = "7")]
237 pub success_rate_minimum_hosts: ::core::option::Option<
238 super::super::super::super::google::protobuf::UInt32Value,
239 >,
240 /// The minimum number of total requests that must be collected in one
241 /// interval (as defined by the interval duration above) to include this host
242 /// in success rate based outlier detection. If the volume is lower than this
243 /// setting, outlier detection via success rate statistics is not performed
244 /// for that host. Defaults to 100.
245 #[prost(message, optional, tag = "8")]
246 pub success_rate_request_volume: ::core::option::Option<
247 super::super::super::super::google::protobuf::UInt32Value,
248 >,
249 /// This factor is used to determine the ejection threshold for success rate
250 /// outlier ejection. The ejection threshold is the difference between the
251 /// mean success rate, and the product of this factor and the standard
252 /// deviation of the mean success rate: mean - (stdev *
253 /// success_rate_stdev_factor). This factor is divided by a thousand to get a
254 /// double. That is, if the desired factor is 1.9, the runtime value should
255 /// be 1900. Defaults to 1900.
256 #[prost(message, optional, tag = "9")]
257 pub success_rate_stdev_factor: ::core::option::Option<
258 super::super::super::super::google::protobuf::UInt32Value,
259 >,
260 /// The number of consecutive gateway failures (502, 503, 504 status codes)
261 /// before a consecutive gateway failure ejection occurs. Defaults to 5.
262 #[prost(message, optional, tag = "10")]
263 pub consecutive_gateway_failure: ::core::option::Option<
264 super::super::super::super::google::protobuf::UInt32Value,
265 >,
266 /// The % chance that a host will be actually ejected when an outlier status
267 /// is detected through consecutive gateway failures. This setting can be
268 /// used to disable ejection or to ramp it up slowly. Defaults to 0.
269 #[prost(message, optional, tag = "11")]
270 pub enforcing_consecutive_gateway_failure: ::core::option::Option<
271 super::super::super::super::google::protobuf::UInt32Value,
272 >,
273 /// Determines whether to distinguish local origin failures from external errors. If set to true
274 /// the following configuration parameters are taken into account:
275 /// :ref:`consecutive_local_origin_failure<envoy_v3_api_field_config.cluster.v3.OutlierDetection.consecutive_local_origin_failure>`,
276 /// :ref:`enforcing_consecutive_local_origin_failure<envoy_v3_api_field_config.cluster.v3.OutlierDetection.enforcing_consecutive_local_origin_failure>`
277 /// and
278 /// :ref:`enforcing_local_origin_success_rate<envoy_v3_api_field_config.cluster.v3.OutlierDetection.enforcing_local_origin_success_rate>`.
279 /// Defaults to false.
280 #[prost(bool, tag = "12")]
281 pub split_external_local_origin_errors: bool,
282 /// The number of consecutive locally originated failures before ejection
283 /// occurs. Defaults to 5. Parameter takes effect only when
284 /// :ref:`split_external_local_origin_errors<envoy_v3_api_field_config.cluster.v3.OutlierDetection.split_external_local_origin_errors>`
285 /// is set to true.
286 #[prost(message, optional, tag = "13")]
287 pub consecutive_local_origin_failure: ::core::option::Option<
288 super::super::super::super::google::protobuf::UInt32Value,
289 >,
290 /// The % chance that a host will be actually ejected when an outlier status
291 /// is detected through consecutive locally originated failures. This setting can be
292 /// used to disable ejection or to ramp it up slowly. Defaults to 100.
293 /// Parameter takes effect only when
294 /// :ref:`split_external_local_origin_errors<envoy_v3_api_field_config.cluster.v3.OutlierDetection.split_external_local_origin_errors>`
295 /// is set to true.
296 #[prost(message, optional, tag = "14")]
297 pub enforcing_consecutive_local_origin_failure: ::core::option::Option<
298 super::super::super::super::google::protobuf::UInt32Value,
299 >,
300 /// The % chance that a host will be actually ejected when an outlier status
301 /// is detected through success rate statistics for locally originated errors.
302 /// This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.
303 /// Parameter takes effect only when
304 /// :ref:`split_external_local_origin_errors<envoy_v3_api_field_config.cluster.v3.OutlierDetection.split_external_local_origin_errors>`
305 /// is set to true.
306 #[prost(message, optional, tag = "15")]
307 pub enforcing_local_origin_success_rate: ::core::option::Option<
308 super::super::super::super::google::protobuf::UInt32Value,
309 >,
310 /// The failure percentage to use when determining failure percentage-based outlier detection. If
311 /// the failure percentage of a given host is greater than or equal to this value, it will be
312 /// ejected. Defaults to 85.
313 #[prost(message, optional, tag = "16")]
314 pub failure_percentage_threshold: ::core::option::Option<
315 super::super::super::super::google::protobuf::UInt32Value,
316 >,
317 /// The % chance that a host will be actually ejected when an outlier status is detected through
318 /// failure percentage statistics. This setting can be used to disable ejection or to ramp it up
319 /// slowly. Defaults to 0.
320 ///
321 /// [#next-major-version: setting this without setting failure_percentage_threshold should be
322 /// invalid in v4.]
323 #[prost(message, optional, tag = "17")]
324 pub enforcing_failure_percentage: ::core::option::Option<
325 super::super::super::super::google::protobuf::UInt32Value,
326 >,
327 /// The % chance that a host will be actually ejected when an outlier status is detected through
328 /// local-origin failure percentage statistics. This setting can be used to disable ejection or to
329 /// ramp it up slowly. Defaults to 0.
330 #[prost(message, optional, tag = "18")]
331 pub enforcing_failure_percentage_local_origin: ::core::option::Option<
332 super::super::super::super::google::protobuf::UInt32Value,
333 >,
334 /// The minimum number of hosts in a cluster in order to perform failure percentage-based ejection.
335 /// If the total number of hosts in the cluster is less than this value, failure percentage-based
336 /// ejection will not be performed. Defaults to 5.
337 #[prost(message, optional, tag = "19")]
338 pub failure_percentage_minimum_hosts: ::core::option::Option<
339 super::super::super::super::google::protobuf::UInt32Value,
340 >,
341 /// The minimum number of total requests that must be collected in one interval (as defined by the
342 /// interval duration above) to perform failure percentage-based ejection for this host. If the
343 /// volume is lower than this setting, failure percentage-based ejection will not be performed for
344 /// this host. Defaults to 50.
345 #[prost(message, optional, tag = "20")]
346 pub failure_percentage_request_volume: ::core::option::Option<
347 super::super::super::super::google::protobuf::UInt32Value,
348 >,
349 /// The maximum time that a host is ejected for. See :ref:`base_ejection_time<envoy_v3_api_field_config.cluster.v3.OutlierDetection.base_ejection_time>`
350 /// for more information. If not specified, the default value (300000ms or 300s) or
351 /// :ref:`base_ejection_time<envoy_v3_api_field_config.cluster.v3.OutlierDetection.base_ejection_time>` value is applied, whatever is larger.
352 #[prost(message, optional, tag = "21")]
353 pub max_ejection_time: ::core::option::Option<
354 super::super::super::super::google::protobuf::Duration,
355 >,
356 /// The maximum amount of jitter to add to the ejection time, in order to prevent
357 /// a 'thundering herd' effect where all proxies try to reconnect to host at the same time.
358 /// See :ref:`max_ejection_time_jitter<envoy_v3_api_field_config.cluster.v3.OutlierDetection.base_ejection_time>`
359 /// Defaults to 0s.
360 #[prost(message, optional, tag = "22")]
361 pub max_ejection_time_jitter: ::core::option::Option<
362 super::super::super::super::google::protobuf::Duration,
363 >,
364 /// If active health checking is enabled and a host is ejected by outlier detection, a successful active health check
365 /// unejects the host by default and considers it as healthy. Unejection also clears all the outlier detection counters.
366 /// To change this default behavior set this config to ``false`` where active health checking will not uneject the host.
367 /// Defaults to true.
368 #[prost(message, optional, tag = "23")]
369 pub successful_active_health_check_uneject_host: ::core::option::Option<
370 super::super::super::super::google::protobuf::BoolValue,
371 >,
372 /// Set of host's passive monitors.
373 /// \[#not-implemented-hide:\]
374 #[prost(message, repeated, tag = "24")]
375 pub monitors: ::prost::alloc::vec::Vec<super::super::core::v3::TypedExtensionConfig>,
376}
377impl ::prost::Name for OutlierDetection {
378 const NAME: &'static str = "OutlierDetection";
379 const PACKAGE: &'static str = "envoy.config.cluster.v3";
380 fn full_name() -> ::prost::alloc::string::String {
381 "envoy.config.cluster.v3.OutlierDetection".into()
382 }
383 fn type_url() -> ::prost::alloc::string::String {
384 "type.googleapis.com/envoy.config.cluster.v3.OutlierDetection".into()
385 }
386}
387/// Cluster list collections. Entries are ``Cluster`` resources or references.
388/// \[#not-implemented-hide:\]
389#[derive(Clone, PartialEq, ::prost::Message)]
390pub struct ClusterCollection {
391 #[prost(message, optional, tag = "1")]
392 pub entries: ::core::option::Option<
393 super::super::super::super::xds::core::v3::CollectionEntry,
394 >,
395}
396impl ::prost::Name for ClusterCollection {
397 const NAME: &'static str = "ClusterCollection";
398 const PACKAGE: &'static str = "envoy.config.cluster.v3";
399 fn full_name() -> ::prost::alloc::string::String {
400 "envoy.config.cluster.v3.ClusterCollection".into()
401 }
402 fn type_url() -> ::prost::alloc::string::String {
403 "type.googleapis.com/envoy.config.cluster.v3.ClusterCollection".into()
404 }
405}
406/// Configuration for a single upstream cluster.
407/// \[#next-free-field: 57\]
408#[derive(Clone, PartialEq, ::prost::Message)]
409pub struct Cluster {
410 /// Configuration to use different transport sockets for different endpoints.
411 /// The entry of ``envoy.transport_socket_match`` in the
412 /// :ref:`LbEndpoint.Metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`
413 /// is used to match against the transport sockets as they appear in the list. The first
414 /// :ref:`match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` is used.
415 /// For example, with the following match
416 ///
417 /// .. code-block:: yaml
418 ///
419 /// transport_socket_matches:
420 /// - name: "enableMTLS"
421 /// match:
422 /// acceptMTLS: true
423 /// transport_socket:
424 /// name: envoy.transport_sockets.tls
425 /// config: { ... } # tls socket configuration
426 /// - name: "defaultToPlaintext"
427 /// match: {}
428 /// transport_socket:
429 /// name: envoy.transport_sockets.raw_buffer
430 ///
431 /// Connections to the endpoints whose metadata value under ``envoy.transport_socket_match``
432 /// having "acceptMTLS"/"true" key/value pair use the "enableMTLS" socket configuration.
433 ///
434 /// If a :ref:`socket match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` with empty match
435 /// criteria is provided, that always match any endpoint. For example, the "defaultToPlaintext"
436 /// socket match in case above.
437 ///
438 /// If an endpoint metadata's value under ``envoy.transport_socket_match`` does not match any
439 /// ``TransportSocketMatch``, socket configuration fallbacks to use the ``tls_context`` or
440 /// ``transport_socket`` specified in this cluster.
441 ///
442 /// This field allows gradual and flexible transport socket configuration changes.
443 ///
444 /// The metadata of endpoints in EDS can indicate transport socket capabilities. For example,
445 /// an endpoint's metadata can have two key value pairs as "acceptMTLS": "true",
446 /// "acceptPlaintext": "true". While some other endpoints, only accepting plaintext traffic
447 /// has "acceptPlaintext": "true" metadata information.
448 ///
449 /// Then the xDS server can configure the CDS to a client, Envoy A, to send mutual TLS
450 /// traffic for endpoints with "acceptMTLS": "true", by adding a corresponding
451 /// ``TransportSocketMatch`` in this field. Other client Envoys receive CDS without
452 /// ``transport_socket_match`` set, and still send plain text traffic to the same cluster.
453 ///
454 /// This field can be used to specify custom transport socket configurations for health
455 /// checks by adding matching key/value pairs in a health check's
456 /// :ref:`transport socket match criteria <envoy_v3_api_field_config.core.v3.HealthCheck.transport_socket_match_criteria>` field.
457 ///
458 /// \[#comment:TODO(incfly): add a detailed architecture doc on intended usage.\]
459 #[prost(message, repeated, tag = "43")]
460 pub transport_socket_matches: ::prost::alloc::vec::Vec<
461 cluster::TransportSocketMatch,
462 >,
463 /// Supplies the name of the cluster which must be unique across all clusters.
464 /// The cluster name is used when emitting
465 /// :ref:`statistics <config_cluster_manager_cluster_stats>` if :ref:`alt_stat_name
466 /// <envoy_v3_api_field_config.cluster.v3.Cluster.alt_stat_name>` is not provided.
467 /// Any ``:`` in the cluster name will be converted to ``_`` when emitting statistics.
468 #[prost(string, tag = "1")]
469 pub name: ::prost::alloc::string::String,
470 /// An optional alternative to the cluster name to be used for observability. This name is used
471 /// emitting stats for the cluster and access logging the cluster name. This will appear as
472 /// additional information in configuration dumps of a cluster's current status as
473 /// :ref:`observability_name <envoy_v3_api_field_admin.v3.ClusterStatus.observability_name>`
474 /// and as an additional tag "upstream_cluster.name" while tracing. Note: Any ``:`` in the name
475 /// will be converted to ``_`` when emitting statistics. This should not be confused with
476 /// :ref:`Router Filter Header <config_http_filters_router_x-envoy-upstream-alt-stat-name>`.
477 #[prost(string, tag = "28")]
478 pub alt_stat_name: ::prost::alloc::string::String,
479 /// Configuration to use for EDS updates for the Cluster.
480 #[prost(message, optional, tag = "3")]
481 pub eds_cluster_config: ::core::option::Option<cluster::EdsClusterConfig>,
482 /// The timeout for new network connections to hosts in the cluster.
483 /// If not set, a default value of 5s will be used.
484 #[prost(message, optional, tag = "4")]
485 pub connect_timeout: ::core::option::Option<
486 super::super::super::super::google::protobuf::Duration,
487 >,
488 /// Soft limit on size of the cluster’s connections read and write buffers. If
489 /// unspecified, an implementation defined default is applied (1MiB).
490 #[prost(message, optional, tag = "5")]
491 pub per_connection_buffer_limit_bytes: ::core::option::Option<
492 super::super::super::super::google::protobuf::UInt32Value,
493 >,
494 /// The :ref:`load balancer type <arch_overview_load_balancing_types>` to use
495 /// when picking a host in the cluster.
496 #[prost(enumeration = "cluster::LbPolicy", tag = "6")]
497 pub lb_policy: i32,
498 /// Setting this is required for specifying members of
499 /// :ref:`STATIC<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STATIC>`,
500 /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
501 /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>` clusters.
502 /// This field supersedes the ``hosts`` field in the v2 API.
503 ///
504 /// .. attention::
505 ///
506 /// Setting this allows non-EDS cluster types to contain embedded EDS equivalent
507 /// :ref:`endpoint assignments<envoy_v3_api_msg_config.endpoint.v3.ClusterLoadAssignment>`.
508 ///
509 #[prost(message, optional, tag = "33")]
510 pub load_assignment: ::core::option::Option<
511 super::super::endpoint::v3::ClusterLoadAssignment,
512 >,
513 /// Optional :ref:`active health checking <arch_overview_health_checking>`
514 /// configuration for the cluster. If no
515 /// configuration is specified no health checking will be done and all cluster
516 /// members will be considered healthy at all times.
517 #[prost(message, repeated, tag = "8")]
518 pub health_checks: ::prost::alloc::vec::Vec<super::super::core::v3::HealthCheck>,
519 /// Optional maximum requests for a single upstream connection. This parameter
520 /// is respected by both the HTTP/1.1 and HTTP/2 connection pool
521 /// implementations. If not specified, there is no limit. Setting this
522 /// parameter to 1 will effectively disable keep alive.
523 ///
524 /// .. attention::
525 /// This field has been deprecated in favor of the :ref:`max_requests_per_connection <envoy_v3_api_field_config.core.v3.HttpProtocolOptions.max_requests_per_connection>` field.
526 #[deprecated]
527 #[prost(message, optional, tag = "9")]
528 pub max_requests_per_connection: ::core::option::Option<
529 super::super::super::super::google::protobuf::UInt32Value,
530 >,
531 /// Optional :ref:`circuit breaking <arch_overview_circuit_break>` for the cluster.
532 #[prost(message, optional, tag = "10")]
533 pub circuit_breakers: ::core::option::Option<CircuitBreakers>,
534 /// HTTP protocol options that are applied only to upstream HTTP connections.
535 /// These options apply to all HTTP versions.
536 /// This has been deprecated in favor of
537 /// :ref:`upstream_http_protocol_options <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
538 /// in the :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
539 /// upstream_http_protocol_options can be set via the cluster's
540 /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
541 /// See :ref:`upstream_http_protocol_options
542 /// <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
543 /// for example usage.
544 #[deprecated]
545 #[prost(message, optional, tag = "46")]
546 pub upstream_http_protocol_options: ::core::option::Option<
547 super::super::core::v3::UpstreamHttpProtocolOptions,
548 >,
549 /// Additional options when handling HTTP requests upstream. These options will be applicable to
550 /// both HTTP1 and HTTP2 requests.
551 /// This has been deprecated in favor of
552 /// :ref:`common_http_protocol_options <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.common_http_protocol_options>`
553 /// in the :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
554 /// common_http_protocol_options can be set via the cluster's
555 /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
556 /// See :ref:`upstream_http_protocol_options
557 /// <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
558 /// for example usage.
559 #[deprecated]
560 #[prost(message, optional, tag = "29")]
561 pub common_http_protocol_options: ::core::option::Option<
562 super::super::core::v3::HttpProtocolOptions,
563 >,
564 /// Additional options when handling HTTP1 requests.
565 /// This has been deprecated in favor of http_protocol_options fields in the
566 /// :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
567 /// http_protocol_options can be set via the cluster's
568 /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
569 /// See :ref:`upstream_http_protocol_options
570 /// <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
571 /// for example usage.
572 #[deprecated]
573 #[prost(message, optional, tag = "13")]
574 pub http_protocol_options: ::core::option::Option<
575 super::super::core::v3::Http1ProtocolOptions,
576 >,
577 /// Even if default HTTP2 protocol options are desired, this field must be
578 /// set so that Envoy will assume that the upstream supports HTTP/2 when
579 /// making new HTTP connection pool connections. Currently, Envoy only
580 /// supports prior knowledge for upstream connections. Even if TLS is used
581 /// with ALPN, ``http2_protocol_options`` must be specified. As an aside this allows HTTP/2
582 /// connections to happen over plain text.
583 /// This has been deprecated in favor of http2_protocol_options fields in the
584 /// :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>`
585 /// message. http2_protocol_options can be set via the cluster's
586 /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
587 /// See :ref:`upstream_http_protocol_options
588 /// <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
589 /// for example usage.
590 #[deprecated]
591 #[prost(message, optional, tag = "14")]
592 pub http2_protocol_options: ::core::option::Option<
593 super::super::core::v3::Http2ProtocolOptions,
594 >,
595 /// The extension_protocol_options field is used to provide extension-specific protocol options
596 /// for upstream connections. The key should match the extension filter name, such as
597 /// "envoy.filters.network.thrift_proxy". See the extension's documentation for details on
598 /// specific options.
599 /// \[#next-major-version: make this a list of typed extensions.\]
600 #[prost(map = "string, message", tag = "36")]
601 pub typed_extension_protocol_options: ::std::collections::HashMap<
602 ::prost::alloc::string::String,
603 super::super::super::super::google::protobuf::Any,
604 >,
605 /// If the DNS refresh rate is specified and the cluster type is either
606 /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
607 /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
608 /// this value is used as the cluster’s DNS refresh
609 /// rate. The value configured must be at least 1ms. If this setting is not specified, the
610 /// value defaults to 5000ms. For cluster types other than
611 /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
612 /// and :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`
613 /// this setting is ignored.
614 #[prost(message, optional, tag = "16")]
615 pub dns_refresh_rate: ::core::option::Option<
616 super::super::super::super::google::protobuf::Duration,
617 >,
618 /// If the DNS failure refresh rate is specified and the cluster type is either
619 /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
620 /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
621 /// this is used as the cluster’s DNS refresh rate when requests are failing. If this setting is
622 /// not specified, the failure refresh rate defaults to the DNS refresh rate. For cluster types
623 /// other than :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>` and
624 /// :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>` this setting is
625 /// ignored.
626 #[prost(message, optional, tag = "44")]
627 pub dns_failure_refresh_rate: ::core::option::Option<cluster::RefreshRate>,
628 /// Optional configuration for setting cluster's DNS refresh rate. If the value is set to true,
629 /// cluster's DNS refresh rate will be set to resource record's TTL which comes from DNS
630 /// resolution.
631 #[prost(bool, tag = "39")]
632 pub respect_dns_ttl: bool,
633 /// The DNS IP address resolution policy. If this setting is not specified, the
634 /// value defaults to
635 /// :ref:`AUTO<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DnsLookupFamily.AUTO>`.
636 #[prost(enumeration = "cluster::DnsLookupFamily", tag = "17")]
637 pub dns_lookup_family: i32,
638 /// If DNS resolvers are specified and the cluster type is either
639 /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
640 /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
641 /// this value is used to specify the cluster’s dns resolvers.
642 /// If this setting is not specified, the value defaults to the default
643 /// resolver, which uses /etc/resolv.conf for configuration. For cluster types
644 /// other than
645 /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
646 /// and :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`
647 /// this setting is ignored.
648 /// This field is deprecated in favor of ``dns_resolution_config``
649 /// which aggregates all of the DNS resolver configuration in a single message.
650 #[deprecated]
651 #[prost(message, repeated, tag = "18")]
652 pub dns_resolvers: ::prost::alloc::vec::Vec<super::super::core::v3::Address>,
653 /// Always use TCP queries instead of UDP queries for DNS lookups.
654 /// This field is deprecated in favor of ``dns_resolution_config``
655 /// which aggregates all of the DNS resolver configuration in a single message.
656 #[deprecated]
657 #[prost(bool, tag = "45")]
658 pub use_tcp_for_dns_lookups: bool,
659 /// DNS resolution configuration which includes the underlying dns resolver addresses and options.
660 /// This field is deprecated in favor of
661 /// :ref:`typed_dns_resolver_config <envoy_v3_api_field_config.cluster.v3.Cluster.typed_dns_resolver_config>`.
662 #[deprecated]
663 #[prost(message, optional, tag = "53")]
664 pub dns_resolution_config: ::core::option::Option<
665 super::super::core::v3::DnsResolutionConfig,
666 >,
667 /// DNS resolver type configuration extension. This extension can be used to configure c-ares, apple,
668 /// or any other DNS resolver types and the related parameters.
669 /// For example, an object of
670 /// :ref:`CaresDnsResolverConfig <envoy_v3_api_msg_extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig>`
671 /// can be packed into this ``typed_dns_resolver_config``. This configuration replaces the
672 /// :ref:`dns_resolution_config <envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolution_config>`
673 /// configuration.
674 /// During the transition period when both ``dns_resolution_config`` and ``typed_dns_resolver_config`` exists,
675 /// when ``typed_dns_resolver_config`` is in place, Envoy will use it and ignore ``dns_resolution_config``.
676 /// When ``typed_dns_resolver_config`` is missing, the default behavior is in place.
677 /// \[#extension-category: envoy.network.dns_resolver\]
678 #[prost(message, optional, tag = "55")]
679 pub typed_dns_resolver_config: ::core::option::Option<
680 super::super::core::v3::TypedExtensionConfig,
681 >,
682 /// Optional configuration for having cluster readiness block on warm-up. Currently, only applicable for
683 /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
684 /// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
685 /// or :ref:`Redis Cluster<arch_overview_redis>`.
686 /// If true, cluster readiness blocks on warm-up. If false, the cluster will complete
687 /// initialization whether or not warm-up has completed. Defaults to true.
688 #[prost(message, optional, tag = "54")]
689 pub wait_for_warm_on_init: ::core::option::Option<
690 super::super::super::super::google::protobuf::BoolValue,
691 >,
692 /// If specified, outlier detection will be enabled for this upstream cluster.
693 /// Each of the configuration values can be overridden via
694 /// :ref:`runtime values <config_cluster_manager_cluster_runtime_outlier_detection>`.
695 #[prost(message, optional, tag = "19")]
696 pub outlier_detection: ::core::option::Option<OutlierDetection>,
697 /// The interval for removing stale hosts from a cluster type
698 /// :ref:`ORIGINAL_DST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.ORIGINAL_DST>`.
699 /// Hosts are considered stale if they have not been used
700 /// as upstream destinations during this interval. New hosts are added
701 /// to original destination clusters on demand as new connections are
702 /// redirected to Envoy, causing the number of hosts in the cluster to
703 /// grow over time. Hosts that are not stale (they are actively used as
704 /// destinations) are kept in the cluster, which allows connections to
705 /// them remain open, saving the latency that would otherwise be spent
706 /// on opening new connections. If this setting is not specified, the
707 /// value defaults to 5000ms. For cluster types other than
708 /// :ref:`ORIGINAL_DST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.ORIGINAL_DST>`
709 /// this setting is ignored.
710 #[prost(message, optional, tag = "20")]
711 pub cleanup_interval: ::core::option::Option<
712 super::super::super::super::google::protobuf::Duration,
713 >,
714 /// Optional configuration used to bind newly established upstream connections.
715 /// This overrides any bind_config specified in the bootstrap proto.
716 /// If the address and port are empty, no bind will be performed.
717 #[prost(message, optional, tag = "21")]
718 pub upstream_bind_config: ::core::option::Option<super::super::core::v3::BindConfig>,
719 /// Configuration for load balancing subsetting.
720 #[prost(message, optional, tag = "22")]
721 pub lb_subset_config: ::core::option::Option<cluster::LbSubsetConfig>,
722 /// Common configuration for all load balancer implementations.
723 #[prost(message, optional, tag = "27")]
724 pub common_lb_config: ::core::option::Option<cluster::CommonLbConfig>,
725 /// Optional custom transport socket implementation to use for upstream connections.
726 /// To setup TLS, set a transport socket with name ``envoy.transport_sockets.tls`` and
727 /// :ref:`UpstreamTlsContexts <envoy_v3_api_msg_extensions.transport_sockets.tls.v3.UpstreamTlsContext>` in the ``typed_config``.
728 /// If no transport socket configuration is specified, new connections
729 /// will be set up with plaintext.
730 #[prost(message, optional, tag = "24")]
731 pub transport_socket: ::core::option::Option<
732 super::super::core::v3::TransportSocket,
733 >,
734 /// The Metadata field can be used to provide additional information about the
735 /// cluster. It can be used for stats, logging, and varying filter behavior.
736 /// Fields should use reverse DNS notation to denote which entity within Envoy
737 /// will need the information. For instance, if the metadata is intended for
738 /// the Router filter, the filter name should be specified as ``envoy.filters.http.router``.
739 #[prost(message, optional, tag = "25")]
740 pub metadata: ::core::option::Option<super::super::core::v3::Metadata>,
741 /// Determines how Envoy selects the protocol used to speak to upstream hosts.
742 /// This has been deprecated in favor of setting explicit protocol selection
743 /// in the :ref:`http_protocol_options
744 /// <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
745 /// http_protocol_options can be set via the cluster's
746 /// :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
747 #[deprecated]
748 #[prost(enumeration = "cluster::ClusterProtocolSelection", tag = "26")]
749 pub protocol_selection: i32,
750 /// Optional options for upstream connections.
751 #[prost(message, optional, tag = "30")]
752 pub upstream_connection_options: ::core::option::Option<UpstreamConnectionOptions>,
753 /// If an upstream host becomes unhealthy (as determined by the configured health checks
754 /// or outlier detection), immediately close all connections to the failed host.
755 ///
756 /// .. note::
757 ///
758 /// This is currently only supported for connections created by tcp_proxy.
759 ///
760 /// .. note::
761 ///
762 /// The current implementation of this feature closes all connections immediately when
763 /// the unhealthy status is detected. If there are a large number of connections open
764 /// to an upstream host that becomes unhealthy, Envoy may spend a substantial amount of
765 /// time exclusively closing these connections, and not processing any other traffic.
766 #[prost(bool, tag = "31")]
767 pub close_connections_on_host_health_failure: bool,
768 /// If set to true, Envoy will ignore the health value of a host when processing its removal
769 /// from service discovery. This means that if active health checking is used, Envoy will *not*
770 /// wait for the endpoint to go unhealthy before removing it.
771 #[prost(bool, tag = "32")]
772 pub ignore_health_on_host_removal: bool,
773 /// An (optional) network filter chain, listed in the order the filters should be applied.
774 /// The chain will be applied to all outgoing connections that Envoy makes to the upstream
775 /// servers of this cluster.
776 #[prost(message, repeated, tag = "40")]
777 pub filters: ::prost::alloc::vec::Vec<Filter>,
778 /// If this field is set and is supported by the client, it will supersede the value of
779 /// :ref:`lb_policy<envoy_v3_api_field_config.cluster.v3.Cluster.lb_policy>`.
780 #[prost(message, optional, tag = "41")]
781 pub load_balancing_policy: ::core::option::Option<LoadBalancingPolicy>,
782 /// \[#not-implemented-hide:\]
783 /// If present, tells the client where to send load reports via LRS. If not present, the
784 /// client will fall back to a client-side default, which may be either (a) don't send any
785 /// load reports or (b) send load reports for all clusters to a single default server
786 /// (which may be configured in the bootstrap file).
787 ///
788 /// Note that if multiple clusters point to the same LRS server, the client may choose to
789 /// create a separate stream for each cluster or it may choose to coalesce the data for
790 /// multiple clusters onto a single stream. Either way, the client must make sure to send
791 /// the data for any given cluster on no more than one stream.
792 ///
793 /// [#next-major-version: In the v3 API, we should consider restructuring this somehow,
794 /// maybe by allowing LRS to go on the ADS stream, or maybe by moving some of the negotiation
795 /// from the LRS stream here.]
796 #[prost(message, optional, tag = "42")]
797 pub lrs_server: ::core::option::Option<super::super::core::v3::ConfigSource>,
798 /// If track_timeout_budgets is true, the :ref:`timeout budget histograms
799 /// <config_cluster_manager_cluster_stats_timeout_budgets>` will be published for each
800 /// request. These show what percentage of a request's per try and global timeout was used. A value
801 /// of 0 would indicate that none of the timeout was used or that the timeout was infinite. A value
802 /// of 100 would indicate that the request took the entirety of the timeout given to it.
803 ///
804 /// .. attention::
805 ///
806 /// This field has been deprecated in favor of ``timeout_budgets``, part of
807 /// :ref:`track_cluster_stats <envoy_v3_api_field_config.cluster.v3.Cluster.track_cluster_stats>`.
808 #[deprecated]
809 #[prost(bool, tag = "47")]
810 pub track_timeout_budgets: bool,
811 /// Optional customization and configuration of upstream connection pool, and upstream type.
812 ///
813 /// Currently this field only applies for HTTP traffic but is designed for eventual use for custom
814 /// TCP upstreams.
815 ///
816 /// For HTTP traffic, Envoy will generally take downstream HTTP and send it upstream as upstream
817 /// HTTP, using the http connection pool and the codec from ``http2_protocol_options``
818 ///
819 /// For routes where CONNECT termination is configured, Envoy will take downstream CONNECT
820 /// requests and forward the CONNECT payload upstream over raw TCP using the tcp connection pool.
821 ///
822 /// The default pool used is the generic connection pool which creates the HTTP upstream for most
823 /// HTTP requests, and the TCP upstream if CONNECT termination is configured.
824 ///
825 /// If users desire custom connection pool or upstream behavior, for example terminating
826 /// CONNECT only if a custom filter indicates it is appropriate, the custom factories
827 /// can be registered and configured here.
828 /// \[#extension-category: envoy.upstreams\]
829 #[prost(message, optional, tag = "48")]
830 pub upstream_config: ::core::option::Option<
831 super::super::core::v3::TypedExtensionConfig,
832 >,
833 /// Configuration to track optional cluster stats.
834 #[prost(message, optional, tag = "49")]
835 pub track_cluster_stats: ::core::option::Option<TrackClusterStats>,
836 /// Preconnect configuration for this cluster.
837 #[prost(message, optional, tag = "50")]
838 pub preconnect_policy: ::core::option::Option<cluster::PreconnectPolicy>,
839 /// If ``connection_pool_per_downstream_connection`` is true, the cluster will use a separate
840 /// connection pool for every downstream connection
841 #[prost(bool, tag = "51")]
842 pub connection_pool_per_downstream_connection: bool,
843 #[prost(oneof = "cluster::ClusterDiscoveryType", tags = "2, 38")]
844 pub cluster_discovery_type: ::core::option::Option<cluster::ClusterDiscoveryType>,
845 /// Optional configuration for the load balancing algorithm selected by
846 /// LbPolicy. Currently only
847 /// :ref:`RING_HASH<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.RING_HASH>`,
848 /// :ref:`MAGLEV<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.MAGLEV>` and
849 /// :ref:`LEAST_REQUEST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.LEAST_REQUEST>`
850 /// has additional configuration options.
851 /// Specifying ring_hash_lb_config or maglev_lb_config or least_request_lb_config without setting the corresponding
852 /// LbPolicy will generate an error at runtime.
853 #[prost(oneof = "cluster::LbConfig", tags = "23, 52, 34, 37, 56")]
854 pub lb_config: ::core::option::Option<cluster::LbConfig>,
855}
856/// Nested message and enum types in `Cluster`.
857pub mod cluster {
858 /// TransportSocketMatch specifies what transport socket config will be used
859 /// when the match conditions are satisfied.
860 #[derive(Clone, PartialEq, ::prost::Message)]
861 pub struct TransportSocketMatch {
862 /// The name of the match, used in stats generation.
863 #[prost(string, tag = "1")]
864 pub name: ::prost::alloc::string::String,
865 /// Optional endpoint metadata match criteria.
866 /// The connection to the endpoint with metadata matching what is set in this field
867 /// will use the transport socket configuration specified here.
868 /// The endpoint's metadata entry in ``envoy.transport_socket_match`` is used to match
869 /// against the values specified in this field.
870 #[prost(message, optional, tag = "2")]
871 pub r#match: ::core::option::Option<
872 super::super::super::super::super::google::protobuf::Struct,
873 >,
874 /// The configuration of the transport socket.
875 /// \[#extension-category: envoy.transport_sockets.upstream\]
876 #[prost(message, optional, tag = "3")]
877 pub transport_socket: ::core::option::Option<
878 super::super::super::core::v3::TransportSocket,
879 >,
880 }
881 impl ::prost::Name for TransportSocketMatch {
882 const NAME: &'static str = "TransportSocketMatch";
883 const PACKAGE: &'static str = "envoy.config.cluster.v3";
884 fn full_name() -> ::prost::alloc::string::String {
885 "envoy.config.cluster.v3.Cluster.TransportSocketMatch".into()
886 }
887 fn type_url() -> ::prost::alloc::string::String {
888 "type.googleapis.com/envoy.config.cluster.v3.Cluster.TransportSocketMatch"
889 .into()
890 }
891 }
892 /// Extended cluster type.
893 #[derive(Clone, PartialEq, ::prost::Message)]
894 pub struct CustomClusterType {
895 /// The type of the cluster to instantiate. The name must match a supported cluster type.
896 #[prost(string, tag = "1")]
897 pub name: ::prost::alloc::string::String,
898 /// Cluster specific configuration which depends on the cluster being instantiated.
899 /// See the supported cluster for further documentation.
900 /// \[#extension-category: envoy.clusters\]
901 #[prost(message, optional, tag = "2")]
902 pub typed_config: ::core::option::Option<
903 super::super::super::super::super::google::protobuf::Any,
904 >,
905 }
906 impl ::prost::Name for CustomClusterType {
907 const NAME: &'static str = "CustomClusterType";
908 const PACKAGE: &'static str = "envoy.config.cluster.v3";
909 fn full_name() -> ::prost::alloc::string::String {
910 "envoy.config.cluster.v3.Cluster.CustomClusterType".into()
911 }
912 fn type_url() -> ::prost::alloc::string::String {
913 "type.googleapis.com/envoy.config.cluster.v3.Cluster.CustomClusterType"
914 .into()
915 }
916 }
917 /// Only valid when discovery type is EDS.
918 #[derive(Clone, PartialEq, ::prost::Message)]
919 pub struct EdsClusterConfig {
920 /// Configuration for the source of EDS updates for this Cluster.
921 #[prost(message, optional, tag = "1")]
922 pub eds_config: ::core::option::Option<
923 super::super::super::core::v3::ConfigSource,
924 >,
925 /// Optional alternative to cluster name to present to EDS. This does not
926 /// have the same restrictions as cluster name, i.e. it may be arbitrary
927 /// length. This may be a xdstp:// URL.
928 #[prost(string, tag = "2")]
929 pub service_name: ::prost::alloc::string::String,
930 }
931 impl ::prost::Name for EdsClusterConfig {
932 const NAME: &'static str = "EdsClusterConfig";
933 const PACKAGE: &'static str = "envoy.config.cluster.v3";
934 fn full_name() -> ::prost::alloc::string::String {
935 "envoy.config.cluster.v3.Cluster.EdsClusterConfig".into()
936 }
937 fn type_url() -> ::prost::alloc::string::String {
938 "type.googleapis.com/envoy.config.cluster.v3.Cluster.EdsClusterConfig".into()
939 }
940 }
941 /// Optionally divide the endpoints in this cluster into subsets defined by
942 /// endpoint metadata and selected by route and weighted cluster metadata.
943 /// \[#next-free-field: 9\]
944 #[derive(Clone, PartialEq, ::prost::Message)]
945 pub struct LbSubsetConfig {
946 /// The behavior used when no endpoint subset matches the selected route's
947 /// metadata. The value defaults to
948 /// :ref:`NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
949 #[prost(enumeration = "lb_subset_config::LbSubsetFallbackPolicy", tag = "1")]
950 pub fallback_policy: i32,
951 /// Specifies the default subset of endpoints used during fallback if
952 /// fallback_policy is
953 /// :ref:`DEFAULT_SUBSET<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.DEFAULT_SUBSET>`.
954 /// Each field in default_subset is
955 /// compared to the matching LbEndpoint.Metadata under the ``envoy.lb``
956 /// namespace. It is valid for no hosts to match, in which case the behavior
957 /// is the same as a fallback_policy of
958 /// :ref:`NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
959 #[prost(message, optional, tag = "2")]
960 pub default_subset: ::core::option::Option<
961 super::super::super::super::super::google::protobuf::Struct,
962 >,
963 /// For each entry, LbEndpoint.Metadata's
964 /// ``envoy.lb`` namespace is traversed and a subset is created for each unique
965 /// combination of key and value. For example:
966 ///
967 /// .. code-block:: json
968 ///
969 /// { "subset_selectors": [
970 /// { "keys": \[ "version" \] },
971 /// { "keys": \[ "stage", "hardware_type" \] }
972 /// ]}
973 ///
974 /// A subset is matched when the metadata from the selected route and
975 /// weighted cluster contains the same keys and values as the subset's
976 /// metadata. The same host may appear in multiple subsets.
977 #[prost(message, repeated, tag = "3")]
978 pub subset_selectors: ::prost::alloc::vec::Vec<
979 lb_subset_config::LbSubsetSelector,
980 >,
981 /// If true, routing to subsets will take into account the localities and locality weights of the
982 /// endpoints when making the routing decision.
983 ///
984 /// There are some potential pitfalls associated with enabling this feature, as the resulting
985 /// traffic split after applying both a subset match and locality weights might be undesirable.
986 ///
987 /// Consider for example a situation in which you have 50/50 split across two localities X/Y
988 /// which have 100 hosts each without subsetting. If the subset LB results in X having only 1
989 /// host selected but Y having 100, then a lot more load is being dumped on the single host in X
990 /// than originally anticipated in the load balancing assignment delivered via EDS.
991 #[prost(bool, tag = "4")]
992 pub locality_weight_aware: bool,
993 /// When used with locality_weight_aware, scales the weight of each locality by the ratio
994 /// of hosts in the subset vs hosts in the original subset. This aims to even out the load
995 /// going to an individual locality if said locality is disproportionately affected by the
996 /// subset predicate.
997 #[prost(bool, tag = "5")]
998 pub scale_locality_weight: bool,
999 /// If true, when a fallback policy is configured and its corresponding subset fails to find
1000 /// a host this will cause any host to be selected instead.
1001 ///
1002 /// This is useful when using the default subset as the fallback policy, given the default
1003 /// subset might become empty. With this option enabled, if that happens the LB will attempt
1004 /// to select a host from the entire cluster.
1005 #[prost(bool, tag = "6")]
1006 pub panic_mode_any: bool,
1007 /// If true, metadata specified for a metadata key will be matched against the corresponding
1008 /// endpoint metadata if the endpoint metadata matches the value exactly OR it is a list value
1009 /// and any of the elements in the list matches the criteria.
1010 #[prost(bool, tag = "7")]
1011 pub list_as_any: bool,
1012 /// Fallback mechanism that allows to try different route metadata until a host is found.
1013 /// If load balancing process, including all its mechanisms (like
1014 /// :ref:`fallback_policy<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.fallback_policy>`)
1015 /// fails to select a host, this policy decides if and how the process is repeated using another metadata.
1016 ///
1017 /// The value defaults to
1018 /// :ref:`METADATA_NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetMetadataFallbackPolicy.METADATA_NO_FALLBACK>`.
1019 #[prost(
1020 enumeration = "lb_subset_config::LbSubsetMetadataFallbackPolicy",
1021 tag = "8"
1022 )]
1023 pub metadata_fallback_policy: i32,
1024 }
1025 /// Nested message and enum types in `LbSubsetConfig`.
1026 pub mod lb_subset_config {
1027 /// Specifications for subsets.
1028 #[derive(Clone, PartialEq, ::prost::Message)]
1029 pub struct LbSubsetSelector {
1030 /// List of keys to match with the weighted cluster metadata.
1031 #[prost(string, repeated, tag = "1")]
1032 pub keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1033 /// Selects a mode of operation in which each subset has only one host. This mode uses the same rules for
1034 /// choosing a host, but updating hosts is faster, especially for large numbers of hosts.
1035 ///
1036 /// If a match is found to a host, that host will be used regardless of priority levels.
1037 ///
1038 /// When this mode is enabled, configurations that contain more than one host with the same metadata value for the single key in ``keys``
1039 /// will use only one of the hosts with the given key; no requests will be routed to the others. The cluster gauge
1040 /// :ref:`lb_subsets_single_host_per_subset_duplicate<config_cluster_manager_cluster_stats_subset_lb>` indicates how many duplicates are
1041 /// present in the current configuration.
1042 #[prost(bool, tag = "4")]
1043 pub single_host_per_subset: bool,
1044 /// The behavior used when no endpoint subset matches the selected route's
1045 /// metadata.
1046 #[prost(
1047 enumeration = "lb_subset_selector::LbSubsetSelectorFallbackPolicy",
1048 tag = "2"
1049 )]
1050 pub fallback_policy: i32,
1051 /// Subset of
1052 /// :ref:`keys<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.keys>` used by
1053 /// :ref:`KEYS_SUBSET<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.KEYS_SUBSET>`
1054 /// fallback policy.
1055 /// It has to be a non empty list if KEYS_SUBSET fallback policy is selected.
1056 /// For any other fallback policy the parameter is not used and should not be set.
1057 /// Only values also present in
1058 /// :ref:`keys<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.keys>` are allowed, but
1059 /// ``fallback_keys_subset`` cannot be equal to ``keys``.
1060 #[prost(string, repeated, tag = "3")]
1061 pub fallback_keys_subset: ::prost::alloc::vec::Vec<
1062 ::prost::alloc::string::String,
1063 >,
1064 }
1065 /// Nested message and enum types in `LbSubsetSelector`.
1066 pub mod lb_subset_selector {
1067 /// Allows to override top level fallback policy per selector.
1068 #[derive(
1069 Clone,
1070 Copy,
1071 Debug,
1072 PartialEq,
1073 Eq,
1074 Hash,
1075 PartialOrd,
1076 Ord,
1077 ::prost::Enumeration
1078 )]
1079 #[repr(i32)]
1080 pub enum LbSubsetSelectorFallbackPolicy {
1081 /// If NOT_DEFINED top level config fallback policy is used instead.
1082 NotDefined = 0,
1083 /// If NO_FALLBACK is selected, a result equivalent to no healthy hosts is reported.
1084 NoFallback = 1,
1085 /// If ANY_ENDPOINT is selected, any cluster endpoint may be returned
1086 /// (subject to policy, health checks, etc).
1087 AnyEndpoint = 2,
1088 /// If DEFAULT_SUBSET is selected, load balancing is performed over the
1089 /// endpoints matching the values from the default_subset field.
1090 DefaultSubset = 3,
1091 /// If KEYS_SUBSET is selected, subset selector matching is performed again with metadata
1092 /// keys reduced to
1093 /// :ref:`fallback_keys_subset<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.fallback_keys_subset>`.
1094 /// It allows for a fallback to a different, less specific selector if some of the keys of
1095 /// the selector are considered optional.
1096 KeysSubset = 4,
1097 }
1098 impl LbSubsetSelectorFallbackPolicy {
1099 /// String value of the enum field names used in the ProtoBuf definition.
1100 ///
1101 /// The values are not transformed in any way and thus are considered stable
1102 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1103 pub fn as_str_name(&self) -> &'static str {
1104 match self {
1105 Self::NotDefined => "NOT_DEFINED",
1106 Self::NoFallback => "NO_FALLBACK",
1107 Self::AnyEndpoint => "ANY_ENDPOINT",
1108 Self::DefaultSubset => "DEFAULT_SUBSET",
1109 Self::KeysSubset => "KEYS_SUBSET",
1110 }
1111 }
1112 /// Creates an enum from field names used in the ProtoBuf definition.
1113 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1114 match value {
1115 "NOT_DEFINED" => Some(Self::NotDefined),
1116 "NO_FALLBACK" => Some(Self::NoFallback),
1117 "ANY_ENDPOINT" => Some(Self::AnyEndpoint),
1118 "DEFAULT_SUBSET" => Some(Self::DefaultSubset),
1119 "KEYS_SUBSET" => Some(Self::KeysSubset),
1120 _ => None,
1121 }
1122 }
1123 }
1124 }
1125 impl ::prost::Name for LbSubsetSelector {
1126 const NAME: &'static str = "LbSubsetSelector";
1127 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1128 fn full_name() -> ::prost::alloc::string::String {
1129 "envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector".into()
1130 }
1131 fn type_url() -> ::prost::alloc::string::String {
1132 "type.googleapis.com/envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector"
1133 .into()
1134 }
1135 }
1136 /// If NO_FALLBACK is selected, a result
1137 /// equivalent to no healthy hosts is reported. If ANY_ENDPOINT is selected,
1138 /// any cluster endpoint may be returned (subject to policy, health checks,
1139 /// etc). If DEFAULT_SUBSET is selected, load balancing is performed over the
1140 /// endpoints matching the values from the default_subset field.
1141 #[derive(
1142 Clone,
1143 Copy,
1144 Debug,
1145 PartialEq,
1146 Eq,
1147 Hash,
1148 PartialOrd,
1149 Ord,
1150 ::prost::Enumeration
1151 )]
1152 #[repr(i32)]
1153 pub enum LbSubsetFallbackPolicy {
1154 NoFallback = 0,
1155 AnyEndpoint = 1,
1156 DefaultSubset = 2,
1157 }
1158 impl LbSubsetFallbackPolicy {
1159 /// String value of the enum field names used in the ProtoBuf definition.
1160 ///
1161 /// The values are not transformed in any way and thus are considered stable
1162 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1163 pub fn as_str_name(&self) -> &'static str {
1164 match self {
1165 Self::NoFallback => "NO_FALLBACK",
1166 Self::AnyEndpoint => "ANY_ENDPOINT",
1167 Self::DefaultSubset => "DEFAULT_SUBSET",
1168 }
1169 }
1170 /// Creates an enum from field names used in the ProtoBuf definition.
1171 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1172 match value {
1173 "NO_FALLBACK" => Some(Self::NoFallback),
1174 "ANY_ENDPOINT" => Some(Self::AnyEndpoint),
1175 "DEFAULT_SUBSET" => Some(Self::DefaultSubset),
1176 _ => None,
1177 }
1178 }
1179 }
1180 #[derive(
1181 Clone,
1182 Copy,
1183 Debug,
1184 PartialEq,
1185 Eq,
1186 Hash,
1187 PartialOrd,
1188 Ord,
1189 ::prost::Enumeration
1190 )]
1191 #[repr(i32)]
1192 pub enum LbSubsetMetadataFallbackPolicy {
1193 /// No fallback. Route metadata will be used as-is.
1194 MetadataNoFallback = 0,
1195 /// A special metadata key ``fallback_list`` will be used to provide variants of metadata to try.
1196 /// Value of ``fallback_list`` key has to be a list. Every list element has to be a struct - it will
1197 /// be merged with route metadata, overriding keys that appear in both places.
1198 /// ``fallback_list`` entries will be used in order until a host is found.
1199 ///
1200 /// ``fallback_list`` key itself is removed from metadata before subset load balancing is performed.
1201 ///
1202 /// Example:
1203 ///
1204 /// for metadata:
1205 ///
1206 /// .. code-block:: yaml
1207 ///
1208 /// version: 1.0
1209 /// fallback_list:
1210 /// - version: 2.0
1211 /// hardware: c64
1212 /// - hardware: c32
1213 /// - version: 3.0
1214 ///
1215 /// at first, metadata:
1216 ///
1217 /// .. code-block:: json
1218 ///
1219 /// {"version": "2.0", "hardware": "c64"}
1220 ///
1221 /// will be used for load balancing. If no host is found, metadata:
1222 ///
1223 /// .. code-block:: json
1224 ///
1225 /// {"version": "1.0", "hardware": "c32"}
1226 ///
1227 /// is next to try. If it still results in no host, finally metadata:
1228 ///
1229 /// .. code-block:: json
1230 ///
1231 /// {"version": "3.0"}
1232 ///
1233 /// is used.
1234 FallbackList = 1,
1235 }
1236 impl LbSubsetMetadataFallbackPolicy {
1237 /// String value of the enum field names used in the ProtoBuf definition.
1238 ///
1239 /// The values are not transformed in any way and thus are considered stable
1240 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1241 pub fn as_str_name(&self) -> &'static str {
1242 match self {
1243 Self::MetadataNoFallback => "METADATA_NO_FALLBACK",
1244 Self::FallbackList => "FALLBACK_LIST",
1245 }
1246 }
1247 /// Creates an enum from field names used in the ProtoBuf definition.
1248 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1249 match value {
1250 "METADATA_NO_FALLBACK" => Some(Self::MetadataNoFallback),
1251 "FALLBACK_LIST" => Some(Self::FallbackList),
1252 _ => None,
1253 }
1254 }
1255 }
1256 }
1257 impl ::prost::Name for LbSubsetConfig {
1258 const NAME: &'static str = "LbSubsetConfig";
1259 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1260 fn full_name() -> ::prost::alloc::string::String {
1261 "envoy.config.cluster.v3.Cluster.LbSubsetConfig".into()
1262 }
1263 fn type_url() -> ::prost::alloc::string::String {
1264 "type.googleapis.com/envoy.config.cluster.v3.Cluster.LbSubsetConfig".into()
1265 }
1266 }
1267 /// Configuration for :ref:`slow start mode <arch_overview_load_balancing_slow_start>`.
1268 #[derive(Clone, PartialEq, ::prost::Message)]
1269 pub struct SlowStartConfig {
1270 /// Represents the size of slow start window.
1271 /// If set, the newly created host remains in slow start mode starting from its creation time
1272 /// for the duration of slow start window.
1273 #[prost(message, optional, tag = "1")]
1274 pub slow_start_window: ::core::option::Option<
1275 super::super::super::super::super::google::protobuf::Duration,
1276 >,
1277 /// This parameter controls the speed of traffic increase over the slow start window. Defaults to 1.0,
1278 /// so that endpoint would get linearly increasing amount of traffic.
1279 /// When increasing the value for this parameter, the speed of traffic ramp-up increases non-linearly.
1280 /// The value of aggression parameter should be greater than 0.0.
1281 /// By tuning the parameter, is possible to achieve polynomial or exponential shape of ramp-up curve.
1282 ///
1283 /// During slow start window, effective weight of an endpoint would be scaled with time factor and aggression:
1284 /// ``new_weight = weight * max(min_weight_percent, time_factor ^ (1 / aggression))``,
1285 /// where ``time_factor=(time_since_start_seconds / slow_start_time_seconds)``.
1286 ///
1287 /// As time progresses, more and more traffic would be sent to endpoint, which is in slow start window.
1288 /// Once host exits slow start, time_factor and aggression no longer affect its weight.
1289 #[prost(message, optional, tag = "2")]
1290 pub aggression: ::core::option::Option<
1291 super::super::super::core::v3::RuntimeDouble,
1292 >,
1293 /// Configures the minimum percentage of origin weight that avoids too small new weight,
1294 /// which may cause endpoints in slow start mode receive no traffic in slow start window.
1295 /// If not specified, the default is 10%.
1296 #[prost(message, optional, tag = "3")]
1297 pub min_weight_percent: ::core::option::Option<
1298 super::super::super::super::r#type::v3::Percent,
1299 >,
1300 }
1301 impl ::prost::Name for SlowStartConfig {
1302 const NAME: &'static str = "SlowStartConfig";
1303 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1304 fn full_name() -> ::prost::alloc::string::String {
1305 "envoy.config.cluster.v3.Cluster.SlowStartConfig".into()
1306 }
1307 fn type_url() -> ::prost::alloc::string::String {
1308 "type.googleapis.com/envoy.config.cluster.v3.Cluster.SlowStartConfig".into()
1309 }
1310 }
1311 /// Specific configuration for the RoundRobin load balancing policy.
1312 #[derive(Clone, PartialEq, ::prost::Message)]
1313 pub struct RoundRobinLbConfig {
1314 /// Configuration for slow start mode.
1315 /// If this configuration is not set, slow start will not be not enabled.
1316 #[prost(message, optional, tag = "1")]
1317 pub slow_start_config: ::core::option::Option<SlowStartConfig>,
1318 }
1319 impl ::prost::Name for RoundRobinLbConfig {
1320 const NAME: &'static str = "RoundRobinLbConfig";
1321 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1322 fn full_name() -> ::prost::alloc::string::String {
1323 "envoy.config.cluster.v3.Cluster.RoundRobinLbConfig".into()
1324 }
1325 fn type_url() -> ::prost::alloc::string::String {
1326 "type.googleapis.com/envoy.config.cluster.v3.Cluster.RoundRobinLbConfig"
1327 .into()
1328 }
1329 }
1330 /// Specific configuration for the LeastRequest load balancing policy.
1331 #[derive(Clone, PartialEq, ::prost::Message)]
1332 pub struct LeastRequestLbConfig {
1333 /// The number of random healthy hosts from which the host with the fewest active requests will
1334 /// be chosen. Defaults to 2 so that we perform two-choice selection if the field is not set.
1335 #[prost(message, optional, tag = "1")]
1336 pub choice_count: ::core::option::Option<
1337 super::super::super::super::super::google::protobuf::UInt32Value,
1338 >,
1339 /// The following formula is used to calculate the dynamic weights when hosts have different load
1340 /// balancing weights:
1341 ///
1342 /// ``weight = load_balancing_weight / (active_requests + 1)^active_request_bias``
1343 ///
1344 /// The larger the active request bias is, the more aggressively active requests will lower the
1345 /// effective weight when all host weights are not equal.
1346 ///
1347 /// ``active_request_bias`` must be greater than or equal to 0.0.
1348 ///
1349 /// When ``active_request_bias == 0.0`` the Least Request Load Balancer doesn't consider the number
1350 /// of active requests at the time it picks a host and behaves like the Round Robin Load
1351 /// Balancer.
1352 ///
1353 /// When ``active_request_bias > 0.0`` the Least Request Load Balancer scales the load balancing
1354 /// weight by the number of active requests at the time it does a pick.
1355 ///
1356 /// The value is cached for performance reasons and refreshed whenever one of the Load Balancer's
1357 /// host sets changes, e.g., whenever there is a host membership update or a host load balancing
1358 /// weight change.
1359 ///
1360 /// .. note::
1361 /// This setting only takes effect if all host weights are not equal.
1362 #[prost(message, optional, tag = "2")]
1363 pub active_request_bias: ::core::option::Option<
1364 super::super::super::core::v3::RuntimeDouble,
1365 >,
1366 /// Configuration for slow start mode.
1367 /// If this configuration is not set, slow start will not be not enabled.
1368 #[prost(message, optional, tag = "3")]
1369 pub slow_start_config: ::core::option::Option<SlowStartConfig>,
1370 }
1371 impl ::prost::Name for LeastRequestLbConfig {
1372 const NAME: &'static str = "LeastRequestLbConfig";
1373 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1374 fn full_name() -> ::prost::alloc::string::String {
1375 "envoy.config.cluster.v3.Cluster.LeastRequestLbConfig".into()
1376 }
1377 fn type_url() -> ::prost::alloc::string::String {
1378 "type.googleapis.com/envoy.config.cluster.v3.Cluster.LeastRequestLbConfig"
1379 .into()
1380 }
1381 }
1382 /// Specific configuration for the :ref:`RingHash<arch_overview_load_balancing_types_ring_hash>`
1383 /// load balancing policy.
1384 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1385 pub struct RingHashLbConfig {
1386 /// Minimum hash ring size. The larger the ring is (that is, the more hashes there are for each
1387 /// provided host) the better the request distribution will reflect the desired weights. Defaults
1388 /// to 1024 entries, and limited to 8M entries. See also
1389 /// :ref:`maximum_ring_size<envoy_v3_api_field_config.cluster.v3.Cluster.RingHashLbConfig.maximum_ring_size>`.
1390 #[prost(message, optional, tag = "1")]
1391 pub minimum_ring_size: ::core::option::Option<
1392 super::super::super::super::super::google::protobuf::UInt64Value,
1393 >,
1394 /// The hash function used to hash hosts onto the ketama ring. The value defaults to
1395 /// :ref:`XX_HASH<envoy_v3_api_enum_value_config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.XX_HASH>`.
1396 #[prost(enumeration = "ring_hash_lb_config::HashFunction", tag = "3")]
1397 pub hash_function: i32,
1398 /// Maximum hash ring size. Defaults to 8M entries, and limited to 8M entries, but can be lowered
1399 /// to further constrain resource use. See also
1400 /// :ref:`minimum_ring_size<envoy_v3_api_field_config.cluster.v3.Cluster.RingHashLbConfig.minimum_ring_size>`.
1401 #[prost(message, optional, tag = "4")]
1402 pub maximum_ring_size: ::core::option::Option<
1403 super::super::super::super::super::google::protobuf::UInt64Value,
1404 >,
1405 }
1406 /// Nested message and enum types in `RingHashLbConfig`.
1407 pub mod ring_hash_lb_config {
1408 /// The hash function used to hash hosts onto the ketama ring.
1409 #[derive(
1410 Clone,
1411 Copy,
1412 Debug,
1413 PartialEq,
1414 Eq,
1415 Hash,
1416 PartialOrd,
1417 Ord,
1418 ::prost::Enumeration
1419 )]
1420 #[repr(i32)]
1421 pub enum HashFunction {
1422 /// Use `xxHash <<https://github.com/Cyan4973/xxHash>`_,> this is the default hash function.
1423 XxHash = 0,
1424 /// Use `MurmurHash2 <<https://sites.google.com/site/murmurhash/>`_,> this is compatible with
1425 /// std:hash<string> in GNU libstdc++ 3.4.20 or above. This is typically the case when compiled
1426 /// on Linux and not macOS.
1427 MurmurHash2 = 1,
1428 }
1429 impl HashFunction {
1430 /// String value of the enum field names used in the ProtoBuf definition.
1431 ///
1432 /// The values are not transformed in any way and thus are considered stable
1433 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1434 pub fn as_str_name(&self) -> &'static str {
1435 match self {
1436 Self::XxHash => "XX_HASH",
1437 Self::MurmurHash2 => "MURMUR_HASH_2",
1438 }
1439 }
1440 /// Creates an enum from field names used in the ProtoBuf definition.
1441 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1442 match value {
1443 "XX_HASH" => Some(Self::XxHash),
1444 "MURMUR_HASH_2" => Some(Self::MurmurHash2),
1445 _ => None,
1446 }
1447 }
1448 }
1449 }
1450 impl ::prost::Name for RingHashLbConfig {
1451 const NAME: &'static str = "RingHashLbConfig";
1452 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1453 fn full_name() -> ::prost::alloc::string::String {
1454 "envoy.config.cluster.v3.Cluster.RingHashLbConfig".into()
1455 }
1456 fn type_url() -> ::prost::alloc::string::String {
1457 "type.googleapis.com/envoy.config.cluster.v3.Cluster.RingHashLbConfig".into()
1458 }
1459 }
1460 /// Specific configuration for the :ref:`Maglev<arch_overview_load_balancing_types_maglev>`
1461 /// load balancing policy.
1462 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1463 pub struct MaglevLbConfig {
1464 /// The table size for Maglev hashing. Maglev aims for "minimal disruption" rather than an absolute guarantee.
1465 /// Minimal disruption means that when the set of upstream hosts change, a connection will likely be sent to the same
1466 /// upstream as it was before. Increasing the table size reduces the amount of disruption.
1467 /// The table size must be prime number limited to 5000011. If it is not specified, the default is 65537.
1468 #[prost(message, optional, tag = "1")]
1469 pub table_size: ::core::option::Option<
1470 super::super::super::super::super::google::protobuf::UInt64Value,
1471 >,
1472 }
1473 impl ::prost::Name for MaglevLbConfig {
1474 const NAME: &'static str = "MaglevLbConfig";
1475 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1476 fn full_name() -> ::prost::alloc::string::String {
1477 "envoy.config.cluster.v3.Cluster.MaglevLbConfig".into()
1478 }
1479 fn type_url() -> ::prost::alloc::string::String {
1480 "type.googleapis.com/envoy.config.cluster.v3.Cluster.MaglevLbConfig".into()
1481 }
1482 }
1483 /// Specific configuration for the
1484 /// :ref:`Original Destination <arch_overview_load_balancing_types_original_destination>`
1485 /// load balancing policy.
1486 /// \[#extension: envoy.clusters.original_dst\]
1487 #[derive(Clone, PartialEq, ::prost::Message)]
1488 pub struct OriginalDstLbConfig {
1489 /// When true, a HTTP header can be used to override the original dst address. The default header is
1490 /// :ref:`x-envoy-original-dst-host <config_http_conn_man_headers_x-envoy-original-dst-host>`.
1491 ///
1492 /// .. attention::
1493 ///
1494 /// This header isn't sanitized by default, so enabling this feature allows HTTP clients to
1495 /// route traffic to arbitrary hosts and/or ports, which may have serious security
1496 /// consequences.
1497 ///
1498 /// .. note::
1499 ///
1500 /// If the header appears multiple times only the first value is used.
1501 #[prost(bool, tag = "1")]
1502 pub use_http_header: bool,
1503 /// The http header to override destination address if :ref:`use_http_header <envoy_v3_api_field_config.cluster.v3.Cluster.OriginalDstLbConfig.use_http_header>`.
1504 /// is set to true. If the value is empty, :ref:`x-envoy-original-dst-host <config_http_conn_man_headers_x-envoy-original-dst-host>` will be used.
1505 #[prost(string, tag = "2")]
1506 pub http_header_name: ::prost::alloc::string::String,
1507 /// The port to override for the original dst address. This port
1508 /// will take precedence over filter state and header override ports
1509 #[prost(message, optional, tag = "3")]
1510 pub upstream_port_override: ::core::option::Option<
1511 super::super::super::super::super::google::protobuf::UInt32Value,
1512 >,
1513 /// The dynamic metadata key to override destination address.
1514 /// First the request metadata is considered, then the connection one.
1515 #[prost(message, optional, tag = "4")]
1516 pub metadata_key: ::core::option::Option<
1517 super::super::super::super::r#type::metadata::v3::MetadataKey,
1518 >,
1519 }
1520 impl ::prost::Name for OriginalDstLbConfig {
1521 const NAME: &'static str = "OriginalDstLbConfig";
1522 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1523 fn full_name() -> ::prost::alloc::string::String {
1524 "envoy.config.cluster.v3.Cluster.OriginalDstLbConfig".into()
1525 }
1526 fn type_url() -> ::prost::alloc::string::String {
1527 "type.googleapis.com/envoy.config.cluster.v3.Cluster.OriginalDstLbConfig"
1528 .into()
1529 }
1530 }
1531 /// Common configuration for all load balancer implementations.
1532 /// \[#next-free-field: 9\]
1533 #[derive(Clone, PartialEq, ::prost::Message)]
1534 pub struct CommonLbConfig {
1535 /// Configures the :ref:`healthy panic threshold <arch_overview_load_balancing_panic_threshold>`.
1536 /// If not specified, the default is 50%.
1537 /// To disable panic mode, set to 0%.
1538 ///
1539 /// .. note::
1540 /// The specified percent will be truncated to the nearest 1%.
1541 #[prost(message, optional, tag = "1")]
1542 pub healthy_panic_threshold: ::core::option::Option<
1543 super::super::super::super::r#type::v3::Percent,
1544 >,
1545 /// If set, all health check/weight/metadata updates that happen within this duration will be
1546 /// merged and delivered in one shot when the duration expires. The start of the duration is when
1547 /// the first update happens. This is useful for big clusters, with potentially noisy deploys
1548 /// that might trigger excessive CPU usage due to a constant stream of healthcheck state changes
1549 /// or metadata updates. The first set of updates to be seen apply immediately (e.g.: a new
1550 /// cluster). Please always keep in mind that the use of sandbox technologies may change this
1551 /// behavior.
1552 ///
1553 /// If this is not set, we default to a merge window of 1000ms. To disable it, set the merge
1554 /// window to 0.
1555 ///
1556 /// Note: merging does not apply to cluster membership changes (e.g.: adds/removes); this is
1557 /// because merging those updates isn't currently safe. See
1558 /// <https://github.com/envoyproxy/envoy/pull/3941.>
1559 #[prost(message, optional, tag = "4")]
1560 pub update_merge_window: ::core::option::Option<
1561 super::super::super::super::super::google::protobuf::Duration,
1562 >,
1563 /// If set to true, Envoy will :ref:`exclude <arch_overview_load_balancing_excluded>` new hosts
1564 /// when computing load balancing weights until they have been health checked for the first time.
1565 /// This will have no effect unless active health checking is also configured.
1566 #[prost(bool, tag = "5")]
1567 pub ignore_new_hosts_until_first_hc: bool,
1568 /// If set to ``true``, the cluster manager will drain all existing
1569 /// connections to upstream hosts whenever hosts are added or removed from the cluster.
1570 #[prost(bool, tag = "6")]
1571 pub close_connections_on_host_set_change: bool,
1572 /// Common Configuration for all consistent hashing load balancers (MaglevLb, RingHashLb, etc.)
1573 #[prost(message, optional, tag = "7")]
1574 pub consistent_hashing_lb_config: ::core::option::Option<
1575 common_lb_config::ConsistentHashingLbConfig,
1576 >,
1577 /// This controls what hosts are considered valid when using
1578 /// :ref:`host overrides <arch_overview_load_balancing_override_host>`, which is used by some
1579 /// filters to modify the load balancing decision.
1580 ///
1581 /// If this is unset then \[UNKNOWN, HEALTHY, DEGRADED\] will be applied by default. If this is
1582 /// set with an empty set of statuses then host overrides will be ignored by the load balancing.
1583 #[prost(message, optional, tag = "8")]
1584 pub override_host_status: ::core::option::Option<
1585 super::super::super::core::v3::HealthStatusSet,
1586 >,
1587 #[prost(oneof = "common_lb_config::LocalityConfigSpecifier", tags = "2, 3")]
1588 pub locality_config_specifier: ::core::option::Option<
1589 common_lb_config::LocalityConfigSpecifier,
1590 >,
1591 }
1592 /// Nested message and enum types in `CommonLbConfig`.
1593 pub mod common_lb_config {
1594 /// Configuration for :ref:`zone aware routing
1595 /// <arch_overview_load_balancing_zone_aware_routing>`.
1596 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1597 pub struct ZoneAwareLbConfig {
1598 /// Configures percentage of requests that will be considered for zone aware routing
1599 /// if zone aware routing is configured. If not specified, the default is 100%.
1600 /// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
1601 /// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
1602 #[prost(message, optional, tag = "1")]
1603 pub routing_enabled: ::core::option::Option<
1604 super::super::super::super::super::r#type::v3::Percent,
1605 >,
1606 /// Configures minimum upstream cluster size required for zone aware routing
1607 /// If upstream cluster size is less than specified, zone aware routing is not performed
1608 /// even if zone aware routing is configured. If not specified, the default is 6.
1609 /// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
1610 /// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
1611 #[prost(message, optional, tag = "2")]
1612 pub min_cluster_size: ::core::option::Option<
1613 super::super::super::super::super::super::google::protobuf::UInt64Value,
1614 >,
1615 /// If set to true, Envoy will not consider any hosts when the cluster is in :ref:`panic
1616 /// mode<arch_overview_load_balancing_panic_threshold>`. Instead, the cluster will fail all
1617 /// requests as if all hosts are unhealthy. This can help avoid potentially overwhelming a
1618 /// failing service.
1619 #[prost(bool, tag = "3")]
1620 pub fail_traffic_on_panic: bool,
1621 }
1622 impl ::prost::Name for ZoneAwareLbConfig {
1623 const NAME: &'static str = "ZoneAwareLbConfig";
1624 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1625 fn full_name() -> ::prost::alloc::string::String {
1626 "envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig".into()
1627 }
1628 fn type_url() -> ::prost::alloc::string::String {
1629 "type.googleapis.com/envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig"
1630 .into()
1631 }
1632 }
1633 /// Configuration for :ref:`locality weighted load balancing
1634 /// <arch_overview_load_balancing_locality_weighted_lb>`
1635 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1636 pub struct LocalityWeightedLbConfig {}
1637 impl ::prost::Name for LocalityWeightedLbConfig {
1638 const NAME: &'static str = "LocalityWeightedLbConfig";
1639 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1640 fn full_name() -> ::prost::alloc::string::String {
1641 "envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig"
1642 .into()
1643 }
1644 fn type_url() -> ::prost::alloc::string::String {
1645 "type.googleapis.com/envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig"
1646 .into()
1647 }
1648 }
1649 /// Common Configuration for all consistent hashing load balancers (MaglevLb, RingHashLb, etc.)
1650 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1651 pub struct ConsistentHashingLbConfig {
1652 /// If set to ``true``, the cluster will use hostname instead of the resolved
1653 /// address as the key to consistently hash to an upstream host. Only valid for StrictDNS clusters with hostnames which resolve to a single IP address.
1654 #[prost(bool, tag = "1")]
1655 pub use_hostname_for_hashing: bool,
1656 /// Configures percentage of average cluster load to bound per upstream host. For example, with a value of 150
1657 /// no upstream host will get a load more than 1.5 times the average load of all the hosts in the cluster.
1658 /// If not specified, the load is not bounded for any upstream host. Typical value for this parameter is between 120 and 200.
1659 /// Minimum is 100.
1660 ///
1661 /// Applies to both Ring Hash and Maglev load balancers.
1662 ///
1663 /// This is implemented based on the method described in the paper <https://arxiv.org/abs/1608.01350.> For the specified
1664 /// ``hash_balance_factor``, requests to any upstream host are capped at ``hash_balance_factor/100`` times the average number of requests
1665 /// across the cluster. When a request arrives for an upstream host that is currently serving at its max capacity, linear probing
1666 /// is used to identify an eligible host. Further, the linear probe is implemented using a random jump in hosts ring/table to identify
1667 /// the eligible host (this technique is as described in the paper <https://arxiv.org/abs/1908.08762> - the random jump avoids the
1668 /// cascading overflow effect when choosing the next host in the ring/table).
1669 ///
1670 /// If weights are specified on the hosts, they are respected.
1671 ///
1672 /// This is an O(N) algorithm, unlike other load balancers. Using a lower ``hash_balance_factor`` results in more hosts
1673 /// being probed, so use a higher value if you require better performance.
1674 #[prost(message, optional, tag = "2")]
1675 pub hash_balance_factor: ::core::option::Option<
1676 super::super::super::super::super::super::google::protobuf::UInt32Value,
1677 >,
1678 }
1679 impl ::prost::Name for ConsistentHashingLbConfig {
1680 const NAME: &'static str = "ConsistentHashingLbConfig";
1681 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1682 fn full_name() -> ::prost::alloc::string::String {
1683 "envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig"
1684 .into()
1685 }
1686 fn type_url() -> ::prost::alloc::string::String {
1687 "type.googleapis.com/envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig"
1688 .into()
1689 }
1690 }
1691 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1692 pub enum LocalityConfigSpecifier {
1693 #[prost(message, tag = "2")]
1694 ZoneAwareLbConfig(ZoneAwareLbConfig),
1695 #[prost(message, tag = "3")]
1696 LocalityWeightedLbConfig(LocalityWeightedLbConfig),
1697 }
1698 }
1699 impl ::prost::Name for CommonLbConfig {
1700 const NAME: &'static str = "CommonLbConfig";
1701 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1702 fn full_name() -> ::prost::alloc::string::String {
1703 "envoy.config.cluster.v3.Cluster.CommonLbConfig".into()
1704 }
1705 fn type_url() -> ::prost::alloc::string::String {
1706 "type.googleapis.com/envoy.config.cluster.v3.Cluster.CommonLbConfig".into()
1707 }
1708 }
1709 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1710 pub struct RefreshRate {
1711 /// Specifies the base interval between refreshes. This parameter is required and must be greater
1712 /// than zero and less than
1713 /// :ref:`max_interval <envoy_v3_api_field_config.cluster.v3.Cluster.RefreshRate.max_interval>`.
1714 #[prost(message, optional, tag = "1")]
1715 pub base_interval: ::core::option::Option<
1716 super::super::super::super::super::google::protobuf::Duration,
1717 >,
1718 /// Specifies the maximum interval between refreshes. This parameter is optional, but must be
1719 /// greater than or equal to the
1720 /// :ref:`base_interval <envoy_v3_api_field_config.cluster.v3.Cluster.RefreshRate.base_interval>` if set. The default
1721 /// is 10 times the :ref:`base_interval <envoy_v3_api_field_config.cluster.v3.Cluster.RefreshRate.base_interval>`.
1722 #[prost(message, optional, tag = "2")]
1723 pub max_interval: ::core::option::Option<
1724 super::super::super::super::super::google::protobuf::Duration,
1725 >,
1726 }
1727 impl ::prost::Name for RefreshRate {
1728 const NAME: &'static str = "RefreshRate";
1729 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1730 fn full_name() -> ::prost::alloc::string::String {
1731 "envoy.config.cluster.v3.Cluster.RefreshRate".into()
1732 }
1733 fn type_url() -> ::prost::alloc::string::String {
1734 "type.googleapis.com/envoy.config.cluster.v3.Cluster.RefreshRate".into()
1735 }
1736 }
1737 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1738 pub struct PreconnectPolicy {
1739 /// Indicates how many streams (rounded up) can be anticipated per-upstream for each
1740 /// incoming stream. This is useful for high-QPS or latency-sensitive services. Preconnecting
1741 /// will only be done if the upstream is healthy and the cluster has traffic.
1742 ///
1743 /// For example if this is 2, for an incoming HTTP/1.1 stream, 2 connections will be
1744 /// established, one for the new incoming stream, and one for a presumed follow-up stream. For
1745 /// HTTP/2, only one connection would be established by default as one connection can
1746 /// serve both the original and presumed follow-up stream.
1747 ///
1748 /// In steady state for non-multiplexed connections a value of 1.5 would mean if there were 100
1749 /// active streams, there would be 100 connections in use, and 50 connections preconnected.
1750 /// This might be a useful value for something like short lived single-use connections,
1751 /// for example proxying HTTP/1.1 if keep-alive were false and each stream resulted in connection
1752 /// termination. It would likely be overkill for long lived connections, such as TCP proxying SMTP
1753 /// or regular HTTP/1.1 with keep-alive. For long lived traffic, a value of 1.05 would be more
1754 /// reasonable, where for every 100 connections, 5 preconnected connections would be in the queue
1755 /// in case of unexpected disconnects where the connection could not be reused.
1756 ///
1757 /// If this value is not set, or set explicitly to one, Envoy will fetch as many connections
1758 /// as needed to serve streams in flight. This means in steady state if a connection is torn down,
1759 /// a subsequent streams will pay an upstream-rtt latency penalty waiting for a new connection.
1760 ///
1761 /// This is limited somewhat arbitrarily to 3 because preconnecting too aggressively can
1762 /// harm latency more than the preconnecting helps.
1763 #[prost(message, optional, tag = "1")]
1764 pub per_upstream_preconnect_ratio: ::core::option::Option<
1765 super::super::super::super::super::google::protobuf::DoubleValue,
1766 >,
1767 /// Indicates how many streams (rounded up) can be anticipated across a cluster for each
1768 /// stream, useful for low QPS services. This is currently supported for a subset of
1769 /// deterministic non-hash-based load-balancing algorithms (weighted round robin, random).
1770 /// Unlike ``per_upstream_preconnect_ratio`` this preconnects across the upstream instances in a
1771 /// cluster, doing best effort predictions of what upstream would be picked next and
1772 /// pre-establishing a connection.
1773 ///
1774 /// Preconnecting will be limited to one preconnect per configured upstream in the cluster and will
1775 /// only be done if there are healthy upstreams and the cluster has traffic.
1776 ///
1777 /// For example if preconnecting is set to 2 for a round robin HTTP/2 cluster, on the first
1778 /// incoming stream, 2 connections will be preconnected - one to the first upstream for this
1779 /// cluster, one to the second on the assumption there will be a follow-up stream.
1780 ///
1781 /// If this value is not set, or set explicitly to one, Envoy will fetch as many connections
1782 /// as needed to serve streams in flight, so during warm up and in steady state if a connection
1783 /// is closed (and per_upstream_preconnect_ratio is not set), there will be a latency hit for
1784 /// connection establishment.
1785 ///
1786 /// If both this and preconnect_ratio are set, Envoy will make sure both predicted needs are met,
1787 /// basically preconnecting max(predictive-preconnect, per-upstream-preconnect), for each
1788 /// upstream.
1789 #[prost(message, optional, tag = "2")]
1790 pub predictive_preconnect_ratio: ::core::option::Option<
1791 super::super::super::super::super::google::protobuf::DoubleValue,
1792 >,
1793 }
1794 impl ::prost::Name for PreconnectPolicy {
1795 const NAME: &'static str = "PreconnectPolicy";
1796 const PACKAGE: &'static str = "envoy.config.cluster.v3";
1797 fn full_name() -> ::prost::alloc::string::String {
1798 "envoy.config.cluster.v3.Cluster.PreconnectPolicy".into()
1799 }
1800 fn type_url() -> ::prost::alloc::string::String {
1801 "type.googleapis.com/envoy.config.cluster.v3.Cluster.PreconnectPolicy".into()
1802 }
1803 }
1804 /// Refer to :ref:`service discovery type <arch_overview_service_discovery_types>`
1805 /// for an explanation on each type.
1806 #[derive(
1807 Clone,
1808 Copy,
1809 Debug,
1810 PartialEq,
1811 Eq,
1812 Hash,
1813 PartialOrd,
1814 Ord,
1815 ::prost::Enumeration
1816 )]
1817 #[repr(i32)]
1818 pub enum DiscoveryType {
1819 /// Refer to the :ref:`static discovery type<arch_overview_service_discovery_types_static>`
1820 /// for an explanation.
1821 Static = 0,
1822 /// Refer to the :ref:`strict DNS discovery
1823 /// type<arch_overview_service_discovery_types_strict_dns>`
1824 /// for an explanation.
1825 StrictDns = 1,
1826 /// Refer to the :ref:`logical DNS discovery
1827 /// type<arch_overview_service_discovery_types_logical_dns>`
1828 /// for an explanation.
1829 LogicalDns = 2,
1830 /// Refer to the :ref:`service discovery type<arch_overview_service_discovery_types_eds>`
1831 /// for an explanation.
1832 Eds = 3,
1833 /// Refer to the :ref:`original destination discovery
1834 /// type<arch_overview_service_discovery_types_original_destination>`
1835 /// for an explanation.
1836 OriginalDst = 4,
1837 }
1838 impl DiscoveryType {
1839 /// String value of the enum field names used in the ProtoBuf definition.
1840 ///
1841 /// The values are not transformed in any way and thus are considered stable
1842 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1843 pub fn as_str_name(&self) -> &'static str {
1844 match self {
1845 Self::Static => "STATIC",
1846 Self::StrictDns => "STRICT_DNS",
1847 Self::LogicalDns => "LOGICAL_DNS",
1848 Self::Eds => "EDS",
1849 Self::OriginalDst => "ORIGINAL_DST",
1850 }
1851 }
1852 /// Creates an enum from field names used in the ProtoBuf definition.
1853 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1854 match value {
1855 "STATIC" => Some(Self::Static),
1856 "STRICT_DNS" => Some(Self::StrictDns),
1857 "LOGICAL_DNS" => Some(Self::LogicalDns),
1858 "EDS" => Some(Self::Eds),
1859 "ORIGINAL_DST" => Some(Self::OriginalDst),
1860 _ => None,
1861 }
1862 }
1863 }
1864 /// Refer to :ref:`load balancer type <arch_overview_load_balancing_types>` architecture
1865 /// overview section for information on each type.
1866 #[derive(
1867 Clone,
1868 Copy,
1869 Debug,
1870 PartialEq,
1871 Eq,
1872 Hash,
1873 PartialOrd,
1874 Ord,
1875 ::prost::Enumeration
1876 )]
1877 #[repr(i32)]
1878 pub enum LbPolicy {
1879 /// Refer to the :ref:`round robin load balancing
1880 /// policy<arch_overview_load_balancing_types_round_robin>`
1881 /// for an explanation.
1882 RoundRobin = 0,
1883 /// Refer to the :ref:`least request load balancing
1884 /// policy<arch_overview_load_balancing_types_least_request>`
1885 /// for an explanation.
1886 LeastRequest = 1,
1887 /// Refer to the :ref:`ring hash load balancing
1888 /// policy<arch_overview_load_balancing_types_ring_hash>`
1889 /// for an explanation.
1890 RingHash = 2,
1891 /// Refer to the :ref:`random load balancing
1892 /// policy<arch_overview_load_balancing_types_random>`
1893 /// for an explanation.
1894 Random = 3,
1895 /// Refer to the :ref:`Maglev load balancing policy<arch_overview_load_balancing_types_maglev>`
1896 /// for an explanation.
1897 Maglev = 5,
1898 /// This load balancer type must be specified if the configured cluster provides a cluster
1899 /// specific load balancer. Consult the configured cluster's documentation for whether to set
1900 /// this option or not.
1901 ClusterProvided = 6,
1902 /// Use the new :ref:`load_balancing_policy
1903 /// <envoy_v3_api_field_config.cluster.v3.Cluster.load_balancing_policy>` field to determine the LB policy.
1904 /// This has been deprecated in favor of using the :ref:`load_balancing_policy
1905 /// <envoy_v3_api_field_config.cluster.v3.Cluster.load_balancing_policy>` field without
1906 /// setting any value in :ref:`lb_policy<envoy_v3_api_field_config.cluster.v3.Cluster.lb_policy>`.
1907 LoadBalancingPolicyConfig = 7,
1908 }
1909 impl LbPolicy {
1910 /// String value of the enum field names used in the ProtoBuf definition.
1911 ///
1912 /// The values are not transformed in any way and thus are considered stable
1913 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1914 pub fn as_str_name(&self) -> &'static str {
1915 match self {
1916 Self::RoundRobin => "ROUND_ROBIN",
1917 Self::LeastRequest => "LEAST_REQUEST",
1918 Self::RingHash => "RING_HASH",
1919 Self::Random => "RANDOM",
1920 Self::Maglev => "MAGLEV",
1921 Self::ClusterProvided => "CLUSTER_PROVIDED",
1922 Self::LoadBalancingPolicyConfig => "LOAD_BALANCING_POLICY_CONFIG",
1923 }
1924 }
1925 /// Creates an enum from field names used in the ProtoBuf definition.
1926 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1927 match value {
1928 "ROUND_ROBIN" => Some(Self::RoundRobin),
1929 "LEAST_REQUEST" => Some(Self::LeastRequest),
1930 "RING_HASH" => Some(Self::RingHash),
1931 "RANDOM" => Some(Self::Random),
1932 "MAGLEV" => Some(Self::Maglev),
1933 "CLUSTER_PROVIDED" => Some(Self::ClusterProvided),
1934 "LOAD_BALANCING_POLICY_CONFIG" => Some(Self::LoadBalancingPolicyConfig),
1935 _ => None,
1936 }
1937 }
1938 }
1939 /// When V4_ONLY is selected, the DNS resolver will only perform a lookup for
1940 /// addresses in the IPv4 family. If V6_ONLY is selected, the DNS resolver will
1941 /// only perform a lookup for addresses in the IPv6 family. If AUTO is
1942 /// specified, the DNS resolver will first perform a lookup for addresses in
1943 /// the IPv6 family and fallback to a lookup for addresses in the IPv4 family.
1944 /// This is semantically equivalent to a non-existent V6_PREFERRED option.
1945 /// AUTO is a legacy name that is more opaque than
1946 /// necessary and will be deprecated in favor of V6_PREFERRED in a future major version of the API.
1947 /// If V4_PREFERRED is specified, the DNS resolver will first perform a lookup for addresses in the
1948 /// IPv4 family and fallback to a lookup for addresses in the IPv6 family. i.e., the callback
1949 /// target will only get v6 addresses if there were NO v4 addresses to return.
1950 /// If ALL is specified, the DNS resolver will perform a lookup for both IPv4 and IPv6 families,
1951 /// and return all resolved addresses. When this is used, Happy Eyeballs will be enabled for
1952 /// upstream connections. Refer to :ref:`Happy Eyeballs Support <arch_overview_happy_eyeballs>`
1953 /// for more information.
1954 /// For cluster types other than
1955 /// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>` and
1956 /// :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
1957 /// this setting is
1958 /// ignored.
1959 /// \[#next-major-version: deprecate AUTO in favor of a V6_PREFERRED option.\]
1960 #[derive(
1961 Clone,
1962 Copy,
1963 Debug,
1964 PartialEq,
1965 Eq,
1966 Hash,
1967 PartialOrd,
1968 Ord,
1969 ::prost::Enumeration
1970 )]
1971 #[repr(i32)]
1972 pub enum DnsLookupFamily {
1973 Auto = 0,
1974 V4Only = 1,
1975 V6Only = 2,
1976 V4Preferred = 3,
1977 All = 4,
1978 }
1979 impl DnsLookupFamily {
1980 /// String value of the enum field names used in the ProtoBuf definition.
1981 ///
1982 /// The values are not transformed in any way and thus are considered stable
1983 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1984 pub fn as_str_name(&self) -> &'static str {
1985 match self {
1986 Self::Auto => "AUTO",
1987 Self::V4Only => "V4_ONLY",
1988 Self::V6Only => "V6_ONLY",
1989 Self::V4Preferred => "V4_PREFERRED",
1990 Self::All => "ALL",
1991 }
1992 }
1993 /// Creates an enum from field names used in the ProtoBuf definition.
1994 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1995 match value {
1996 "AUTO" => Some(Self::Auto),
1997 "V4_ONLY" => Some(Self::V4Only),
1998 "V6_ONLY" => Some(Self::V6Only),
1999 "V4_PREFERRED" => Some(Self::V4Preferred),
2000 "ALL" => Some(Self::All),
2001 _ => None,
2002 }
2003 }
2004 }
2005 #[derive(
2006 Clone,
2007 Copy,
2008 Debug,
2009 PartialEq,
2010 Eq,
2011 Hash,
2012 PartialOrd,
2013 Ord,
2014 ::prost::Enumeration
2015 )]
2016 #[repr(i32)]
2017 pub enum ClusterProtocolSelection {
2018 /// Cluster can only operate on one of the possible upstream protocols (HTTP1.1, HTTP2).
2019 /// If :ref:`http2_protocol_options <envoy_v3_api_field_config.cluster.v3.Cluster.http2_protocol_options>` are
2020 /// present, HTTP2 will be used, otherwise HTTP1.1 will be used.
2021 UseConfiguredProtocol = 0,
2022 /// Use HTTP1.1 or HTTP2, depending on which one is used on the downstream connection.
2023 UseDownstreamProtocol = 1,
2024 }
2025 impl ClusterProtocolSelection {
2026 /// String value of the enum field names used in the ProtoBuf definition.
2027 ///
2028 /// The values are not transformed in any way and thus are considered stable
2029 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2030 pub fn as_str_name(&self) -> &'static str {
2031 match self {
2032 Self::UseConfiguredProtocol => "USE_CONFIGURED_PROTOCOL",
2033 Self::UseDownstreamProtocol => "USE_DOWNSTREAM_PROTOCOL",
2034 }
2035 }
2036 /// Creates an enum from field names used in the ProtoBuf definition.
2037 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2038 match value {
2039 "USE_CONFIGURED_PROTOCOL" => Some(Self::UseConfiguredProtocol),
2040 "USE_DOWNSTREAM_PROTOCOL" => Some(Self::UseDownstreamProtocol),
2041 _ => None,
2042 }
2043 }
2044 }
2045 #[derive(Clone, PartialEq, ::prost::Oneof)]
2046 pub enum ClusterDiscoveryType {
2047 /// The :ref:`service discovery type <arch_overview_service_discovery_types>`
2048 /// to use for resolving the cluster.
2049 #[prost(enumeration = "DiscoveryType", tag = "2")]
2050 Type(i32),
2051 /// The custom cluster type.
2052 #[prost(message, tag = "38")]
2053 ClusterType(CustomClusterType),
2054 }
2055 /// Optional configuration for the load balancing algorithm selected by
2056 /// LbPolicy. Currently only
2057 /// :ref:`RING_HASH<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.RING_HASH>`,
2058 /// :ref:`MAGLEV<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.MAGLEV>` and
2059 /// :ref:`LEAST_REQUEST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbPolicy.LEAST_REQUEST>`
2060 /// has additional configuration options.
2061 /// Specifying ring_hash_lb_config or maglev_lb_config or least_request_lb_config without setting the corresponding
2062 /// LbPolicy will generate an error at runtime.
2063 #[derive(Clone, PartialEq, ::prost::Oneof)]
2064 pub enum LbConfig {
2065 /// Optional configuration for the Ring Hash load balancing policy.
2066 #[prost(message, tag = "23")]
2067 RingHashLbConfig(RingHashLbConfig),
2068 /// Optional configuration for the Maglev load balancing policy.
2069 #[prost(message, tag = "52")]
2070 MaglevLbConfig(MaglevLbConfig),
2071 /// Optional configuration for the Original Destination load balancing policy.
2072 #[prost(message, tag = "34")]
2073 OriginalDstLbConfig(OriginalDstLbConfig),
2074 /// Optional configuration for the LeastRequest load balancing policy.
2075 #[prost(message, tag = "37")]
2076 LeastRequestLbConfig(LeastRequestLbConfig),
2077 /// Optional configuration for the RoundRobin load balancing policy.
2078 #[prost(message, tag = "56")]
2079 RoundRobinLbConfig(RoundRobinLbConfig),
2080 }
2081}
2082impl ::prost::Name for Cluster {
2083 const NAME: &'static str = "Cluster";
2084 const PACKAGE: &'static str = "envoy.config.cluster.v3";
2085 fn full_name() -> ::prost::alloc::string::String {
2086 "envoy.config.cluster.v3.Cluster".into()
2087 }
2088 fn type_url() -> ::prost::alloc::string::String {
2089 "type.googleapis.com/envoy.config.cluster.v3.Cluster".into()
2090 }
2091}
2092/// Extensible load balancing policy configuration.
2093///
2094/// Every LB policy defined via this mechanism will be identified via a unique name using reverse
2095/// DNS notation. If the policy needs configuration parameters, it must define a message for its
2096/// own configuration, which will be stored in the config field. The name of the policy will tell
2097/// clients which type of message they should expect to see in the config field.
2098///
2099/// Note that there are cases where it is useful to be able to independently select LB policies
2100/// for choosing a locality and for choosing an endpoint within that locality. For example, a
2101/// given deployment may always use the same policy to choose the locality, but for choosing the
2102/// endpoint within the locality, some clusters may use weighted-round-robin, while others may
2103/// use some sort of session-based balancing.
2104///
2105/// This can be accomplished via hierarchical LB policies, where the parent LB policy creates a
2106/// child LB policy for each locality. For each request, the parent chooses the locality and then
2107/// delegates to the child policy for that locality to choose the endpoint within the locality.
2108///
2109/// To facilitate this, the config message for the top-level LB policy may include a field of
2110/// type LoadBalancingPolicy that specifies the child policy.
2111#[derive(Clone, PartialEq, ::prost::Message)]
2112pub struct LoadBalancingPolicy {
2113 /// Each client will iterate over the list in order and stop at the first policy that it
2114 /// supports. This provides a mechanism for starting to use new LB policies that are not yet
2115 /// supported by all clients.
2116 #[prost(message, repeated, tag = "1")]
2117 pub policies: ::prost::alloc::vec::Vec<load_balancing_policy::Policy>,
2118}
2119/// Nested message and enum types in `LoadBalancingPolicy`.
2120pub mod load_balancing_policy {
2121 #[derive(Clone, PartialEq, ::prost::Message)]
2122 pub struct Policy {
2123 /// \[#extension-category: envoy.load_balancing_policies\]
2124 #[prost(message, optional, tag = "4")]
2125 pub typed_extension_config: ::core::option::Option<
2126 super::super::super::core::v3::TypedExtensionConfig,
2127 >,
2128 }
2129 impl ::prost::Name for Policy {
2130 const NAME: &'static str = "Policy";
2131 const PACKAGE: &'static str = "envoy.config.cluster.v3";
2132 fn full_name() -> ::prost::alloc::string::String {
2133 "envoy.config.cluster.v3.LoadBalancingPolicy.Policy".into()
2134 }
2135 fn type_url() -> ::prost::alloc::string::String {
2136 "type.googleapis.com/envoy.config.cluster.v3.LoadBalancingPolicy.Policy"
2137 .into()
2138 }
2139 }
2140}
2141impl ::prost::Name for LoadBalancingPolicy {
2142 const NAME: &'static str = "LoadBalancingPolicy";
2143 const PACKAGE: &'static str = "envoy.config.cluster.v3";
2144 fn full_name() -> ::prost::alloc::string::String {
2145 "envoy.config.cluster.v3.LoadBalancingPolicy".into()
2146 }
2147 fn type_url() -> ::prost::alloc::string::String {
2148 "type.googleapis.com/envoy.config.cluster.v3.LoadBalancingPolicy".into()
2149 }
2150}
2151#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2152pub struct UpstreamConnectionOptions {
2153 /// If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives.
2154 #[prost(message, optional, tag = "1")]
2155 pub tcp_keepalive: ::core::option::Option<super::super::core::v3::TcpKeepalive>,
2156 /// If enabled, associates the interface name of the local address with the upstream connection.
2157 /// This can be used by extensions during processing of requests. The association mechanism is
2158 /// implementation specific. Defaults to false due to performance concerns.
2159 #[prost(bool, tag = "2")]
2160 pub set_local_interface_name_on_upstream_connections: bool,
2161 /// Configurations for happy eyeballs algorithm.
2162 /// Add configs for first_address_family_version and first_address_family_count
2163 /// when sorting destination ip addresses.
2164 #[prost(message, optional, tag = "3")]
2165 pub happy_eyeballs_config: ::core::option::Option<
2166 upstream_connection_options::HappyEyeballsConfig,
2167 >,
2168}
2169/// Nested message and enum types in `UpstreamConnectionOptions`.
2170pub mod upstream_connection_options {
2171 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
2172 pub struct HappyEyeballsConfig {
2173 /// Specify the IP address family to attempt connection first in happy
2174 /// eyeballs algorithm according to RFC8305#section-4.
2175 #[prost(enumeration = "FirstAddressFamilyVersion", tag = "1")]
2176 pub first_address_family_version: i32,
2177 /// Specify the number of addresses of the first_address_family_version being
2178 /// attempted for connection before the other address family.
2179 #[prost(message, optional, tag = "2")]
2180 pub first_address_family_count: ::core::option::Option<
2181 super::super::super::super::super::google::protobuf::UInt32Value,
2182 >,
2183 }
2184 impl ::prost::Name for HappyEyeballsConfig {
2185 const NAME: &'static str = "HappyEyeballsConfig";
2186 const PACKAGE: &'static str = "envoy.config.cluster.v3";
2187 fn full_name() -> ::prost::alloc::string::String {
2188 "envoy.config.cluster.v3.UpstreamConnectionOptions.HappyEyeballsConfig"
2189 .into()
2190 }
2191 fn type_url() -> ::prost::alloc::string::String {
2192 "type.googleapis.com/envoy.config.cluster.v3.UpstreamConnectionOptions.HappyEyeballsConfig"
2193 .into()
2194 }
2195 }
2196 #[derive(
2197 Clone,
2198 Copy,
2199 Debug,
2200 PartialEq,
2201 Eq,
2202 Hash,
2203 PartialOrd,
2204 Ord,
2205 ::prost::Enumeration
2206 )]
2207 #[repr(i32)]
2208 pub enum FirstAddressFamilyVersion {
2209 /// respect the native ranking of destination ip addresses returned from dns
2210 /// resolution
2211 Default = 0,
2212 V4 = 1,
2213 V6 = 2,
2214 }
2215 impl FirstAddressFamilyVersion {
2216 /// String value of the enum field names used in the ProtoBuf definition.
2217 ///
2218 /// The values are not transformed in any way and thus are considered stable
2219 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2220 pub fn as_str_name(&self) -> &'static str {
2221 match self {
2222 Self::Default => "DEFAULT",
2223 Self::V4 => "V4",
2224 Self::V6 => "V6",
2225 }
2226 }
2227 /// Creates an enum from field names used in the ProtoBuf definition.
2228 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2229 match value {
2230 "DEFAULT" => Some(Self::Default),
2231 "V4" => Some(Self::V4),
2232 "V6" => Some(Self::V6),
2233 _ => None,
2234 }
2235 }
2236 }
2237}
2238impl ::prost::Name for UpstreamConnectionOptions {
2239 const NAME: &'static str = "UpstreamConnectionOptions";
2240 const PACKAGE: &'static str = "envoy.config.cluster.v3";
2241 fn full_name() -> ::prost::alloc::string::String {
2242 "envoy.config.cluster.v3.UpstreamConnectionOptions".into()
2243 }
2244 fn type_url() -> ::prost::alloc::string::String {
2245 "type.googleapis.com/envoy.config.cluster.v3.UpstreamConnectionOptions".into()
2246 }
2247}
2248#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2249pub struct TrackClusterStats {
2250 /// If timeout_budgets is true, the :ref:`timeout budget histograms
2251 /// <config_cluster_manager_cluster_stats_timeout_budgets>` will be published for each
2252 /// request. These show what percentage of a request's per try and global timeout was used. A value
2253 /// of 0 would indicate that none of the timeout was used or that the timeout was infinite. A value
2254 /// of 100 would indicate that the request took the entirety of the timeout given to it.
2255 #[prost(bool, tag = "1")]
2256 pub timeout_budgets: bool,
2257 /// If request_response_sizes is true, then the :ref:`histograms
2258 /// <config_cluster_manager_cluster_stats_request_response_sizes>` tracking header and body sizes
2259 /// of requests and responses will be published.
2260 #[prost(bool, tag = "2")]
2261 pub request_response_sizes: bool,
2262 /// If true, some stats will be emitted per-endpoint, similar to the stats in admin ``/clusters``
2263 /// output.
2264 ///
2265 /// This does not currently output correct stats during a hot-restart.
2266 ///
2267 /// This is not currently implemented by all stat sinks.
2268 ///
2269 /// These stats do not honor filtering or tag extraction rules in :ref:`StatsConfig
2270 /// <envoy_v3_api_msg_config.metrics.v3.StatsConfig>` (but fixed-value tags are supported). Admin
2271 /// endpoint filtering is supported.
2272 ///
2273 /// This may not be used at the same time as
2274 /// :ref:`load_stats_config <envoy_v3_api_field_config.bootstrap.v3.ClusterManager.load_stats_config>`.
2275 #[prost(bool, tag = "3")]
2276 pub per_endpoint_stats: bool,
2277}
2278impl ::prost::Name for TrackClusterStats {
2279 const NAME: &'static str = "TrackClusterStats";
2280 const PACKAGE: &'static str = "envoy.config.cluster.v3";
2281 fn full_name() -> ::prost::alloc::string::String {
2282 "envoy.config.cluster.v3.TrackClusterStats".into()
2283 }
2284 fn type_url() -> ::prost::alloc::string::String {
2285 "type.googleapis.com/envoy.config.cluster.v3.TrackClusterStats".into()
2286 }
2287}