mirror of https://github.com/grpc/grpc-java.git
xds: import envoy proto for WRR (#9898)
This commit is contained in:
parent
e3bd5baeda
commit
4ef0200f6b
|
|
@ -802,6 +802,7 @@ public class XdsClientImplDataTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public void parseRouteAction_withHashPolicies() {
|
public void parseRouteAction_withHashPolicies() {
|
||||||
io.envoyproxy.envoy.config.route.v3.RouteAction proto =
|
io.envoyproxy.envoy.config.route.v3.RouteAction proto =
|
||||||
io.envoyproxy.envoy.config.route.v3.RouteAction.newBuilder()
|
io.envoyproxy.envoy.config.route.v3.RouteAction.newBuilder()
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
set -e
|
set -e
|
||||||
BRANCH=main
|
BRANCH=main
|
||||||
# import VERSION from the google internal copybara_version.txt for Envoy
|
# import VERSION from the google internal copybara_version.txt for Envoy
|
||||||
VERSION=2f99e0c9f83b6c91b42d215a148ed49ce0f174fd
|
VERSION=8affda4b71b05c9b272dbd031b7810418fb26211
|
||||||
GIT_REPO="https://github.com/envoyproxy/envoy.git"
|
GIT_REPO="https://github.com/envoyproxy/envoy.git"
|
||||||
GIT_BASE_DIR=envoy
|
GIT_BASE_DIR=envoy
|
||||||
SOURCE_PROTO_BASE_DIR=envoy/api
|
SOURCE_PROTO_BASE_DIR=envoy/api
|
||||||
|
|
@ -26,6 +26,7 @@ TARGET_PROTO_BASE_DIR=src/main/proto
|
||||||
# Sorted alphabetically.
|
# Sorted alphabetically.
|
||||||
FILES=(
|
FILES=(
|
||||||
envoy/admin/v3/config_dump.proto
|
envoy/admin/v3/config_dump.proto
|
||||||
|
envoy/admin/v3/config_dump_shared.proto
|
||||||
envoy/annotations/deprecation.proto
|
envoy/annotations/deprecation.proto
|
||||||
envoy/annotations/resource.proto
|
envoy/annotations/resource.proto
|
||||||
envoy/api/v2/auth/cert.proto
|
envoy/api/v2/auth/cert.proto
|
||||||
|
|
@ -120,6 +121,7 @@ envoy/config/trace/v3/dynamic_ot.proto
|
||||||
envoy/config/trace/v3/http_tracer.proto
|
envoy/config/trace/v3/http_tracer.proto
|
||||||
envoy/config/trace/v3/lightstep.proto
|
envoy/config/trace/v3/lightstep.proto
|
||||||
envoy/config/trace/v3/opencensus.proto
|
envoy/config/trace/v3/opencensus.proto
|
||||||
|
envoy/config/trace/v3/opentelemetry.proto
|
||||||
envoy/config/trace/v3/service.proto
|
envoy/config/trace/v3/service.proto
|
||||||
envoy/config/trace/v3/trace.proto
|
envoy/config/trace/v3/trace.proto
|
||||||
envoy/config/trace/v3/zipkin.proto
|
envoy/config/trace/v3/zipkin.proto
|
||||||
|
|
@ -129,6 +131,8 @@ envoy/extensions/filters/http/fault/v3/fault.proto
|
||||||
envoy/extensions/filters/http/rbac/v3/rbac.proto
|
envoy/extensions/filters/http/rbac/v3/rbac.proto
|
||||||
envoy/extensions/filters/http/router/v3/router.proto
|
envoy/extensions/filters/http/router/v3/router.proto
|
||||||
envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto
|
envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto
|
||||||
|
envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.proto
|
||||||
|
envoy/extensions/load_balancing_policies/common/v3/common.proto
|
||||||
envoy/extensions/load_balancing_policies/least_request/v3/least_request.proto
|
envoy/extensions/load_balancing_policies/least_request/v3/least_request.proto
|
||||||
envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.proto
|
envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.proto
|
||||||
envoy/extensions/load_balancing_policies/round_robin/v3/round_robin.proto
|
envoy/extensions/load_balancing_policies/round_robin/v3/round_robin.proto
|
||||||
|
|
@ -151,6 +155,7 @@ envoy/type/matcher/number.proto
|
||||||
envoy/type/matcher/path.proto
|
envoy/type/matcher/path.proto
|
||||||
envoy/type/matcher/regex.proto
|
envoy/type/matcher/regex.proto
|
||||||
envoy/type/matcher/string.proto
|
envoy/type/matcher/string.proto
|
||||||
|
envoy/type/matcher/v3/filter_state.proto
|
||||||
envoy/type/matcher/v3/metadata.proto
|
envoy/type/matcher/v3/metadata.proto
|
||||||
envoy/type/matcher/v3/node.proto
|
envoy/type/matcher/v3/node.proto
|
||||||
envoy/type/matcher/v3/number.proto
|
envoy/type/matcher/v3/number.proto
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ syntax = "proto3";
|
||||||
|
|
||||||
package envoy.admin.v3;
|
package envoy.admin.v3;
|
||||||
|
|
||||||
|
import "envoy/admin/v3/config_dump_shared.proto";
|
||||||
import "envoy/config/bootstrap/v3/bootstrap.proto";
|
import "envoy/config/bootstrap/v3/bootstrap.proto";
|
||||||
|
|
||||||
import "google/protobuf/any.proto";
|
import "google/protobuf/any.proto";
|
||||||
|
|
@ -18,31 +19,6 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: ConfigDump]
|
// [#protodoc-title: ConfigDump]
|
||||||
|
|
||||||
// Resource status from the view of a xDS client, which tells the synchronization
|
|
||||||
// status between the xDS client and the xDS server.
|
|
||||||
enum ClientResourceStatus {
|
|
||||||
// Resource status is not available/unknown.
|
|
||||||
UNKNOWN = 0;
|
|
||||||
|
|
||||||
// Client requested this resource but hasn't received any update from management
|
|
||||||
// server. The client will not fail requests, but will queue them until update
|
|
||||||
// arrives or the client times out waiting for the resource.
|
|
||||||
REQUESTED = 1;
|
|
||||||
|
|
||||||
// This resource has been requested by the client but has either not been
|
|
||||||
// delivered by the server or was previously delivered by the server and then
|
|
||||||
// subsequently removed from resources provided by the server. For more
|
|
||||||
// information, please refer to the :ref:`"Knowing When a Requested Resource
|
|
||||||
// Does Not Exist" <xds_protocol_resource_not_existed>` section.
|
|
||||||
DOES_NOT_EXIST = 2;
|
|
||||||
|
|
||||||
// Client received this resource and replied with ACK.
|
|
||||||
ACKED = 3;
|
|
||||||
|
|
||||||
// Client received this resource and replied with NACK.
|
|
||||||
NACKED = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The :ref:`/config_dump <operations_admin_interface_config_dump>` admin endpoint uses this wrapper
|
// The :ref:`/config_dump <operations_admin_interface_config_dump>` admin endpoint uses this wrapper
|
||||||
// message to maintain and serve arbitrary configuration information from any component in Envoy.
|
// message to maintain and serve arbitrary configuration information from any component in Envoy.
|
||||||
message ConfigDump {
|
message ConfigDump {
|
||||||
|
|
@ -54,15 +30,20 @@ message ConfigDump {
|
||||||
// The following configurations are currently supported and will be dumped in the order given
|
// The following configurations are currently supported and will be dumped in the order given
|
||||||
// below:
|
// below:
|
||||||
//
|
//
|
||||||
// * *bootstrap*: :ref:`BootstrapConfigDump <envoy_v3_api_msg_admin.v3.BootstrapConfigDump>`
|
// * ``bootstrap``: :ref:`BootstrapConfigDump <envoy_v3_api_msg_admin.v3.BootstrapConfigDump>`
|
||||||
// * *clusters*: :ref:`ClustersConfigDump <envoy_v3_api_msg_admin.v3.ClustersConfigDump>`
|
// * ``clusters``: :ref:`ClustersConfigDump <envoy_v3_api_msg_admin.v3.ClustersConfigDump>`
|
||||||
// * *endpoints*: :ref:`EndpointsConfigDump <envoy_v3_api_msg_admin.v3.EndpointsConfigDump>`
|
// * ``ecds_filter_http``: :ref:`EcdsConfigDump <envoy_v3_api_msg_admin.v3.EcdsConfigDump>`
|
||||||
// * *listeners*: :ref:`ListenersConfigDump <envoy_v3_api_msg_admin.v3.ListenersConfigDump>`
|
// * ``ecds_filter_tcp_listener``: :ref:`EcdsConfigDump <envoy_v3_api_msg_admin.v3.EcdsConfigDump>`
|
||||||
// * *scoped_routes*: :ref:`ScopedRoutesConfigDump <envoy_v3_api_msg_admin.v3.ScopedRoutesConfigDump>`
|
// * ``endpoints``: :ref:`EndpointsConfigDump <envoy_v3_api_msg_admin.v3.EndpointsConfigDump>`
|
||||||
// * *routes*: :ref:`RoutesConfigDump <envoy_v3_api_msg_admin.v3.RoutesConfigDump>`
|
// * ``listeners``: :ref:`ListenersConfigDump <envoy_v3_api_msg_admin.v3.ListenersConfigDump>`
|
||||||
// * *secrets*: :ref:`SecretsConfigDump <envoy_v3_api_msg_admin.v3.SecretsConfigDump>`
|
// * ``scoped_routes``: :ref:`ScopedRoutesConfigDump <envoy_v3_api_msg_admin.v3.ScopedRoutesConfigDump>`
|
||||||
|
// * ``routes``: :ref:`RoutesConfigDump <envoy_v3_api_msg_admin.v3.RoutesConfigDump>`
|
||||||
|
// * ``secrets``: :ref:`SecretsConfigDump <envoy_v3_api_msg_admin.v3.SecretsConfigDump>`
|
||||||
//
|
//
|
||||||
// EDS Configuration will only be dumped by using parameter `?include_eds`
|
// EDS Configuration will only be dumped by using parameter ``?include_eds``
|
||||||
|
//
|
||||||
|
// Currently ECDS is supported in HTTP and listener filters. Note, ECDS configuration for
|
||||||
|
// either HTTP or listener filter will only be dumped if it is actually configured.
|
||||||
//
|
//
|
||||||
// You can filter output with the resource and mask query parameters.
|
// You can filter output with the resource and mask query parameters.
|
||||||
// See :ref:`/config_dump?resource={} <operations_admin_interface_config_dump_by_resource>`,
|
// See :ref:`/config_dump?resource={} <operations_admin_interface_config_dump_by_resource>`,
|
||||||
|
|
@ -72,25 +53,6 @@ message ConfigDump {
|
||||||
repeated google.protobuf.Any configs = 1;
|
repeated google.protobuf.Any configs = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message UpdateFailureState {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.UpdateFailureState";
|
|
||||||
|
|
||||||
// What the component configuration would have been if the update had succeeded.
|
|
||||||
// This field may not be populated by xDS clients due to storage overhead.
|
|
||||||
google.protobuf.Any failed_configuration = 1;
|
|
||||||
|
|
||||||
// Time of the latest failed update attempt.
|
|
||||||
google.protobuf.Timestamp last_update_attempt = 2;
|
|
||||||
|
|
||||||
// Details about the last failed update attempt.
|
|
||||||
string details = 3;
|
|
||||||
|
|
||||||
// This is the version of the rejected resource.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
string version_info = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This message describes the bootstrap configuration that Envoy was started with. This includes
|
// This message describes the bootstrap configuration that Envoy was started with. This includes
|
||||||
// any CLI overrides that were merged. Bootstrap configuration information can be used to recreate
|
// any CLI overrides that were merged. Bootstrap configuration information can be used to recreate
|
||||||
// the static portions of an Envoy configuration by reusing the output as the bootstrap
|
// the static portions of an Envoy configuration by reusing the output as the bootstrap
|
||||||
|
|
@ -105,273 +67,6 @@ message BootstrapConfigDump {
|
||||||
google.protobuf.Timestamp last_updated = 2;
|
google.protobuf.Timestamp last_updated = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Envoy's listener manager fills this message with all currently known listeners. Listener
|
|
||||||
// configuration information can be used to recreate an Envoy configuration by populating all
|
|
||||||
// listeners as static listeners or by returning them in a LDS response.
|
|
||||||
message ListenersConfigDump {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ListenersConfigDump";
|
|
||||||
|
|
||||||
// Describes a statically loaded listener.
|
|
||||||
message StaticListener {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ListenersConfigDump.StaticListener";
|
|
||||||
|
|
||||||
// The listener config.
|
|
||||||
google.protobuf.Any listener = 1;
|
|
||||||
|
|
||||||
// The timestamp when the Listener was last successfully updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message DynamicListenerState {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ListenersConfigDump.DynamicListenerState";
|
|
||||||
|
|
||||||
// This is the per-resource version information. This version is currently taken from the
|
|
||||||
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time
|
|
||||||
// that the listener was loaded. In the future, discrete per-listener versions may be supported
|
|
||||||
// by the API.
|
|
||||||
string version_info = 1;
|
|
||||||
|
|
||||||
// The listener config.
|
|
||||||
google.protobuf.Any listener = 2;
|
|
||||||
|
|
||||||
// The timestamp when the Listener was last successfully updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes a dynamically loaded listener via the LDS API.
|
|
||||||
// [#next-free-field: 7]
|
|
||||||
message DynamicListener {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ListenersConfigDump.DynamicListener";
|
|
||||||
|
|
||||||
// The name or unique id of this listener, pulled from the DynamicListenerState config.
|
|
||||||
string name = 1;
|
|
||||||
|
|
||||||
// The listener state for any active listener by this name.
|
|
||||||
// These are listeners that are available to service data plane traffic.
|
|
||||||
DynamicListenerState active_state = 2;
|
|
||||||
|
|
||||||
// The listener state for any warming listener by this name.
|
|
||||||
// These are listeners that are currently undergoing warming in preparation to service data
|
|
||||||
// plane traffic. Note that if attempting to recreate an Envoy configuration from a
|
|
||||||
// configuration dump, the warming listeners should generally be discarded.
|
|
||||||
DynamicListenerState warming_state = 3;
|
|
||||||
|
|
||||||
// The listener state for any draining listener by this name.
|
|
||||||
// These are listeners that are currently undergoing draining in preparation to stop servicing
|
|
||||||
// data plane traffic. Note that if attempting to recreate an Envoy configuration from a
|
|
||||||
// configuration dump, the draining listeners should generally be discarded.
|
|
||||||
DynamicListenerState draining_state = 4;
|
|
||||||
|
|
||||||
// Set if the last update failed, cleared after the next successful update.
|
|
||||||
// The *error_state* field contains the rejected version of this particular
|
|
||||||
// resource along with the reason and timestamp. For successfully updated or
|
|
||||||
// acknowledged resource, this field should be empty.
|
|
||||||
UpdateFailureState error_state = 5;
|
|
||||||
|
|
||||||
// The client status of this resource.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
ClientResourceStatus client_status = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is the :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` in the
|
|
||||||
// last processed LDS discovery response. If there are only static bootstrap listeners, this field
|
|
||||||
// will be "".
|
|
||||||
string version_info = 1;
|
|
||||||
|
|
||||||
// The statically loaded listener configs.
|
|
||||||
repeated StaticListener static_listeners = 2;
|
|
||||||
|
|
||||||
// State for any warming, active, or draining listeners.
|
|
||||||
repeated DynamicListener dynamic_listeners = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Envoy's cluster manager fills this message with all currently known clusters. Cluster
|
|
||||||
// configuration information can be used to recreate an Envoy configuration by populating all
|
|
||||||
// clusters as static clusters or by returning them in a CDS response.
|
|
||||||
message ClustersConfigDump {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ClustersConfigDump";
|
|
||||||
|
|
||||||
// Describes a statically loaded cluster.
|
|
||||||
message StaticCluster {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ClustersConfigDump.StaticCluster";
|
|
||||||
|
|
||||||
// The cluster config.
|
|
||||||
google.protobuf.Any cluster = 1;
|
|
||||||
|
|
||||||
// The timestamp when the Cluster was last updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes a dynamically loaded cluster via the CDS API.
|
|
||||||
// [#next-free-field: 6]
|
|
||||||
message DynamicCluster {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ClustersConfigDump.DynamicCluster";
|
|
||||||
|
|
||||||
// This is the per-resource version information. This version is currently taken from the
|
|
||||||
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time
|
|
||||||
// that the cluster was loaded. In the future, discrete per-cluster versions may be supported by
|
|
||||||
// the API.
|
|
||||||
string version_info = 1;
|
|
||||||
|
|
||||||
// The cluster config.
|
|
||||||
google.protobuf.Any cluster = 2;
|
|
||||||
|
|
||||||
// The timestamp when the Cluster was last updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 3;
|
|
||||||
|
|
||||||
// Set if the last update failed, cleared after the next successful update.
|
|
||||||
// The *error_state* field contains the rejected version of this particular
|
|
||||||
// resource along with the reason and timestamp. For successfully updated or
|
|
||||||
// acknowledged resource, this field should be empty.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
UpdateFailureState error_state = 4;
|
|
||||||
|
|
||||||
// The client status of this resource.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
ClientResourceStatus client_status = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is the :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` in the
|
|
||||||
// last processed CDS discovery response. If there are only static bootstrap clusters, this field
|
|
||||||
// will be "".
|
|
||||||
string version_info = 1;
|
|
||||||
|
|
||||||
// The statically loaded cluster configs.
|
|
||||||
repeated StaticCluster static_clusters = 2;
|
|
||||||
|
|
||||||
// The dynamically loaded active clusters. These are clusters that are available to service
|
|
||||||
// data plane traffic.
|
|
||||||
repeated DynamicCluster dynamic_active_clusters = 3;
|
|
||||||
|
|
||||||
// The dynamically loaded warming clusters. These are clusters that are currently undergoing
|
|
||||||
// warming in preparation to service data plane traffic. Note that if attempting to recreate an
|
|
||||||
// Envoy configuration from a configuration dump, the warming clusters should generally be
|
|
||||||
// discarded.
|
|
||||||
repeated DynamicCluster dynamic_warming_clusters = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Envoy's RDS implementation fills this message with all currently loaded routes, as described by
|
|
||||||
// their RouteConfiguration objects. Static routes that are either defined in the bootstrap configuration
|
|
||||||
// or defined inline while configuring listeners are separated from those configured dynamically via RDS.
|
|
||||||
// Route configuration information can be used to recreate an Envoy configuration by populating all routes
|
|
||||||
// as static routes or by returning them in RDS responses.
|
|
||||||
message RoutesConfigDump {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.RoutesConfigDump";
|
|
||||||
|
|
||||||
message StaticRouteConfig {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.RoutesConfigDump.StaticRouteConfig";
|
|
||||||
|
|
||||||
// The route config.
|
|
||||||
google.protobuf.Any route_config = 1;
|
|
||||||
|
|
||||||
// The timestamp when the Route was last updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// [#next-free-field: 6]
|
|
||||||
message DynamicRouteConfig {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.RoutesConfigDump.DynamicRouteConfig";
|
|
||||||
|
|
||||||
// This is the per-resource version information. This version is currently taken from the
|
|
||||||
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time that
|
|
||||||
// the route configuration was loaded.
|
|
||||||
string version_info = 1;
|
|
||||||
|
|
||||||
// The route config.
|
|
||||||
google.protobuf.Any route_config = 2;
|
|
||||||
|
|
||||||
// The timestamp when the Route was last updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 3;
|
|
||||||
|
|
||||||
// Set if the last update failed, cleared after the next successful update.
|
|
||||||
// The *error_state* field contains the rejected version of this particular
|
|
||||||
// resource along with the reason and timestamp. For successfully updated or
|
|
||||||
// acknowledged resource, this field should be empty.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
UpdateFailureState error_state = 4;
|
|
||||||
|
|
||||||
// The client status of this resource.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
ClientResourceStatus client_status = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The statically loaded route configs.
|
|
||||||
repeated StaticRouteConfig static_route_configs = 2;
|
|
||||||
|
|
||||||
// The dynamically loaded route configs.
|
|
||||||
repeated DynamicRouteConfig dynamic_route_configs = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Envoy's scoped RDS implementation fills this message with all currently loaded route
|
|
||||||
// configuration scopes (defined via ScopedRouteConfigurationsSet protos). This message lists both
|
|
||||||
// the scopes defined inline with the higher order object (i.e., the HttpConnectionManager) and the
|
|
||||||
// dynamically obtained scopes via the SRDS API.
|
|
||||||
message ScopedRoutesConfigDump {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ScopedRoutesConfigDump";
|
|
||||||
|
|
||||||
message InlineScopedRouteConfigs {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ScopedRoutesConfigDump.InlineScopedRouteConfigs";
|
|
||||||
|
|
||||||
// The name assigned to the scoped route configurations.
|
|
||||||
string name = 1;
|
|
||||||
|
|
||||||
// The scoped route configurations.
|
|
||||||
repeated google.protobuf.Any scoped_route_configs = 2;
|
|
||||||
|
|
||||||
// The timestamp when the scoped route config set was last updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// [#next-free-field: 7]
|
|
||||||
message DynamicScopedRouteConfigs {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
|
||||||
"envoy.admin.v2alpha.ScopedRoutesConfigDump.DynamicScopedRouteConfigs";
|
|
||||||
|
|
||||||
// The name assigned to the scoped route configurations.
|
|
||||||
string name = 1;
|
|
||||||
|
|
||||||
// This is the per-resource version information. This version is currently taken from the
|
|
||||||
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time that
|
|
||||||
// the scoped routes configuration was loaded.
|
|
||||||
string version_info = 2;
|
|
||||||
|
|
||||||
// The scoped route configurations.
|
|
||||||
repeated google.protobuf.Any scoped_route_configs = 3;
|
|
||||||
|
|
||||||
// The timestamp when the scoped route config set was last updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 4;
|
|
||||||
|
|
||||||
// Set if the last update failed, cleared after the next successful update.
|
|
||||||
// The *error_state* field contains the rejected version of this particular
|
|
||||||
// resource along with the reason and timestamp. For successfully updated or
|
|
||||||
// acknowledged resource, this field should be empty.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
UpdateFailureState error_state = 5;
|
|
||||||
|
|
||||||
// The client status of this resource.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
ClientResourceStatus client_status = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The statically loaded scoped route configs.
|
|
||||||
repeated InlineScopedRouteConfigs inline_scoped_route_configs = 1;
|
|
||||||
|
|
||||||
// The dynamically loaded scoped route configs.
|
|
||||||
repeated DynamicScopedRouteConfigs dynamic_scoped_route_configs = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Envoys SDS implementation fills this message with all secrets fetched dynamically via SDS.
|
// Envoys SDS implementation fills this message with all secrets fetched dynamically via SDS.
|
||||||
message SecretsConfigDump {
|
message SecretsConfigDump {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
|
@ -437,47 +132,3 @@ message SecretsConfigDump {
|
||||||
// warming in preparation to service clusters or listeners.
|
// warming in preparation to service clusters or listeners.
|
||||||
repeated DynamicSecret dynamic_warming_secrets = 3;
|
repeated DynamicSecret dynamic_warming_secrets = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Envoy's admin fill this message with all currently known endpoints. Endpoint
|
|
||||||
// configuration information can be used to recreate an Envoy configuration by populating all
|
|
||||||
// endpoints as static endpoints or by returning them in an EDS response.
|
|
||||||
message EndpointsConfigDump {
|
|
||||||
message StaticEndpointConfig {
|
|
||||||
// The endpoint config.
|
|
||||||
google.protobuf.Any endpoint_config = 1;
|
|
||||||
|
|
||||||
// [#not-implemented-hide:] The timestamp when the Endpoint was last updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// [#next-free-field: 6]
|
|
||||||
message DynamicEndpointConfig {
|
|
||||||
// [#not-implemented-hide:] This is the per-resource version information. This version is currently taken from the
|
|
||||||
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time that
|
|
||||||
// the endpoint configuration was loaded.
|
|
||||||
string version_info = 1;
|
|
||||||
|
|
||||||
// The endpoint config.
|
|
||||||
google.protobuf.Any endpoint_config = 2;
|
|
||||||
|
|
||||||
// [#not-implemented-hide:] The timestamp when the Endpoint was last updated.
|
|
||||||
google.protobuf.Timestamp last_updated = 3;
|
|
||||||
|
|
||||||
// Set if the last update failed, cleared after the next successful update.
|
|
||||||
// The *error_state* field contains the rejected version of this particular
|
|
||||||
// resource along with the reason and timestamp. For successfully updated or
|
|
||||||
// acknowledged resource, this field should be empty.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
UpdateFailureState error_state = 4;
|
|
||||||
|
|
||||||
// The client status of this resource.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
ClientResourceStatus client_status = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The statically loaded endpoint configs.
|
|
||||||
repeated StaticEndpointConfig static_endpoint_configs = 2;
|
|
||||||
|
|
||||||
// The dynamically loaded endpoint configs.
|
|
||||||
repeated DynamicEndpointConfig dynamic_endpoint_configs = 3;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
412
xds/third_party/envoy/src/main/proto/envoy/admin/v3/config_dump_shared.proto
vendored
Normal file
412
xds/third_party/envoy/src/main/proto/envoy/admin/v3/config_dump_shared.proto
vendored
Normal file
|
|
@ -0,0 +1,412 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package envoy.admin.v3;
|
||||||
|
|
||||||
|
import "google/protobuf/any.proto";
|
||||||
|
import "google/protobuf/timestamp.proto";
|
||||||
|
|
||||||
|
import "udpa/annotations/status.proto";
|
||||||
|
import "udpa/annotations/versioning.proto";
|
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.admin.v3";
|
||||||
|
option java_outer_classname = "ConfigDumpSharedProto";
|
||||||
|
option java_multiple_files = true;
|
||||||
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/admin/v3;adminv3";
|
||||||
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
|
// [#protodoc-title: ConfigDump]
|
||||||
|
|
||||||
|
// Resource status from the view of a xDS client, which tells the synchronization
|
||||||
|
// status between the xDS client and the xDS server.
|
||||||
|
enum ClientResourceStatus {
|
||||||
|
// Resource status is not available/unknown.
|
||||||
|
UNKNOWN = 0;
|
||||||
|
|
||||||
|
// Client requested this resource but hasn't received any update from management
|
||||||
|
// server. The client will not fail requests, but will queue them until update
|
||||||
|
// arrives or the client times out waiting for the resource.
|
||||||
|
REQUESTED = 1;
|
||||||
|
|
||||||
|
// This resource has been requested by the client but has either not been
|
||||||
|
// delivered by the server or was previously delivered by the server and then
|
||||||
|
// subsequently removed from resources provided by the server. For more
|
||||||
|
// information, please refer to the :ref:`"Knowing When a Requested Resource
|
||||||
|
// Does Not Exist" <xds_protocol_resource_not_existed>` section.
|
||||||
|
DOES_NOT_EXIST = 2;
|
||||||
|
|
||||||
|
// Client received this resource and replied with ACK.
|
||||||
|
ACKED = 3;
|
||||||
|
|
||||||
|
// Client received this resource and replied with NACK.
|
||||||
|
NACKED = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateFailureState {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.UpdateFailureState";
|
||||||
|
|
||||||
|
// What the component configuration would have been if the update had succeeded.
|
||||||
|
// This field may not be populated by xDS clients due to storage overhead.
|
||||||
|
google.protobuf.Any failed_configuration = 1;
|
||||||
|
|
||||||
|
// Time of the latest failed update attempt.
|
||||||
|
google.protobuf.Timestamp last_update_attempt = 2;
|
||||||
|
|
||||||
|
// Details about the last failed update attempt.
|
||||||
|
string details = 3;
|
||||||
|
|
||||||
|
// This is the version of the rejected resource.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
string version_info = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Envoy's listener manager fills this message with all currently known listeners. Listener
|
||||||
|
// configuration information can be used to recreate an Envoy configuration by populating all
|
||||||
|
// listeners as static listeners or by returning them in a LDS response.
|
||||||
|
message ListenersConfigDump {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ListenersConfigDump";
|
||||||
|
|
||||||
|
// Describes a statically loaded listener.
|
||||||
|
message StaticListener {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ListenersConfigDump.StaticListener";
|
||||||
|
|
||||||
|
// The listener config.
|
||||||
|
google.protobuf.Any listener = 1;
|
||||||
|
|
||||||
|
// The timestamp when the Listener was last successfully updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DynamicListenerState {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ListenersConfigDump.DynamicListenerState";
|
||||||
|
|
||||||
|
// This is the per-resource version information. This version is currently taken from the
|
||||||
|
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time
|
||||||
|
// that the listener was loaded. In the future, discrete per-listener versions may be supported
|
||||||
|
// by the API.
|
||||||
|
string version_info = 1;
|
||||||
|
|
||||||
|
// The listener config.
|
||||||
|
google.protobuf.Any listener = 2;
|
||||||
|
|
||||||
|
// The timestamp when the Listener was last successfully updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a dynamically loaded listener via the LDS API.
|
||||||
|
// [#next-free-field: 7]
|
||||||
|
message DynamicListener {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ListenersConfigDump.DynamicListener";
|
||||||
|
|
||||||
|
// The name or unique id of this listener, pulled from the DynamicListenerState config.
|
||||||
|
string name = 1;
|
||||||
|
|
||||||
|
// The listener state for any active listener by this name.
|
||||||
|
// These are listeners that are available to service data plane traffic.
|
||||||
|
DynamicListenerState active_state = 2;
|
||||||
|
|
||||||
|
// The listener state for any warming listener by this name.
|
||||||
|
// These are listeners that are currently undergoing warming in preparation to service data
|
||||||
|
// plane traffic. Note that if attempting to recreate an Envoy configuration from a
|
||||||
|
// configuration dump, the warming listeners should generally be discarded.
|
||||||
|
DynamicListenerState warming_state = 3;
|
||||||
|
|
||||||
|
// The listener state for any draining listener by this name.
|
||||||
|
// These are listeners that are currently undergoing draining in preparation to stop servicing
|
||||||
|
// data plane traffic. Note that if attempting to recreate an Envoy configuration from a
|
||||||
|
// configuration dump, the draining listeners should generally be discarded.
|
||||||
|
DynamicListenerState draining_state = 4;
|
||||||
|
|
||||||
|
// Set if the last update failed, cleared after the next successful update.
|
||||||
|
// The ``error_state`` field contains the rejected version of this particular
|
||||||
|
// resource along with the reason and timestamp. For successfully updated or
|
||||||
|
// acknowledged resource, this field should be empty.
|
||||||
|
UpdateFailureState error_state = 5;
|
||||||
|
|
||||||
|
// The client status of this resource.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
ClientResourceStatus client_status = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` in the
|
||||||
|
// last processed LDS discovery response. If there are only static bootstrap listeners, this field
|
||||||
|
// will be "".
|
||||||
|
string version_info = 1;
|
||||||
|
|
||||||
|
// The statically loaded listener configs.
|
||||||
|
repeated StaticListener static_listeners = 2;
|
||||||
|
|
||||||
|
// State for any warming, active, or draining listeners.
|
||||||
|
repeated DynamicListener dynamic_listeners = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Envoy's cluster manager fills this message with all currently known clusters. Cluster
|
||||||
|
// configuration information can be used to recreate an Envoy configuration by populating all
|
||||||
|
// clusters as static clusters or by returning them in a CDS response.
|
||||||
|
message ClustersConfigDump {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ClustersConfigDump";
|
||||||
|
|
||||||
|
// Describes a statically loaded cluster.
|
||||||
|
message StaticCluster {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ClustersConfigDump.StaticCluster";
|
||||||
|
|
||||||
|
// The cluster config.
|
||||||
|
google.protobuf.Any cluster = 1;
|
||||||
|
|
||||||
|
// The timestamp when the Cluster was last updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a dynamically loaded cluster via the CDS API.
|
||||||
|
// [#next-free-field: 6]
|
||||||
|
message DynamicCluster {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ClustersConfigDump.DynamicCluster";
|
||||||
|
|
||||||
|
// This is the per-resource version information. This version is currently taken from the
|
||||||
|
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time
|
||||||
|
// that the cluster was loaded. In the future, discrete per-cluster versions may be supported by
|
||||||
|
// the API.
|
||||||
|
string version_info = 1;
|
||||||
|
|
||||||
|
// The cluster config.
|
||||||
|
google.protobuf.Any cluster = 2;
|
||||||
|
|
||||||
|
// The timestamp when the Cluster was last updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 3;
|
||||||
|
|
||||||
|
// Set if the last update failed, cleared after the next successful update.
|
||||||
|
// The ``error_state`` field contains the rejected version of this particular
|
||||||
|
// resource along with the reason and timestamp. For successfully updated or
|
||||||
|
// acknowledged resource, this field should be empty.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
UpdateFailureState error_state = 4;
|
||||||
|
|
||||||
|
// The client status of this resource.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
ClientResourceStatus client_status = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` in the
|
||||||
|
// last processed CDS discovery response. If there are only static bootstrap clusters, this field
|
||||||
|
// will be "".
|
||||||
|
string version_info = 1;
|
||||||
|
|
||||||
|
// The statically loaded cluster configs.
|
||||||
|
repeated StaticCluster static_clusters = 2;
|
||||||
|
|
||||||
|
// The dynamically loaded active clusters. These are clusters that are available to service
|
||||||
|
// data plane traffic.
|
||||||
|
repeated DynamicCluster dynamic_active_clusters = 3;
|
||||||
|
|
||||||
|
// The dynamically loaded warming clusters. These are clusters that are currently undergoing
|
||||||
|
// warming in preparation to service data plane traffic. Note that if attempting to recreate an
|
||||||
|
// Envoy configuration from a configuration dump, the warming clusters should generally be
|
||||||
|
// discarded.
|
||||||
|
repeated DynamicCluster dynamic_warming_clusters = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Envoy's RDS implementation fills this message with all currently loaded routes, as described by
|
||||||
|
// their RouteConfiguration objects. Static routes that are either defined in the bootstrap configuration
|
||||||
|
// or defined inline while configuring listeners are separated from those configured dynamically via RDS.
|
||||||
|
// Route configuration information can be used to recreate an Envoy configuration by populating all routes
|
||||||
|
// as static routes or by returning them in RDS responses.
|
||||||
|
message RoutesConfigDump {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.RoutesConfigDump";
|
||||||
|
|
||||||
|
message StaticRouteConfig {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.RoutesConfigDump.StaticRouteConfig";
|
||||||
|
|
||||||
|
// The route config.
|
||||||
|
google.protobuf.Any route_config = 1;
|
||||||
|
|
||||||
|
// The timestamp when the Route was last updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// [#next-free-field: 6]
|
||||||
|
message DynamicRouteConfig {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.RoutesConfigDump.DynamicRouteConfig";
|
||||||
|
|
||||||
|
// This is the per-resource version information. This version is currently taken from the
|
||||||
|
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time that
|
||||||
|
// the route configuration was loaded.
|
||||||
|
string version_info = 1;
|
||||||
|
|
||||||
|
// The route config.
|
||||||
|
google.protobuf.Any route_config = 2;
|
||||||
|
|
||||||
|
// The timestamp when the Route was last updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 3;
|
||||||
|
|
||||||
|
// Set if the last update failed, cleared after the next successful update.
|
||||||
|
// The ``error_state`` field contains the rejected version of this particular
|
||||||
|
// resource along with the reason and timestamp. For successfully updated or
|
||||||
|
// acknowledged resource, this field should be empty.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
UpdateFailureState error_state = 4;
|
||||||
|
|
||||||
|
// The client status of this resource.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
ClientResourceStatus client_status = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The statically loaded route configs.
|
||||||
|
repeated StaticRouteConfig static_route_configs = 2;
|
||||||
|
|
||||||
|
// The dynamically loaded route configs.
|
||||||
|
repeated DynamicRouteConfig dynamic_route_configs = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Envoy's scoped RDS implementation fills this message with all currently loaded route
|
||||||
|
// configuration scopes (defined via ScopedRouteConfigurationsSet protos). This message lists both
|
||||||
|
// the scopes defined inline with the higher order object (i.e., the HttpConnectionManager) and the
|
||||||
|
// dynamically obtained scopes via the SRDS API.
|
||||||
|
message ScopedRoutesConfigDump {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ScopedRoutesConfigDump";
|
||||||
|
|
||||||
|
message InlineScopedRouteConfigs {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ScopedRoutesConfigDump.InlineScopedRouteConfigs";
|
||||||
|
|
||||||
|
// The name assigned to the scoped route configurations.
|
||||||
|
string name = 1;
|
||||||
|
|
||||||
|
// The scoped route configurations.
|
||||||
|
repeated google.protobuf.Any scoped_route_configs = 2;
|
||||||
|
|
||||||
|
// The timestamp when the scoped route config set was last updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// [#next-free-field: 7]
|
||||||
|
message DynamicScopedRouteConfigs {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.ScopedRoutesConfigDump.DynamicScopedRouteConfigs";
|
||||||
|
|
||||||
|
// The name assigned to the scoped route configurations.
|
||||||
|
string name = 1;
|
||||||
|
|
||||||
|
// This is the per-resource version information. This version is currently taken from the
|
||||||
|
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time that
|
||||||
|
// the scoped routes configuration was loaded.
|
||||||
|
string version_info = 2;
|
||||||
|
|
||||||
|
// The scoped route configurations.
|
||||||
|
repeated google.protobuf.Any scoped_route_configs = 3;
|
||||||
|
|
||||||
|
// The timestamp when the scoped route config set was last updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 4;
|
||||||
|
|
||||||
|
// Set if the last update failed, cleared after the next successful update.
|
||||||
|
// The ``error_state`` field contains the rejected version of this particular
|
||||||
|
// resource along with the reason and timestamp. For successfully updated or
|
||||||
|
// acknowledged resource, this field should be empty.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
UpdateFailureState error_state = 5;
|
||||||
|
|
||||||
|
// The client status of this resource.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
ClientResourceStatus client_status = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The statically loaded scoped route configs.
|
||||||
|
repeated InlineScopedRouteConfigs inline_scoped_route_configs = 1;
|
||||||
|
|
||||||
|
// The dynamically loaded scoped route configs.
|
||||||
|
repeated DynamicScopedRouteConfigs dynamic_scoped_route_configs = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Envoy's admin fill this message with all currently known endpoints. Endpoint
|
||||||
|
// configuration information can be used to recreate an Envoy configuration by populating all
|
||||||
|
// endpoints as static endpoints or by returning them in an EDS response.
|
||||||
|
message EndpointsConfigDump {
|
||||||
|
message StaticEndpointConfig {
|
||||||
|
// The endpoint config.
|
||||||
|
google.protobuf.Any endpoint_config = 1;
|
||||||
|
|
||||||
|
// [#not-implemented-hide:] The timestamp when the Endpoint was last updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// [#next-free-field: 6]
|
||||||
|
message DynamicEndpointConfig {
|
||||||
|
// [#not-implemented-hide:] This is the per-resource version information. This version is currently taken from the
|
||||||
|
// :ref:`version_info <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>` field at the time that
|
||||||
|
// the endpoint configuration was loaded.
|
||||||
|
string version_info = 1;
|
||||||
|
|
||||||
|
// The endpoint config.
|
||||||
|
google.protobuf.Any endpoint_config = 2;
|
||||||
|
|
||||||
|
// [#not-implemented-hide:] The timestamp when the Endpoint was last updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 3;
|
||||||
|
|
||||||
|
// Set if the last update failed, cleared after the next successful update.
|
||||||
|
// The ``error_state`` field contains the rejected version of this particular
|
||||||
|
// resource along with the reason and timestamp. For successfully updated or
|
||||||
|
// acknowledged resource, this field should be empty.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
UpdateFailureState error_state = 4;
|
||||||
|
|
||||||
|
// The client status of this resource.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
ClientResourceStatus client_status = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The statically loaded endpoint configs.
|
||||||
|
repeated StaticEndpointConfig static_endpoint_configs = 2;
|
||||||
|
|
||||||
|
// The dynamically loaded endpoint configs.
|
||||||
|
repeated DynamicEndpointConfig dynamic_endpoint_configs = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Envoy's ECDS service fills this message with all currently extension
|
||||||
|
// configuration. Extension configuration information can be used to recreate
|
||||||
|
// an Envoy ECDS listener and HTTP filters as static filters or by returning
|
||||||
|
// them in ECDS response.
|
||||||
|
message EcdsConfigDump {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type = "envoy.admin.v2alpha.EcdsConfigDump";
|
||||||
|
|
||||||
|
// [#next-free-field: 6]
|
||||||
|
message EcdsFilterConfig {
|
||||||
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
"envoy.admin.v2alpha.EcdsConfigDump.EcdsFilterConfig";
|
||||||
|
|
||||||
|
// This is the per-resource version information. This version is currently
|
||||||
|
// taken from the :ref:`version_info
|
||||||
|
// <envoy_v3_api_field_service.discovery.v3.DiscoveryResponse.version_info>`
|
||||||
|
// field at the time that the ECDS filter was loaded.
|
||||||
|
string version_info = 1;
|
||||||
|
|
||||||
|
// The ECDS filter config.
|
||||||
|
google.protobuf.Any ecds_filter = 2;
|
||||||
|
|
||||||
|
// The timestamp when the ECDS filter was last updated.
|
||||||
|
google.protobuf.Timestamp last_updated = 3;
|
||||||
|
|
||||||
|
// Set if the last update failed, cleared after the next successful update.
|
||||||
|
// The ``error_state`` field contains the rejected version of this
|
||||||
|
// particular resource along with the reason and timestamp. For successfully
|
||||||
|
// updated or acknowledged resource, this field should be empty.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
UpdateFailureState error_state = 4;
|
||||||
|
|
||||||
|
// The client status of this resource.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
ClientResourceStatus client_status = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The ECDS filter configs.
|
||||||
|
repeated EcdsFilterConfig ecds_filters = 1;
|
||||||
|
}
|
||||||
|
|
@ -24,9 +24,9 @@ option (udpa.annotations.file_status).package_version_status = FROZEN;
|
||||||
// more information on outlier detection.
|
// more information on outlier detection.
|
||||||
// [#next-free-field: 21]
|
// [#next-free-field: 21]
|
||||||
message OutlierDetection {
|
message OutlierDetection {
|
||||||
// The number of consecutive 5xx responses or local origin errors that are mapped
|
// The number of consecutive server-side error responses (for HTTP traffic,
|
||||||
// to 5xx error codes before a consecutive 5xx ejection
|
// 5xx responses; for TCP traffic, connection failures; for Redis, failure to
|
||||||
// occurs. Defaults to 5.
|
// respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.
|
||||||
google.protobuf.UInt32Value consecutive_5xx = 1;
|
google.protobuf.UInt32Value consecutive_5xx = 1;
|
||||||
|
|
||||||
// The time interval between ejection analysis sweeps. This can result in
|
// The time interval between ejection analysis sweeps. This can result in
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ message GrpcService {
|
||||||
message StsService {
|
message StsService {
|
||||||
// URI of the token exchange service that handles token exchange requests.
|
// URI of the token exchange service that handles token exchange requests.
|
||||||
// [#comment:TODO(asraa): Add URI validation when implemented. Tracked by
|
// [#comment:TODO(asraa): Add URI validation when implemented. Tracked by
|
||||||
// https://github.com/envoyproxy/protoc-gen-validate/issues/303]
|
// https://github.com/bufbuild/protoc-gen-validate/issues/303]
|
||||||
string token_exchange_service_uri = 1;
|
string token_exchange_service_uri = 1;
|
||||||
|
|
||||||
// Location of the target service or resource where the client
|
// Location of the target service or resource where the client
|
||||||
|
|
|
||||||
|
|
@ -301,7 +301,7 @@ message WeightedCluster {
|
||||||
// An integer between 0 and :ref:`total_weight
|
// An integer between 0 and :ref:`total_weight
|
||||||
// <envoy_api_field_route.WeightedCluster.total_weight>`. When a request matches the route,
|
// <envoy_api_field_route.WeightedCluster.total_weight>`. When a request matches the route,
|
||||||
// the choice of an upstream cluster is determined by its weight. The sum of weights across all
|
// the choice of an upstream cluster is determined by its weight. The sum of weights across all
|
||||||
// entries in the clusters array must add up to the total_weight, which defaults to 100.
|
// entries in the clusters array must add up to the total_weight, if total_weight is greater than 0.
|
||||||
google.protobuf.UInt32Value weight = 2;
|
google.protobuf.UInt32Value weight = 2;
|
||||||
|
|
||||||
// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints in
|
// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints in
|
||||||
|
|
@ -859,8 +859,9 @@ message RouteAction {
|
||||||
// Indicates that during forwarding, the host header will be swapped with
|
// Indicates that during forwarding, the host header will be swapped with
|
||||||
// the hostname of the upstream host chosen by the cluster manager. This
|
// the hostname of the upstream host chosen by the cluster manager. This
|
||||||
// option is applicable only when the destination cluster for a route is of
|
// option is applicable only when the destination cluster for a route is of
|
||||||
// type *strict_dns* or *logical_dns*. Setting this to true with other cluster
|
// type ``STRICT_DNS``, ``LOGICAL_DNS`` or ``STATIC``. For ``STATIC`` clusters, the
|
||||||
// types has no effect.
|
// hostname attribute of the endpoint must be configured. Setting this to true
|
||||||
|
// with other cluster types has no effect.
|
||||||
google.protobuf.BoolValue auto_host_rewrite = 7;
|
google.protobuf.BoolValue auto_host_rewrite = 7;
|
||||||
|
|
||||||
// Indicates that during forwarding, the host header will be swapped with the content of given
|
// Indicates that during forwarding, the host header will be swapped with the content of given
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,7 @@ message RuntimeFilter {
|
||||||
"envoy.config.filter.accesslog.v2.RuntimeFilter";
|
"envoy.config.filter.accesslog.v2.RuntimeFilter";
|
||||||
|
|
||||||
// Runtime key to get an optional overridden numerator for use in the
|
// Runtime key to get an optional overridden numerator for use in the
|
||||||
// *percent_sampled* field. If found in runtime, this value will replace the
|
// ``percent_sampled`` field. If found in runtime, this value will replace the
|
||||||
// default numerator.
|
// default numerator.
|
||||||
string runtime_key = 1 [(validate.rules).string = {min_len: 1}];
|
string runtime_key = 1 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
|
|
@ -165,9 +165,9 @@ message RuntimeFilter {
|
||||||
// is present, the filter will consistently sample across multiple hosts based
|
// is present, the filter will consistently sample across multiple hosts based
|
||||||
// on the runtime key value and the value extracted from
|
// on the runtime key value and the value extracted from
|
||||||
// :ref:`x-request-id<config_http_conn_man_headers_x-request-id>`. If it is
|
// :ref:`x-request-id<config_http_conn_man_headers_x-request-id>`. If it is
|
||||||
// missing, or *use_independent_randomness* is set to true, the filter will
|
// missing, or ``use_independent_randomness`` is set to true, the filter will
|
||||||
// randomly sample based on the runtime key value alone.
|
// randomly sample based on the runtime key value alone.
|
||||||
// *use_independent_randomness* can be used for logging kill switches within
|
// ``use_independent_randomness`` can be used for logging kill switches within
|
||||||
// complex nested :ref:`AndFilter
|
// complex nested :ref:`AndFilter
|
||||||
// <envoy_v3_api_msg_config.accesslog.v3.AndFilter>` and :ref:`OrFilter
|
// <envoy_v3_api_msg_config.accesslog.v3.AndFilter>` and :ref:`OrFilter
|
||||||
// <envoy_v3_api_msg_config.accesslog.v3.OrFilter>` blocks that are easier to
|
// <envoy_v3_api_msg_config.accesslog.v3.OrFilter>` blocks that are easier to
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// <config_overview_bootstrap>` for more detail.
|
// <config_overview_bootstrap>` for more detail.
|
||||||
|
|
||||||
// Bootstrap :ref:`configuration overview <config_overview_bootstrap>`.
|
// Bootstrap :ref:`configuration overview <config_overview_bootstrap>`.
|
||||||
// [#next-free-field: 34]
|
// [#next-free-field: 38]
|
||||||
message Bootstrap {
|
message Bootstrap {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.config.bootstrap.v2.Bootstrap";
|
"envoy.config.bootstrap.v2.Bootstrap";
|
||||||
|
|
@ -169,7 +169,7 @@ message Bootstrap {
|
||||||
// Optional duration between flushes to configured stats sinks. For
|
// Optional duration between flushes to configured stats sinks. For
|
||||||
// performance reasons Envoy latches counters and only flushes counters and
|
// performance reasons Envoy latches counters and only flushes counters and
|
||||||
// gauges at a periodic interval. If not specified the default is 5000ms (5
|
// gauges at a periodic interval. If not specified the default is 5000ms (5
|
||||||
// seconds). Only one of `stats_flush_interval` or `stats_flush_on_admin`
|
// seconds). Only one of ``stats_flush_interval`` or ``stats_flush_on_admin``
|
||||||
// can be set.
|
// can be set.
|
||||||
// Duration must be at least 1ms and at most 5 min.
|
// Duration must be at least 1ms and at most 5 min.
|
||||||
google.protobuf.Duration stats_flush_interval = 7 [
|
google.protobuf.Duration stats_flush_interval = 7 [
|
||||||
|
|
@ -182,14 +182,14 @@ message Bootstrap {
|
||||||
|
|
||||||
oneof stats_flush {
|
oneof stats_flush {
|
||||||
// Flush stats to sinks only when queried for on the admin interface. If set,
|
// Flush stats to sinks only when queried for on the admin interface. If set,
|
||||||
// a flush timer is not created. Only one of `stats_flush_on_admin` or
|
// a flush timer is not created. Only one of ``stats_flush_on_admin`` or
|
||||||
// `stats_flush_interval` can be set.
|
// ``stats_flush_interval`` can be set.
|
||||||
bool stats_flush_on_admin = 29 [(validate.rules).bool = {const: true}];
|
bool stats_flush_on_admin = 29 [(validate.rules).bool = {const: true}];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Optional watchdog configuration.
|
// Optional watchdog configuration.
|
||||||
// This is for a single watchdog configuration for the entire system.
|
// This is for a single watchdog configuration for the entire system.
|
||||||
// Deprecated in favor of *watchdogs* which has finer granularity.
|
// Deprecated in favor of ``watchdogs`` which has finer granularity.
|
||||||
Watchdog watchdog = 8
|
Watchdog watchdog = 8
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
|
|
@ -249,7 +249,7 @@ message Bootstrap {
|
||||||
// when :ref:`dns_resolvers <envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolvers>` and
|
// when :ref:`dns_resolvers <envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolvers>` and
|
||||||
// :ref:`use_tcp_for_dns_lookups <envoy_v3_api_field_config.cluster.v3.Cluster.use_tcp_for_dns_lookups>` are
|
// :ref:`use_tcp_for_dns_lookups <envoy_v3_api_field_config.cluster.v3.Cluster.use_tcp_for_dns_lookups>` are
|
||||||
// specified.
|
// specified.
|
||||||
// This field is deprecated in favor of *dns_resolution_config*
|
// This field is deprecated in favor of ``dns_resolution_config``
|
||||||
// which aggregates all of the DNS resolver configuration in a single message.
|
// which aggregates all of the DNS resolver configuration in a single message.
|
||||||
bool use_tcp_for_dns_lookups = 20
|
bool use_tcp_for_dns_lookups = 20
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
@ -267,12 +267,12 @@ message Bootstrap {
|
||||||
// or any other DNS resolver types and the related parameters.
|
// or any other DNS resolver types and the related parameters.
|
||||||
// For example, an object of
|
// For example, an object of
|
||||||
// :ref:`CaresDnsResolverConfig <envoy_v3_api_msg_extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig>`
|
// :ref:`CaresDnsResolverConfig <envoy_v3_api_msg_extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig>`
|
||||||
// can be packed into this *typed_dns_resolver_config*. This configuration replaces the
|
// can be packed into this ``typed_dns_resolver_config``. This configuration replaces the
|
||||||
// :ref:`dns_resolution_config <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.dns_resolution_config>`
|
// :ref:`dns_resolution_config <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.dns_resolution_config>`
|
||||||
// configuration.
|
// configuration.
|
||||||
// During the transition period when both *dns_resolution_config* and *typed_dns_resolver_config* exists,
|
// During the transition period when both ``dns_resolution_config`` and ``typed_dns_resolver_config`` exists,
|
||||||
// when *typed_dns_resolver_config* is in place, Envoy will use it and ignore *dns_resolution_config*.
|
// when ``typed_dns_resolver_config`` is in place, Envoy will use it and ignore ``dns_resolution_config``.
|
||||||
// When *typed_dns_resolver_config* is missing, the default behavior is in place.
|
// When ``typed_dns_resolver_config`` is missing, the default behavior is in place.
|
||||||
// [#extension-category: envoy.network.dns_resolver]
|
// [#extension-category: envoy.network.dns_resolver]
|
||||||
core.v3.TypedExtensionConfig typed_dns_resolver_config = 31;
|
core.v3.TypedExtensionConfig typed_dns_resolver_config = 31;
|
||||||
|
|
||||||
|
|
@ -289,18 +289,18 @@ message Bootstrap {
|
||||||
// xdstp:// URL authority resolution. The algorithm is as
|
// xdstp:// URL authority resolution. The algorithm is as
|
||||||
// follows:
|
// follows:
|
||||||
// 1. The authority field is taken from the xdstp:// URL, call
|
// 1. The authority field is taken from the xdstp:// URL, call
|
||||||
// this *resource_authority*.
|
// this ``resource_authority``.
|
||||||
// 2. *resource_authority* is compared against the authorities in any peer
|
// 2. ``resource_authority`` is compared against the authorities in any peer
|
||||||
// *ConfigSource*. The peer *ConfigSource* is the configuration source
|
// ``ConfigSource``. The peer ``ConfigSource`` is the configuration source
|
||||||
// message which would have been used unconditionally for resolution
|
// message which would have been used unconditionally for resolution
|
||||||
// with opaque resource names. If there is a match with an authority, the
|
// with opaque resource names. If there is a match with an authority, the
|
||||||
// peer *ConfigSource* message is used.
|
// peer ``ConfigSource`` message is used.
|
||||||
// 3. *resource_authority* is compared sequentially with the authorities in
|
// 3. ``resource_authority`` is compared sequentially with the authorities in
|
||||||
// each configuration source in *config_sources*. The first *ConfigSource*
|
// each configuration source in ``config_sources``. The first ``ConfigSource``
|
||||||
// to match wins.
|
// to match wins.
|
||||||
// 4. As a fallback, if no configuration source matches, then
|
// 4. As a fallback, if no configuration source matches, then
|
||||||
// *default_config_source* is used.
|
// ``default_config_source`` is used.
|
||||||
// 5. If *default_config_source* is not specified, resolution fails.
|
// 5. If ``default_config_source`` is not specified, resolution fails.
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
repeated core.v3.ConfigSource config_sources = 22;
|
repeated core.v3.ConfigSource config_sources = 22;
|
||||||
|
|
||||||
|
|
@ -330,6 +330,36 @@ message Bootstrap {
|
||||||
// Optional path to a file with performance tracing data created by "Perfetto" SDK in binary
|
// Optional path to a file with performance tracing data created by "Perfetto" SDK in binary
|
||||||
// ProtoBuf format. The default value is "envoy.pftrace".
|
// ProtoBuf format. The default value is "envoy.pftrace".
|
||||||
string perf_tracing_file_path = 33;
|
string perf_tracing_file_path = 33;
|
||||||
|
|
||||||
|
// Optional overriding of default regex engine.
|
||||||
|
// If the value is not specified, Google RE2 will be used by default.
|
||||||
|
// [#extension-category: envoy.regex_engines]
|
||||||
|
core.v3.TypedExtensionConfig default_regex_engine = 34;
|
||||||
|
|
||||||
|
// Optional XdsResourcesDelegate configuration, which allows plugging custom logic into both
|
||||||
|
// fetch and load events during xDS processing.
|
||||||
|
// If a value is not specified, no XdsResourcesDelegate will be used.
|
||||||
|
// TODO(abeyad): Add public-facing documentation.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
core.v3.TypedExtensionConfig xds_delegate_extension = 35;
|
||||||
|
|
||||||
|
// Optional XdsConfigTracker configuration, which allows tracking xDS responses in external components,
|
||||||
|
// e.g., external tracer or monitor. It provides the process point when receive, ingest, or fail to
|
||||||
|
// process xDS resources and messages. If a value is not specified, no XdsConfigTracker will be used.
|
||||||
|
//
|
||||||
|
// .. note::
|
||||||
|
//
|
||||||
|
// There are no in-repo extensions currently, and the :repo:`XdsConfigTracker <envoy/config/xds_config_tracker.h>`
|
||||||
|
// interface should be implemented before using.
|
||||||
|
// See :repo:`xds_config_tracker_integration_test <test/integration/xds_config_tracker_integration_test.cc>`
|
||||||
|
// for an example usage of the interface.
|
||||||
|
core.v3.TypedExtensionConfig xds_config_tracker_extension = 36;
|
||||||
|
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
// This controls the type of listener manager configured for Envoy. Currently
|
||||||
|
// Envoy only supports ListenerManager for this field and Envoy Mobile
|
||||||
|
// supports ApiListenerManager.
|
||||||
|
core.v3.TypedExtensionConfig listener_manager = 37;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Administration interface :ref:`operations documentation
|
// Administration interface :ref:`operations documentation
|
||||||
|
|
@ -345,7 +375,7 @@ message Admin {
|
||||||
// The path to write the access log for the administration server. If no
|
// The path to write the access log for the administration server. If no
|
||||||
// access log is desired specify ‘/dev/null’. This is only required if
|
// access log is desired specify ‘/dev/null’. This is only required if
|
||||||
// :ref:`address <envoy_v3_api_field_config.bootstrap.v3.Admin.address>` is set.
|
// :ref:`address <envoy_v3_api_field_config.bootstrap.v3.Admin.address>` is set.
|
||||||
// Deprecated in favor of *access_log* which offers more options.
|
// Deprecated in favor of ``access_log`` which offers more options.
|
||||||
string access_log_path = 1
|
string access_log_path = 1
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
|
|
@ -387,7 +417,7 @@ message ClusterManager {
|
||||||
// Name of the local cluster (i.e., the cluster that owns the Envoy running
|
// Name of the local cluster (i.e., the cluster that owns the Envoy running
|
||||||
// this configuration). In order to enable :ref:`zone aware routing
|
// this configuration). In order to enable :ref:`zone aware routing
|
||||||
// <arch_overview_load_balancing_zone_aware_routing>` this option must be set.
|
// <arch_overview_load_balancing_zone_aware_routing>` this option must be set.
|
||||||
// If *local_cluster_name* is defined then :ref:`clusters
|
// If ``local_cluster_name`` is defined then :ref:`clusters
|
||||||
// <envoy_v3_api_msg_config.cluster.v3.Cluster>` must be defined in the :ref:`Bootstrap
|
// <envoy_v3_api_msg_config.cluster.v3.Cluster>` must be defined in the :ref:`Bootstrap
|
||||||
// static cluster resources
|
// static cluster resources
|
||||||
// <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.StaticResources.clusters>`. This is unrelated to
|
// <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.StaticResources.clusters>`. This is unrelated to
|
||||||
|
|
@ -403,7 +433,7 @@ message ClusterManager {
|
||||||
core.v3.BindConfig upstream_bind_config = 3;
|
core.v3.BindConfig upstream_bind_config = 3;
|
||||||
|
|
||||||
// A management server endpoint to stream load stats to via
|
// A management server endpoint to stream load stats to via
|
||||||
// *StreamLoadStats*. This must have :ref:`api_type
|
// ``StreamLoadStats``. This must have :ref:`api_type
|
||||||
// <envoy_v3_api_field_config.core.v3.ApiConfigSource.api_type>` :ref:`GRPC
|
// <envoy_v3_api_field_config.core.v3.ApiConfigSource.api_type>` :ref:`GRPC
|
||||||
// <envoy_v3_api_enum_value_config.core.v3.ApiConfigSource.ApiType.GRPC>`.
|
// <envoy_v3_api_enum_value_config.core.v3.ApiConfigSource.ApiType.GRPC>`.
|
||||||
core.v3.ApiConfigSource load_stats_config = 4;
|
core.v3.ApiConfigSource load_stats_config = 4;
|
||||||
|
|
@ -449,15 +479,15 @@ message Watchdog {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register actions that will fire on given WatchDog events.
|
// Register actions that will fire on given WatchDog events.
|
||||||
// See *WatchDogAction* for priority of events.
|
// See ``WatchDogAction`` for priority of events.
|
||||||
repeated WatchdogAction actions = 7;
|
repeated WatchdogAction actions = 7;
|
||||||
|
|
||||||
// The duration after which Envoy counts a nonresponsive thread in the
|
// The duration after which Envoy counts a nonresponsive thread in the
|
||||||
// *watchdog_miss* statistic. If not specified the default is 200ms.
|
// ``watchdog_miss`` statistic. If not specified the default is 200ms.
|
||||||
google.protobuf.Duration miss_timeout = 1;
|
google.protobuf.Duration miss_timeout = 1;
|
||||||
|
|
||||||
// The duration after which Envoy counts a nonresponsive thread in the
|
// The duration after which Envoy counts a nonresponsive thread in the
|
||||||
// *watchdog_mega_miss* statistic. If not specified the default is
|
// ``watchdog_mega_miss`` statistic. If not specified the default is
|
||||||
// 1000ms.
|
// 1000ms.
|
||||||
google.protobuf.Duration megamiss_timeout = 2;
|
google.protobuf.Duration megamiss_timeout = 2;
|
||||||
|
|
||||||
|
|
@ -466,20 +496,20 @@ message Watchdog {
|
||||||
// kill behavior. If not specified the default is 0 (disabled).
|
// kill behavior. If not specified the default is 0 (disabled).
|
||||||
google.protobuf.Duration kill_timeout = 3;
|
google.protobuf.Duration kill_timeout = 3;
|
||||||
|
|
||||||
// Defines the maximum jitter used to adjust the *kill_timeout* if *kill_timeout* is
|
// Defines the maximum jitter used to adjust the ``kill_timeout`` if ``kill_timeout`` is
|
||||||
// enabled. Enabling this feature would help to reduce risk of synchronized
|
// enabled. Enabling this feature would help to reduce risk of synchronized
|
||||||
// watchdog kill events across proxies due to external triggers. Set to 0 to
|
// watchdog kill events across proxies due to external triggers. Set to 0 to
|
||||||
// disable. If not specified the default is 0 (disabled).
|
// disable. If not specified the default is 0 (disabled).
|
||||||
google.protobuf.Duration max_kill_timeout_jitter = 6 [(validate.rules).duration = {gte {}}];
|
google.protobuf.Duration max_kill_timeout_jitter = 6 [(validate.rules).duration = {gte {}}];
|
||||||
|
|
||||||
// If max(2, ceil(registered_threads * Fraction(*multikill_threshold*)))
|
// If ``max(2, ceil(registered_threads * Fraction(*multikill_threshold*)))``
|
||||||
// threads have been nonresponsive for at least this duration kill the entire
|
// threads have been nonresponsive for at least this duration kill the entire
|
||||||
// Envoy process. Set to 0 to disable this behavior. If not specified the
|
// Envoy process. Set to 0 to disable this behavior. If not specified the
|
||||||
// default is 0 (disabled).
|
// default is 0 (disabled).
|
||||||
google.protobuf.Duration multikill_timeout = 4;
|
google.protobuf.Duration multikill_timeout = 4;
|
||||||
|
|
||||||
// Sets the threshold for *multikill_timeout* in terms of the percentage of
|
// Sets the threshold for ``multikill_timeout`` in terms of the percentage of
|
||||||
// nonresponsive threads required for the *multikill_timeout*.
|
// nonresponsive threads required for the ``multikill_timeout``.
|
||||||
// If not specified the default is 0.
|
// If not specified the default is 0.
|
||||||
type.v3.Percent multikill_threshold = 5;
|
type.v3.Percent multikill_threshold = 5;
|
||||||
}
|
}
|
||||||
|
|
@ -490,7 +520,7 @@ message Watchdog {
|
||||||
// have an out of band system to terminate the process.
|
// have an out of band system to terminate the process.
|
||||||
//
|
//
|
||||||
// The interface for the extension is ``Envoy::Server::Configuration::FatalAction``.
|
// The interface for the extension is ``Envoy::Server::Configuration::FatalAction``.
|
||||||
// *FatalAction* extensions live in the ``envoy.extensions.fatal_actions`` API
|
// ``FatalAction`` extensions live in the ``envoy.extensions.fatal_actions`` API
|
||||||
// namespace.
|
// namespace.
|
||||||
message FatalAction {
|
message FatalAction {
|
||||||
// Extension specific configuration for the action. It's expected to conform
|
// Extension specific configuration for the action. It's expected to conform
|
||||||
|
|
@ -570,7 +600,7 @@ message RuntimeLayer {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.config.bootstrap.v2.RuntimeLayer.RtdsLayer";
|
"envoy.config.bootstrap.v2.RuntimeLayer.RtdsLayer";
|
||||||
|
|
||||||
// Resource to subscribe to at *rtds_config* for the RTDS layer.
|
// Resource to subscribe to at ``rtds_config`` for the RTDS layer.
|
||||||
string name = 1;
|
string name = 1;
|
||||||
|
|
||||||
// RTDS configuration source.
|
// RTDS configuration source.
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Cluster configuration]
|
// [#protodoc-title: Cluster configuration]
|
||||||
|
|
||||||
// Cluster list collections. Entries are *Cluster* resources or references.
|
// Cluster list collections. Entries are ``Cluster`` resources or references.
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
message ClusterCollection {
|
message ClusterCollection {
|
||||||
xds.core.v3.CollectionEntry entries = 1;
|
xds.core.v3.CollectionEntry entries = 1;
|
||||||
|
|
@ -170,7 +170,7 @@ message Cluster {
|
||||||
// Optional endpoint metadata match criteria.
|
// Optional endpoint metadata match criteria.
|
||||||
// The connection to the endpoint with metadata matching what is set in this field
|
// The connection to the endpoint with metadata matching what is set in this field
|
||||||
// will use the transport socket configuration specified here.
|
// will use the transport socket configuration specified here.
|
||||||
// The endpoint's metadata entry in *envoy.transport_socket_match* is used to match
|
// The endpoint's metadata entry in ``envoy.transport_socket_match`` is used to match
|
||||||
// against the values specified in this field.
|
// against the values specified in this field.
|
||||||
google.protobuf.Struct match = 2;
|
google.protobuf.Struct match = 2;
|
||||||
|
|
||||||
|
|
@ -209,7 +209,7 @@ message Cluster {
|
||||||
|
|
||||||
// Optionally divide the endpoints in this cluster into subsets defined by
|
// Optionally divide the endpoints in this cluster into subsets defined by
|
||||||
// endpoint metadata and selected by route and weighted cluster metadata.
|
// endpoint metadata and selected by route and weighted cluster metadata.
|
||||||
// [#next-free-field: 8]
|
// [#next-free-field: 9]
|
||||||
message LbSubsetConfig {
|
message LbSubsetConfig {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.Cluster.LbSubsetConfig";
|
"envoy.api.v2.Cluster.LbSubsetConfig";
|
||||||
|
|
@ -225,6 +225,52 @@ message Cluster {
|
||||||
DEFAULT_SUBSET = 2;
|
DEFAULT_SUBSET = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum LbSubsetMetadataFallbackPolicy {
|
||||||
|
// No fallback. Route metadata will be used as-is.
|
||||||
|
METADATA_NO_FALLBACK = 0;
|
||||||
|
|
||||||
|
// A special metadata key ``fallback_list`` will be used to provide variants of metadata to try.
|
||||||
|
// Value of ``fallback_list`` key has to be a list. Every list element has to be a struct - it will
|
||||||
|
// be merged with route metadata, overriding keys that appear in both places.
|
||||||
|
// ``fallback_list`` entries will be used in order until a host is found.
|
||||||
|
//
|
||||||
|
// ``fallback_list`` key itself is removed from metadata before subset load balancing is performed.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// for metadata:
|
||||||
|
//
|
||||||
|
// .. code-block:: yaml
|
||||||
|
//
|
||||||
|
// version: 1.0
|
||||||
|
// fallback_list:
|
||||||
|
// - version: 2.0
|
||||||
|
// hardware: c64
|
||||||
|
// - hardware: c32
|
||||||
|
// - version: 3.0
|
||||||
|
//
|
||||||
|
// at first, metadata:
|
||||||
|
//
|
||||||
|
// .. code-block:: json
|
||||||
|
//
|
||||||
|
// {"version": "2.0", "hardware": "c64"}
|
||||||
|
//
|
||||||
|
// will be used for load balancing. If no host is found, metadata:
|
||||||
|
//
|
||||||
|
// .. code-block:: json
|
||||||
|
//
|
||||||
|
// {"version": "1.0", "hardware": "c32"}
|
||||||
|
//
|
||||||
|
// is next to try. If it still results in no host, finally metadata:
|
||||||
|
//
|
||||||
|
// .. code-block:: json
|
||||||
|
//
|
||||||
|
// {"version": "3.0"}
|
||||||
|
//
|
||||||
|
// is used.
|
||||||
|
FALLBACK_LIST = 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Specifications for subsets.
|
// Specifications for subsets.
|
||||||
message LbSubsetSelector {
|
message LbSubsetSelector {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
|
@ -260,12 +306,9 @@ message Cluster {
|
||||||
// Selects a mode of operation in which each subset has only one host. This mode uses the same rules for
|
// Selects a mode of operation in which each subset has only one host. This mode uses the same rules for
|
||||||
// choosing a host, but updating hosts is faster, especially for large numbers of hosts.
|
// choosing a host, but updating hosts is faster, especially for large numbers of hosts.
|
||||||
//
|
//
|
||||||
// If a match is found to a host, that host will be used regardless of priority levels, unless the host is unhealthy.
|
// If a match is found to a host, that host will be used regardless of priority levels.
|
||||||
//
|
//
|
||||||
// Currently, this mode is only supported if `subset_selectors` has only one entry, and `keys` contains
|
// When this mode is enabled, configurations that contain more than one host with the same metadata value for the single key in ``keys``
|
||||||
// only one entry.
|
|
||||||
//
|
|
||||||
// When this mode is enabled, configurations that contain more than one host with the same metadata value for the single key in `keys`
|
|
||||||
// will use only one of the hosts with the given key; no requests will be routed to the others. The cluster gauge
|
// will use only one of the hosts with the given key; no requests will be routed to the others. The cluster gauge
|
||||||
// :ref:`lb_subsets_single_host_per_subset_duplicate<config_cluster_manager_cluster_stats_subset_lb>` indicates how many duplicates are
|
// :ref:`lb_subsets_single_host_per_subset_duplicate<config_cluster_manager_cluster_stats_subset_lb>` indicates how many duplicates are
|
||||||
// present in the current configuration.
|
// present in the current configuration.
|
||||||
|
|
@ -284,7 +327,7 @@ message Cluster {
|
||||||
// For any other fallback policy the parameter is not used and should not be set.
|
// For any other fallback policy the parameter is not used and should not be set.
|
||||||
// Only values also present in
|
// Only values also present in
|
||||||
// :ref:`keys<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.keys>` are allowed, but
|
// :ref:`keys<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.keys>` are allowed, but
|
||||||
// `fallback_keys_subset` cannot be equal to `keys`.
|
// ``fallback_keys_subset`` cannot be equal to ``keys``.
|
||||||
repeated string fallback_keys_subset = 3;
|
repeated string fallback_keys_subset = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -297,14 +340,14 @@ message Cluster {
|
||||||
// fallback_policy is
|
// fallback_policy is
|
||||||
// :ref:`DEFAULT_SUBSET<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.DEFAULT_SUBSET>`.
|
// :ref:`DEFAULT_SUBSET<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.DEFAULT_SUBSET>`.
|
||||||
// Each field in default_subset is
|
// Each field in default_subset is
|
||||||
// compared to the matching LbEndpoint.Metadata under the *envoy.lb*
|
// compared to the matching LbEndpoint.Metadata under the ``envoy.lb``
|
||||||
// namespace. It is valid for no hosts to match, in which case the behavior
|
// namespace. It is valid for no hosts to match, in which case the behavior
|
||||||
// is the same as a fallback_policy of
|
// is the same as a fallback_policy of
|
||||||
// :ref:`NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
|
// :ref:`NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
|
||||||
google.protobuf.Struct default_subset = 2;
|
google.protobuf.Struct default_subset = 2;
|
||||||
|
|
||||||
// For each entry, LbEndpoint.Metadata's
|
// For each entry, LbEndpoint.Metadata's
|
||||||
// *envoy.lb* namespace is traversed and a subset is created for each unique
|
// ``envoy.lb`` namespace is traversed and a subset is created for each unique
|
||||||
// combination of key and value. For example:
|
// combination of key and value. For example:
|
||||||
//
|
//
|
||||||
// .. code-block:: json
|
// .. code-block:: json
|
||||||
|
|
@ -349,6 +392,16 @@ message Cluster {
|
||||||
// endpoint metadata if the endpoint metadata matches the value exactly OR it is a list value
|
// endpoint metadata if the endpoint metadata matches the value exactly OR it is a list value
|
||||||
// and any of the elements in the list matches the criteria.
|
// and any of the elements in the list matches the criteria.
|
||||||
bool list_as_any = 7;
|
bool list_as_any = 7;
|
||||||
|
|
||||||
|
// Fallback mechanism that allows to try different route metadata until a host is found.
|
||||||
|
// If load balancing process, including all its mechanisms (like
|
||||||
|
// :ref:`fallback_policy<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.fallback_policy>`)
|
||||||
|
// fails to select a host, this policy decides if and how the process is repeated using another metadata.
|
||||||
|
//
|
||||||
|
// The value defaults to
|
||||||
|
// :ref:`METADATA_NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetMetadataFallbackPolicy.METADATA_NO_FALLBACK>`.
|
||||||
|
LbSubsetMetadataFallbackPolicy metadata_fallback_policy = 8
|
||||||
|
[(validate.rules).enum = {defined_only: true}];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configuration for :ref:`slow start mode <arch_overview_load_balancing_slow_start>`.
|
// Configuration for :ref:`slow start mode <arch_overview_load_balancing_slow_start>`.
|
||||||
|
|
@ -365,8 +418,8 @@ message Cluster {
|
||||||
// By tuning the parameter, is possible to achieve polynomial or exponential shape of ramp-up curve.
|
// By tuning the parameter, is possible to achieve polynomial or exponential shape of ramp-up curve.
|
||||||
//
|
//
|
||||||
// During slow start window, effective weight of an endpoint would be scaled with time factor and aggression:
|
// During slow start window, effective weight of an endpoint would be scaled with time factor and aggression:
|
||||||
// `new_weight = weight * max(min_weight_percent, time_factor ^ (1 / aggression))`,
|
// ``new_weight = weight * max(min_weight_percent, time_factor ^ (1 / aggression))``,
|
||||||
// where `time_factor=(time_since_start_seconds / slow_start_time_seconds)`.
|
// where ``time_factor=(time_since_start_seconds / slow_start_time_seconds)``.
|
||||||
//
|
//
|
||||||
// As time progresses, more and more traffic would be sent to endpoint, which is in slow start window.
|
// As time progresses, more and more traffic would be sent to endpoint, which is in slow start window.
|
||||||
// Once host exits slow start, time_factor and aggression no longer affect its weight.
|
// Once host exits slow start, time_factor and aggression no longer affect its weight.
|
||||||
|
|
@ -397,18 +450,18 @@ message Cluster {
|
||||||
// The following formula is used to calculate the dynamic weights when hosts have different load
|
// The following formula is used to calculate the dynamic weights when hosts have different load
|
||||||
// balancing weights:
|
// balancing weights:
|
||||||
//
|
//
|
||||||
// `weight = load_balancing_weight / (active_requests + 1)^active_request_bias`
|
// ``weight = load_balancing_weight / (active_requests + 1)^active_request_bias``
|
||||||
//
|
//
|
||||||
// The larger the active request bias is, the more aggressively active requests will lower the
|
// The larger the active request bias is, the more aggressively active requests will lower the
|
||||||
// effective weight when all host weights are not equal.
|
// effective weight when all host weights are not equal.
|
||||||
//
|
//
|
||||||
// `active_request_bias` must be greater than or equal to 0.0.
|
// ``active_request_bias`` must be greater than or equal to 0.0.
|
||||||
//
|
//
|
||||||
// When `active_request_bias == 0.0` the Least Request Load Balancer doesn't consider the number
|
// When ``active_request_bias == 0.0`` the Least Request Load Balancer doesn't consider the number
|
||||||
// of active requests at the time it picks a host and behaves like the Round Robin Load
|
// of active requests at the time it picks a host and behaves like the Round Robin Load
|
||||||
// Balancer.
|
// Balancer.
|
||||||
//
|
//
|
||||||
// When `active_request_bias > 0.0` the Least Request Load Balancer scales the load balancing
|
// When ``active_request_bias > 0.0`` the Least Request Load Balancer scales the load balancing
|
||||||
// weight by the number of active requests at the time it does a pick.
|
// weight by the number of active requests at the time it does a pick.
|
||||||
//
|
//
|
||||||
// The value is cached for performance reasons and refreshed whenever one of the Load Balancer's
|
// The value is cached for performance reasons and refreshed whenever one of the Load Balancer's
|
||||||
|
|
@ -462,8 +515,8 @@ message Cluster {
|
||||||
// Specific configuration for the :ref:`Maglev<arch_overview_load_balancing_types_maglev>`
|
// Specific configuration for the :ref:`Maglev<arch_overview_load_balancing_types_maglev>`
|
||||||
// load balancing policy.
|
// load balancing policy.
|
||||||
message MaglevLbConfig {
|
message MaglevLbConfig {
|
||||||
// The table size for Maglev hashing. The Maglev aims for ‘minimal disruption’ rather than an absolute guarantee.
|
// The table size for Maglev hashing. Maglev aims for "minimal disruption" rather than an absolute guarantee.
|
||||||
// Minimal disruption means that when the set of upstreams changes, a connection will likely be sent to the same
|
// Minimal disruption means that when the set of upstream hosts change, a connection will likely be sent to the same
|
||||||
// upstream as it was before. Increasing the table size reduces the amount of disruption.
|
// upstream as it was before. Increasing the table size reduces the amount of disruption.
|
||||||
// The table size must be prime number limited to 5000011. If it is not specified, the default is 65537.
|
// The table size must be prime number limited to 5000011. If it is not specified, the default is 65537.
|
||||||
google.protobuf.UInt64Value table_size = 1 [(validate.rules).uint64 = {lte: 5000011}];
|
google.protobuf.UInt64Value table_size = 1 [(validate.rules).uint64 = {lte: 5000011}];
|
||||||
|
|
@ -472,6 +525,7 @@ message Cluster {
|
||||||
// Specific configuration for the
|
// Specific configuration for the
|
||||||
// :ref:`Original Destination <arch_overview_load_balancing_types_original_destination>`
|
// :ref:`Original Destination <arch_overview_load_balancing_types_original_destination>`
|
||||||
// load balancing policy.
|
// load balancing policy.
|
||||||
|
// [#extension: envoy.clusters.original_dst]
|
||||||
message OriginalDstLbConfig {
|
message OriginalDstLbConfig {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.Cluster.OriginalDstLbConfig";
|
"envoy.api.v2.Cluster.OriginalDstLbConfig";
|
||||||
|
|
@ -493,6 +547,10 @@ message Cluster {
|
||||||
// The http header to override destination address if :ref:`use_http_header <envoy_v3_api_field_config.cluster.v3.Cluster.OriginalDstLbConfig.use_http_header>`.
|
// The http header to override destination address if :ref:`use_http_header <envoy_v3_api_field_config.cluster.v3.Cluster.OriginalDstLbConfig.use_http_header>`.
|
||||||
// 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.
|
// 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.
|
||||||
string http_header_name = 2;
|
string http_header_name = 2;
|
||||||
|
|
||||||
|
// The port to override for the original dst address. This port
|
||||||
|
// will take precedence over filter state and header override ports
|
||||||
|
google.protobuf.UInt32Value upstream_port_override = 3 [(validate.rules).uint32 = {lte: 65535}];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Common configuration for all load balancer implementations.
|
// Common configuration for all load balancer implementations.
|
||||||
|
|
@ -539,7 +597,7 @@ message Cluster {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.Cluster.CommonLbConfig.ConsistentHashingLbConfig";
|
"envoy.api.v2.Cluster.CommonLbConfig.ConsistentHashingLbConfig";
|
||||||
|
|
||||||
// If set to `true`, the cluster will use hostname instead of the resolved
|
// If set to ``true``, the cluster will use hostname instead of the resolved
|
||||||
// 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.
|
// 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.
|
||||||
bool use_hostname_for_hashing = 1;
|
bool use_hostname_for_hashing = 1;
|
||||||
|
|
||||||
|
|
@ -551,7 +609,7 @@ message Cluster {
|
||||||
// Applies to both Ring Hash and Maglev load balancers.
|
// Applies to both Ring Hash and Maglev load balancers.
|
||||||
//
|
//
|
||||||
// This is implemented based on the method described in the paper https://arxiv.org/abs/1608.01350. For the specified
|
// This is implemented based on the method described in the paper https://arxiv.org/abs/1608.01350. For the specified
|
||||||
// `hash_balance_factor`, requests to any upstream host are capped at `hash_balance_factor/100` times the average number of requests
|
// ``hash_balance_factor``, requests to any upstream host are capped at ``hash_balance_factor/100`` times the average number of requests
|
||||||
// across the cluster. When a request arrives for an upstream host that is currently serving at its max capacity, linear probing
|
// across the cluster. When a request arrives for an upstream host that is currently serving at its max capacity, linear probing
|
||||||
// is used to identify an eligible host. Further, the linear probe is implemented using a random jump in hosts ring/table to identify
|
// is used to identify an eligible host. Further, the linear probe is implemented using a random jump in hosts ring/table to identify
|
||||||
// the eligible host (this technique is as described in the paper https://arxiv.org/abs/1908.08762 - the random jump avoids the
|
// the eligible host (this technique is as described in the paper https://arxiv.org/abs/1908.08762 - the random jump avoids the
|
||||||
|
|
@ -559,7 +617,7 @@ message Cluster {
|
||||||
//
|
//
|
||||||
// If weights are specified on the hosts, they are respected.
|
// If weights are specified on the hosts, they are respected.
|
||||||
//
|
//
|
||||||
// This is an O(N) algorithm, unlike other load balancers. Using a lower `hash_balance_factor` results in more hosts
|
// This is an O(N) algorithm, unlike other load balancers. Using a lower ``hash_balance_factor`` results in more hosts
|
||||||
// being probed, so use a higher value if you require better performance.
|
// being probed, so use a higher value if you require better performance.
|
||||||
google.protobuf.UInt32Value hash_balance_factor = 2 [(validate.rules).uint32 = {gte: 100}];
|
google.protobuf.UInt32Value hash_balance_factor = 2 [(validate.rules).uint32 = {gte: 100}];
|
||||||
}
|
}
|
||||||
|
|
@ -599,7 +657,7 @@ message Cluster {
|
||||||
// This will have no effect unless active health checking is also configured.
|
// This will have no effect unless active health checking is also configured.
|
||||||
bool ignore_new_hosts_until_first_hc = 5;
|
bool ignore_new_hosts_until_first_hc = 5;
|
||||||
|
|
||||||
// If set to `true`, the cluster manager will drain all existing
|
// If set to ``true``, the cluster manager will drain all existing
|
||||||
// connections to upstream hosts whenever hosts are added or removed from the cluster.
|
// connections to upstream hosts whenever hosts are added or removed from the cluster.
|
||||||
bool close_connections_on_host_set_change = 6;
|
bool close_connections_on_host_set_change = 6;
|
||||||
|
|
||||||
|
|
@ -664,7 +722,7 @@ message Cluster {
|
||||||
// Indicates how many many streams (rounded up) can be anticipated across a cluster for each
|
// Indicates how many many streams (rounded up) can be anticipated across a cluster for each
|
||||||
// stream, useful for low QPS services. This is currently supported for a subset of
|
// stream, useful for low QPS services. This is currently supported for a subset of
|
||||||
// deterministic non-hash-based load-balancing algorithms (weighted round robin, random).
|
// deterministic non-hash-based load-balancing algorithms (weighted round robin, random).
|
||||||
// Unlike *per_upstream_preconnect_ratio* this preconnects across the upstream instances in a
|
// Unlike ``per_upstream_preconnect_ratio`` this preconnects across the upstream instances in a
|
||||||
// cluster, doing best effort predictions of what upstream would be picked next and
|
// cluster, doing best effort predictions of what upstream would be picked next and
|
||||||
// pre-establishing a connection.
|
// pre-establishing a connection.
|
||||||
//
|
//
|
||||||
|
|
@ -692,7 +750,7 @@ message Cluster {
|
||||||
reserved "hosts", "tls_context", "extension_protocol_options";
|
reserved "hosts", "tls_context", "extension_protocol_options";
|
||||||
|
|
||||||
// Configuration to use different transport sockets for different endpoints.
|
// Configuration to use different transport sockets for different endpoints.
|
||||||
// The entry of *envoy.transport_socket_match* in the
|
// The entry of ``envoy.transport_socket_match`` in the
|
||||||
// :ref:`LbEndpoint.Metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`
|
// :ref:`LbEndpoint.Metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`
|
||||||
// is used to match against the transport sockets as they appear in the list. The first
|
// is used to match against the transport sockets as they appear in the list. The first
|
||||||
// :ref:`match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` is used.
|
// :ref:`match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` is used.
|
||||||
|
|
@ -712,16 +770,16 @@ message Cluster {
|
||||||
// transport_socket:
|
// transport_socket:
|
||||||
// name: envoy.transport_sockets.raw_buffer
|
// name: envoy.transport_sockets.raw_buffer
|
||||||
//
|
//
|
||||||
// Connections to the endpoints whose metadata value under *envoy.transport_socket_match*
|
// Connections to the endpoints whose metadata value under ``envoy.transport_socket_match``
|
||||||
// having "acceptMTLS"/"true" key/value pair use the "enableMTLS" socket configuration.
|
// having "acceptMTLS"/"true" key/value pair use the "enableMTLS" socket configuration.
|
||||||
//
|
//
|
||||||
// If a :ref:`socket match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` with empty match
|
// If a :ref:`socket match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` with empty match
|
||||||
// criteria is provided, that always match any endpoint. For example, the "defaultToPlaintext"
|
// criteria is provided, that always match any endpoint. For example, the "defaultToPlaintext"
|
||||||
// socket match in case above.
|
// socket match in case above.
|
||||||
//
|
//
|
||||||
// If an endpoint metadata's value under *envoy.transport_socket_match* does not match any
|
// If an endpoint metadata's value under ``envoy.transport_socket_match`` does not match any
|
||||||
// *TransportSocketMatch*, socket configuration fallbacks to use the *tls_context* or
|
// ``TransportSocketMatch``, socket configuration fallbacks to use the ``tls_context`` or
|
||||||
// *transport_socket* specified in this cluster.
|
// ``transport_socket`` specified in this cluster.
|
||||||
//
|
//
|
||||||
// This field allows gradual and flexible transport socket configuration changes.
|
// This field allows gradual and flexible transport socket configuration changes.
|
||||||
//
|
//
|
||||||
|
|
@ -732,8 +790,8 @@ message Cluster {
|
||||||
//
|
//
|
||||||
// Then the xDS server can configure the CDS to a client, Envoy A, to send mutual TLS
|
// Then the xDS server can configure the CDS to a client, Envoy A, to send mutual TLS
|
||||||
// traffic for endpoints with "acceptMTLS": "true", by adding a corresponding
|
// traffic for endpoints with "acceptMTLS": "true", by adding a corresponding
|
||||||
// *TransportSocketMatch* in this field. Other client Envoys receive CDS without
|
// ``TransportSocketMatch`` in this field. Other client Envoys receive CDS without
|
||||||
// *transport_socket_match* set, and still send plain text traffic to the same cluster.
|
// ``transport_socket_match`` set, and still send plain text traffic to the same cluster.
|
||||||
//
|
//
|
||||||
// This field can be used to specify custom transport socket configurations for health
|
// This field can be used to specify custom transport socket configurations for health
|
||||||
// checks by adding matching key/value pairs in a health check's
|
// checks by adding matching key/value pairs in a health check's
|
||||||
|
|
@ -787,7 +845,7 @@ message Cluster {
|
||||||
// :ref:`STATIC<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STATIC>`,
|
// :ref:`STATIC<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STATIC>`,
|
||||||
// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
|
// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
|
||||||
// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>` clusters.
|
// or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>` clusters.
|
||||||
// This field supersedes the *hosts* field in the v2 API.
|
// This field supersedes the ``hosts`` field in the v2 API.
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
|
|
@ -856,7 +914,7 @@ message Cluster {
|
||||||
// set so that Envoy will assume that the upstream supports HTTP/2 when
|
// set so that Envoy will assume that the upstream supports HTTP/2 when
|
||||||
// making new HTTP connection pool connections. Currently, Envoy only
|
// making new HTTP connection pool connections. Currently, Envoy only
|
||||||
// supports prior knowledge for upstream connections. Even if TLS is used
|
// supports prior knowledge for upstream connections. Even if TLS is used
|
||||||
// with ALPN, `http2_protocol_options` must be specified. As an aside this allows HTTP/2
|
// with ALPN, ``http2_protocol_options`` must be specified. As an aside this allows HTTP/2
|
||||||
// connections to happen over plain text.
|
// connections to happen over plain text.
|
||||||
// This has been deprecated in favor of http2_protocol_options fields in the
|
// This has been deprecated in favor of http2_protocol_options fields in the
|
||||||
// :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>`
|
// :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>`
|
||||||
|
|
@ -920,13 +978,13 @@ message Cluster {
|
||||||
// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
|
// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
|
||||||
// and :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`
|
// and :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`
|
||||||
// this setting is ignored.
|
// this setting is ignored.
|
||||||
// This field is deprecated in favor of *dns_resolution_config*
|
// This field is deprecated in favor of ``dns_resolution_config``
|
||||||
// which aggregates all of the DNS resolver configuration in a single message.
|
// which aggregates all of the DNS resolver configuration in a single message.
|
||||||
repeated core.v3.Address dns_resolvers = 18
|
repeated core.v3.Address dns_resolvers = 18
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// Always use TCP queries instead of UDP queries for DNS lookups.
|
// Always use TCP queries instead of UDP queries for DNS lookups.
|
||||||
// This field is deprecated in favor of *dns_resolution_config*
|
// This field is deprecated in favor of ``dns_resolution_config``
|
||||||
// which aggregates all of the DNS resolver configuration in a single message.
|
// which aggregates all of the DNS resolver configuration in a single message.
|
||||||
bool use_tcp_for_dns_lookups = 45
|
bool use_tcp_for_dns_lookups = 45
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
@ -941,12 +999,12 @@ message Cluster {
|
||||||
// or any other DNS resolver types and the related parameters.
|
// or any other DNS resolver types and the related parameters.
|
||||||
// For example, an object of
|
// For example, an object of
|
||||||
// :ref:`CaresDnsResolverConfig <envoy_v3_api_msg_extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig>`
|
// :ref:`CaresDnsResolverConfig <envoy_v3_api_msg_extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig>`
|
||||||
// can be packed into this *typed_dns_resolver_config*. This configuration replaces the
|
// can be packed into this ``typed_dns_resolver_config``. This configuration replaces the
|
||||||
// :ref:`dns_resolution_config <envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolution_config>`
|
// :ref:`dns_resolution_config <envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolution_config>`
|
||||||
// configuration.
|
// configuration.
|
||||||
// During the transition period when both *dns_resolution_config* and *typed_dns_resolver_config* exists,
|
// During the transition period when both ``dns_resolution_config`` and ``typed_dns_resolver_config`` exists,
|
||||||
// when *typed_dns_resolver_config* is in place, Envoy will use it and ignore *dns_resolution_config*.
|
// when ``typed_dns_resolver_config`` is in place, Envoy will use it and ignore ``dns_resolution_config``.
|
||||||
// When *typed_dns_resolver_config* is missing, the default behavior is in place.
|
// When ``typed_dns_resolver_config`` is missing, the default behavior is in place.
|
||||||
// [#extension-category: envoy.network.dns_resolver]
|
// [#extension-category: envoy.network.dns_resolver]
|
||||||
core.v3.TypedExtensionConfig typed_dns_resolver_config = 55;
|
core.v3.TypedExtensionConfig typed_dns_resolver_config = 55;
|
||||||
|
|
||||||
|
|
@ -1014,8 +1072,8 @@ message Cluster {
|
||||||
CommonLbConfig common_lb_config = 27;
|
CommonLbConfig common_lb_config = 27;
|
||||||
|
|
||||||
// Optional custom transport socket implementation to use for upstream connections.
|
// Optional custom transport socket implementation to use for upstream connections.
|
||||||
// To setup TLS, set a transport socket with name `envoy.transport_sockets.tls` and
|
// To setup TLS, set a transport socket with name ``envoy.transport_sockets.tls`` and
|
||||||
// :ref:`UpstreamTlsContexts <envoy_v3_api_msg_extensions.transport_sockets.tls.v3.UpstreamTlsContext>` in the `typed_config`.
|
// :ref:`UpstreamTlsContexts <envoy_v3_api_msg_extensions.transport_sockets.tls.v3.UpstreamTlsContext>` in the ``typed_config``.
|
||||||
// If no transport socket configuration is specified, new connections
|
// If no transport socket configuration is specified, new connections
|
||||||
// will be set up with plaintext.
|
// will be set up with plaintext.
|
||||||
core.v3.TransportSocket transport_socket = 24;
|
core.v3.TransportSocket transport_socket = 24;
|
||||||
|
|
@ -1024,7 +1082,7 @@ message Cluster {
|
||||||
// cluster. It can be used for stats, logging, and varying filter behavior.
|
// cluster. It can be used for stats, logging, and varying filter behavior.
|
||||||
// Fields should use reverse DNS notation to denote which entity within Envoy
|
// Fields should use reverse DNS notation to denote which entity within Envoy
|
||||||
// will need the information. For instance, if the metadata is intended for
|
// will need the information. For instance, if the metadata is intended for
|
||||||
// the Router filter, the filter name should be specified as *envoy.filters.http.router*.
|
// the Router filter, the filter name should be specified as ``envoy.filters.http.router``.
|
||||||
core.v3.Metadata metadata = 25;
|
core.v3.Metadata metadata = 25;
|
||||||
|
|
||||||
// Determines how Envoy selects the protocol used to speak to upstream hosts.
|
// Determines how Envoy selects the protocol used to speak to upstream hosts.
|
||||||
|
|
@ -1092,7 +1150,7 @@ message Cluster {
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
// This field has been deprecated in favor of `timeout_budgets`, part of
|
// This field has been deprecated in favor of ``timeout_budgets``, part of
|
||||||
// :ref:`track_cluster_stats <envoy_v3_api_field_config.cluster.v3.Cluster.track_cluster_stats>`.
|
// :ref:`track_cluster_stats <envoy_v3_api_field_config.cluster.v3.Cluster.track_cluster_stats>`.
|
||||||
bool track_timeout_budgets = 47
|
bool track_timeout_budgets = 47
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
@ -1103,7 +1161,7 @@ message Cluster {
|
||||||
// TCP upstreams.
|
// TCP upstreams.
|
||||||
//
|
//
|
||||||
// For HTTP traffic, Envoy will generally take downstream HTTP and send it upstream as upstream
|
// For HTTP traffic, Envoy will generally take downstream HTTP and send it upstream as upstream
|
||||||
// HTTP, using the http connection pool and the codec from `http2_protocol_options`
|
// HTTP, using the http connection pool and the codec from ``http2_protocol_options``
|
||||||
//
|
//
|
||||||
// For routes where CONNECT termination is configured, Envoy will take downstream CONNECT
|
// For routes where CONNECT termination is configured, Envoy will take downstream CONNECT
|
||||||
// requests and forward the CONNECT payload upstream over raw TCP using the tcp connection pool.
|
// requests and forward the CONNECT payload upstream over raw TCP using the tcp connection pool.
|
||||||
|
|
@ -1123,7 +1181,7 @@ message Cluster {
|
||||||
// Preconnect configuration for this cluster.
|
// Preconnect configuration for this cluster.
|
||||||
PreconnectPolicy preconnect_policy = 50;
|
PreconnectPolicy preconnect_policy = 50;
|
||||||
|
|
||||||
// If `connection_pool_per_downstream_connection` is true, the cluster will use a separate
|
// If ``connection_pool_per_downstream_connection`` is true, the cluster will use a separate
|
||||||
// connection pool for every downstream connection
|
// connection pool for every downstream connection
|
||||||
bool connection_pool_per_downstream_connection = 51;
|
bool connection_pool_per_downstream_connection = 51;
|
||||||
}
|
}
|
||||||
|
|
@ -1158,6 +1216,7 @@ message LoadBalancingPolicy {
|
||||||
|
|
||||||
reserved "config", "name", "typed_config";
|
reserved "config", "name", "typed_config";
|
||||||
|
|
||||||
|
// [#extension-category: envoy.load_balancing_policies]
|
||||||
core.v3.TypedExtensionConfig typed_extension_config = 4;
|
core.v3.TypedExtensionConfig typed_extension_config = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1167,15 +1226,6 @@ message LoadBalancingPolicy {
|
||||||
repeated Policy policies = 1;
|
repeated Policy policies = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// An extensible structure containing the address Envoy should bind to when
|
|
||||||
// establishing upstream connections.
|
|
||||||
message UpstreamBindConfig {
|
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.UpstreamBindConfig";
|
|
||||||
|
|
||||||
// The address Envoy should bind to when establishing upstream connections.
|
|
||||||
core.v3.Address source_address = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message UpstreamConnectionOptions {
|
message UpstreamConnectionOptions {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.UpstreamConnectionOptions";
|
"envoy.api.v2.UpstreamConnectionOptions";
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,9 @@ message OutlierDetection {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.cluster.OutlierDetection";
|
"envoy.api.v2.cluster.OutlierDetection";
|
||||||
|
|
||||||
// The number of consecutive 5xx responses or local origin errors that are mapped
|
// The number of consecutive server-side error responses (for HTTP traffic,
|
||||||
// to 5xx error codes before a consecutive 5xx ejection
|
// 5xx responses; for TCP traffic, connection failures; for Redis, failure to
|
||||||
// occurs. Defaults to 5.
|
// respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.
|
||||||
google.protobuf.UInt32Value consecutive_5xx = 1;
|
google.protobuf.UInt32Value consecutive_5xx = 1;
|
||||||
|
|
||||||
// The time interval between ejection analysis sweeps. This can result in
|
// The time interval between ejection analysis sweeps. This can result in
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import "envoy/config/core/v3/socket_option.proto";
|
||||||
|
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
import "envoy/annotations/deprecation.proto";
|
||||||
import "udpa/annotations/status.proto";
|
import "udpa/annotations/status.proto";
|
||||||
import "udpa/annotations/versioning.proto";
|
import "udpa/annotations/versioning.proto";
|
||||||
import "validate/validate.proto";
|
import "validate/validate.proto";
|
||||||
|
|
@ -32,15 +33,20 @@ message Pipe {
|
||||||
}
|
}
|
||||||
|
|
||||||
// The address represents an envoy internal listener.
|
// The address represents an envoy internal listener.
|
||||||
// [#comment: TODO(lambdai): Make this address available for listener and endpoint.
|
// [#comment: TODO(asraa): When address available, remove workaround from test/server/server_fuzz_test.cc:30.]
|
||||||
// TODO(asraa): When address available, remove workaround from test/server/server_fuzz_test.cc:30.]
|
|
||||||
message EnvoyInternalAddress {
|
message EnvoyInternalAddress {
|
||||||
oneof address_name_specifier {
|
oneof address_name_specifier {
|
||||||
option (validate.required) = true;
|
option (validate.required) = true;
|
||||||
|
|
||||||
// [#not-implemented-hide:] The :ref:`listener name <envoy_v3_api_field_config.listener.v3.Listener.name>` of the destination internal listener.
|
// Specifies the :ref:`name <envoy_v3_api_field_config.listener.v3.Listener.name>` of the
|
||||||
|
// internal listener.
|
||||||
string server_listener_name = 1;
|
string server_listener_name = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Specifies an endpoint identifier to distinguish between multiple endpoints for the same internal listener in a
|
||||||
|
// single upstream pool. Only used in the upstream addresses for tracking changes to individual endpoints. This, for
|
||||||
|
// example, may be set to the final destination IP for the target internal listener.
|
||||||
|
string endpoint_id = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 7]
|
// [#next-free-field: 7]
|
||||||
|
|
@ -62,8 +68,8 @@ message SocketAddress {
|
||||||
// within an upstream :ref:`BindConfig <envoy_v3_api_msg_config.core.v3.BindConfig>`, the address
|
// within an upstream :ref:`BindConfig <envoy_v3_api_msg_config.core.v3.BindConfig>`, the address
|
||||||
// controls the source address of outbound connections. For :ref:`clusters
|
// controls the source address of outbound connections. For :ref:`clusters
|
||||||
// <envoy_v3_api_msg_config.cluster.v3.Cluster>`, the cluster type determines whether the
|
// <envoy_v3_api_msg_config.cluster.v3.Cluster>`, the cluster type determines whether the
|
||||||
// address must be an IP (*STATIC* or *EDS* clusters) or a hostname resolved by DNS
|
// address must be an IP (``STATIC`` or ``EDS`` clusters) or a hostname resolved by DNS
|
||||||
// (*STRICT_DNS* or *LOGICAL_DNS* clusters). Address resolution can be customized
|
// (``STRICT_DNS`` or ``LOGICAL_DNS`` clusters). Address resolution can be customized
|
||||||
// via :ref:`resolver_name <envoy_v3_api_field_config.core.v3.SocketAddress.resolver_name>`.
|
// via :ref:`resolver_name <envoy_v3_api_field_config.core.v3.SocketAddress.resolver_name>`.
|
||||||
string address = 2 [(validate.rules).string = {min_len: 1}];
|
string address = 2 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
|
|
@ -82,7 +88,7 @@ message SocketAddress {
|
||||||
// this is empty, a context dependent default applies. If the address is a concrete
|
// this is empty, a context dependent default applies. If the address is a concrete
|
||||||
// IP address, no resolution will occur. If address is a hostname this
|
// IP address, no resolution will occur. If address is a hostname this
|
||||||
// should be set for resolution other than DNS. Specifying a custom resolver with
|
// should be set for resolution other than DNS. Specifying a custom resolver with
|
||||||
// *STRICT_DNS* or *LOGICAL_DNS* will generate an error at runtime.
|
// ``STRICT_DNS`` or ``LOGICAL_DNS`` will generate an error at runtime.
|
||||||
string resolver_name = 5;
|
string resolver_name = 5;
|
||||||
|
|
||||||
// When binding to an IPv6 address above, this enables `IPv4 compatibility
|
// When binding to an IPv6 address above, this enables `IPv4 compatibility
|
||||||
|
|
@ -110,17 +116,32 @@ message TcpKeepalive {
|
||||||
google.protobuf.UInt32Value keepalive_interval = 3;
|
google.protobuf.UInt32Value keepalive_interval = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message ExtraSourceAddress {
|
||||||
|
// The additional address to bind.
|
||||||
|
SocketAddress address = 1 [(validate.rules).message = {required: true}];
|
||||||
|
|
||||||
|
// Additional socket options that may not be present in Envoy source code or
|
||||||
|
// precompiled binaries. If specified, this will override the
|
||||||
|
// :ref:`socket_options <envoy_v3_api_field_config.core.v3.BindConfig.socket_options>`
|
||||||
|
// in the BindConfig. If specified with no
|
||||||
|
// :ref:`socket_options <envoy_v3_api_field_config.core.v3.SocketOptionsOverride.socket_options>`
|
||||||
|
// or an empty list of :ref:`socket_options <envoy_v3_api_field_config.core.v3.SocketOptionsOverride.socket_options>`,
|
||||||
|
// it means no socket option will apply.
|
||||||
|
SocketOptionsOverride socket_options = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// [#next-free-field: 6]
|
||||||
message BindConfig {
|
message BindConfig {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.BindConfig";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.BindConfig";
|
||||||
|
|
||||||
// The address to bind to when creating a socket.
|
// The address to bind to when creating a socket.
|
||||||
SocketAddress source_address = 1 [(validate.rules).message = {required: true}];
|
SocketAddress source_address = 1;
|
||||||
|
|
||||||
// Whether to set the *IP_FREEBIND* option when creating the socket. When this
|
// Whether to set the ``IP_FREEBIND`` option when creating the socket. When this
|
||||||
// flag is set to true, allows the :ref:`source_address
|
// flag is set to true, allows the :ref:`source_address
|
||||||
// <envoy_v3_api_field_config.cluster.v3.UpstreamBindConfig.source_address>` to be an IP address
|
// <envoy_v3_api_field_config.core.v3.BindConfig.source_address>` to be an IP address
|
||||||
// that is not configured on the system running Envoy. When this flag is set
|
// that is not configured on the system running Envoy. When this flag is set
|
||||||
// to false, the option *IP_FREEBIND* is disabled on the socket. When this
|
// to false, the option ``IP_FREEBIND`` is disabled on the socket. When this
|
||||||
// flag is not set (default), the socket is not modified, i.e. the option is
|
// flag is not set (default), the socket is not modified, i.e. the option is
|
||||||
// neither enabled nor disabled.
|
// neither enabled nor disabled.
|
||||||
google.protobuf.BoolValue freebind = 2;
|
google.protobuf.BoolValue freebind = 2;
|
||||||
|
|
@ -128,6 +149,21 @@ message BindConfig {
|
||||||
// Additional socket options that may not be present in Envoy source code or
|
// Additional socket options that may not be present in Envoy source code or
|
||||||
// precompiled binaries.
|
// precompiled binaries.
|
||||||
repeated SocketOption socket_options = 3;
|
repeated SocketOption socket_options = 3;
|
||||||
|
|
||||||
|
// Extra source addresses appended to the address specified in the `source_address`
|
||||||
|
// field. This enables to specify multiple source addresses. Currently, only one extra
|
||||||
|
// address can be supported, and the extra address should have a different IP version
|
||||||
|
// with the address in the `source_address` field. The address which has the same IP
|
||||||
|
// version with the target host's address IP version will be used as bind address. If more
|
||||||
|
// than one extra address specified, only the first address matched IP version will be
|
||||||
|
// returned. If there is no same IP version address found, the address in the `source_address`
|
||||||
|
// will be returned.
|
||||||
|
repeated ExtraSourceAddress extra_source_addresses = 5;
|
||||||
|
|
||||||
|
// Deprecated by
|
||||||
|
// :ref:`extra_source_addresses <envoy_v3_api_field_config.core.v3.BindConfig.extra_source_addresses>`
|
||||||
|
repeated SocketAddress additional_source_addresses = 4
|
||||||
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Addresses specify either a logical or physical address and port, which are
|
// Addresses specify either a logical or physical address and port, which are
|
||||||
|
|
@ -143,7 +179,8 @@ message Address {
|
||||||
|
|
||||||
Pipe pipe = 2;
|
Pipe pipe = 2;
|
||||||
|
|
||||||
// [#not-implemented-hide:]
|
// Specifies a user-space address handled by :ref:`internal listeners
|
||||||
|
// <envoy_v3_api_field_config.listener.v3.Listener.internal_listener>`.
|
||||||
EnvoyInternalAddress envoy_internal_address = 3;
|
EnvoyInternalAddress envoy_internal_address = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ option java_multiple_files = true;
|
||||||
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Backoff Strategy]
|
// [#protodoc-title: Backoff strategy]
|
||||||
|
|
||||||
// Configuration defining a jittered exponential back off strategy.
|
// Configuration defining a jittered exponential back off strategy.
|
||||||
message BackoffStrategy {
|
message BackoffStrategy {
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ message BuildVersion {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Version and identification for an Envoy extension.
|
// Version and identification for an Envoy extension.
|
||||||
// [#next-free-field: 6]
|
// [#next-free-field: 7]
|
||||||
message Extension {
|
message Extension {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.Extension";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.Extension";
|
||||||
|
|
||||||
|
|
@ -121,7 +121,8 @@ message Extension {
|
||||||
// [#not-implemented-hide:] Type descriptor of extension configuration proto.
|
// [#not-implemented-hide:] Type descriptor of extension configuration proto.
|
||||||
// [#comment:TODO(yanavlasov): Link to the doc with existing configuration protos.]
|
// [#comment:TODO(yanavlasov): Link to the doc with existing configuration protos.]
|
||||||
// [#comment:TODO(yanavlasov): Add tests when PR #9391 lands.]
|
// [#comment:TODO(yanavlasov): Add tests when PR #9391 lands.]
|
||||||
string type_descriptor = 3;
|
string type_descriptor = 3
|
||||||
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// The version is a property of the extension and maintained independently
|
// The version is a property of the extension and maintained independently
|
||||||
// of other extensions and the Envoy API.
|
// of other extensions and the Envoy API.
|
||||||
|
|
@ -130,6 +131,9 @@ message Extension {
|
||||||
|
|
||||||
// Indicates that the extension is present but was disabled via dynamic configuration.
|
// Indicates that the extension is present but was disabled via dynamic configuration.
|
||||||
bool disabled = 5;
|
bool disabled = 5;
|
||||||
|
|
||||||
|
// Type URLs of extension configuration protos.
|
||||||
|
repeated string type_urls = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Identifies a specific Envoy instance. The node identifier is presented to the
|
// Identifies a specific Envoy instance. The node identifier is presented to the
|
||||||
|
|
@ -197,7 +201,7 @@ message Node {
|
||||||
|
|
||||||
// Client feature support list. These are well known features described
|
// Client feature support list. These are well known features described
|
||||||
// in the Envoy API repository for a given major version of an API. Client features
|
// in the Envoy API repository for a given major version of an API. Client features
|
||||||
// use reverse DNS naming scheme, for example `com.acme.feature`.
|
// use reverse DNS naming scheme, for example ``com.acme.feature``.
|
||||||
// See :ref:`the list of features <client_features>` that xDS client may
|
// See :ref:`the list of features <client_features>` that xDS client may
|
||||||
// support.
|
// support.
|
||||||
repeated string client_features = 10;
|
repeated string client_features = 10;
|
||||||
|
|
@ -205,7 +209,7 @@ message Node {
|
||||||
// Known listening ports on the node as a generic hint to the management server
|
// Known listening ports on the node as a generic hint to the management server
|
||||||
// for filtering :ref:`listeners <config_listeners>` to be returned. For example,
|
// for filtering :ref:`listeners <config_listeners>` to be returned. For example,
|
||||||
// if there is a listener bound to port 80, the list can optionally contain the
|
// if there is a listener bound to port 80, the list can optionally contain the
|
||||||
// SocketAddress `(0.0.0.0,80)`. The field is optional and just a hint.
|
// SocketAddress ``(0.0.0.0,80)``. The field is optional and just a hint.
|
||||||
repeated Address listening_addresses = 11
|
repeated Address listening_addresses = 11
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
}
|
}
|
||||||
|
|
@ -235,20 +239,20 @@ message Node {
|
||||||
message Metadata {
|
message Metadata {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.Metadata";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.Metadata";
|
||||||
|
|
||||||
// Key is the reverse DNS filter name, e.g. com.acme.widget. The envoy.*
|
// Key is the reverse DNS filter name, e.g. com.acme.widget. The ``envoy.*``
|
||||||
// namespace is reserved for Envoy's built-in filters.
|
// namespace is reserved for Envoy's built-in filters.
|
||||||
// If both *filter_metadata* and
|
// If both ``filter_metadata`` and
|
||||||
// :ref:`typed_filter_metadata <envoy_v3_api_field_config.core.v3.Metadata.typed_filter_metadata>`
|
// :ref:`typed_filter_metadata <envoy_v3_api_field_config.core.v3.Metadata.typed_filter_metadata>`
|
||||||
// fields are present in the metadata with same keys,
|
// fields are present in the metadata with same keys,
|
||||||
// only *typed_filter_metadata* field will be parsed.
|
// only ``typed_filter_metadata`` field will be parsed.
|
||||||
map<string, google.protobuf.Struct> filter_metadata = 1;
|
map<string, google.protobuf.Struct> filter_metadata = 1;
|
||||||
|
|
||||||
// Key is the reverse DNS filter name, e.g. com.acme.widget. The envoy.*
|
// Key is the reverse DNS filter name, e.g. com.acme.widget. The ``envoy.*``
|
||||||
// namespace is reserved for Envoy's built-in filters.
|
// namespace is reserved for Envoy's built-in filters.
|
||||||
// The value is encoded as google.protobuf.Any.
|
// The value is encoded as google.protobuf.Any.
|
||||||
// If both :ref:`filter_metadata <envoy_v3_api_field_config.core.v3.Metadata.filter_metadata>`
|
// If both :ref:`filter_metadata <envoy_v3_api_field_config.core.v3.Metadata.filter_metadata>`
|
||||||
// and *typed_filter_metadata* fields are present in the metadata with same keys,
|
// and ``typed_filter_metadata`` fields are present in the metadata with same keys,
|
||||||
// only *typed_filter_metadata* field will be parsed.
|
// only ``typed_filter_metadata`` field will be parsed.
|
||||||
map<string, google.protobuf.Any> typed_filter_metadata = 2;
|
map<string, google.protobuf.Any> typed_filter_metadata = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -319,7 +323,7 @@ message HeaderValue {
|
||||||
//
|
//
|
||||||
// The same :ref:`format specifier <config_access_log_format>` as used for
|
// The same :ref:`format specifier <config_access_log_format>` as used for
|
||||||
// :ref:`HTTP access logging <config_access_log>` applies here, however
|
// :ref:`HTTP access logging <config_access_log>` applies here, however
|
||||||
// unknown header values are replaced with the empty string instead of `-`.
|
// unknown header values are replaced with the empty string instead of ``-``.
|
||||||
string value = 2 [
|
string value = 2 [
|
||||||
(validate.rules).string = {max_bytes: 16384 well_known_regex: HTTP_HEADER_VALUE strict: false}
|
(validate.rules).string = {max_bytes: 16384 well_known_regex: HTTP_HEADER_VALUE strict: false}
|
||||||
];
|
];
|
||||||
|
|
@ -352,11 +356,25 @@ message HeaderValueOption {
|
||||||
|
|
||||||
// Should the value be appended? If true (default), the value is appended to
|
// Should the value be appended? If true (default), the value is appended to
|
||||||
// existing values. Otherwise it replaces any existing values.
|
// existing values. Otherwise it replaces any existing values.
|
||||||
google.protobuf.BoolValue append = 2;
|
// This field is deprecated and please use
|
||||||
|
// :ref:`append_action <envoy_v3_api_field_config.core.v3.HeaderValueOption.append_action>` as replacement.
|
||||||
|
//
|
||||||
|
// .. note::
|
||||||
|
// The :ref:`external authorization service <envoy_v3_api_msg_service.auth.v3.CheckResponse>` and
|
||||||
|
// :ref:`external processor service <envoy_v3_api_msg_service.ext_proc.v3.ProcessingResponse>` have
|
||||||
|
// default value (``false``) for this field.
|
||||||
|
google.protobuf.BoolValue append = 2
|
||||||
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// [#not-implemented-hide:] Describes the action taken to append/overwrite the given value for an existing header
|
// Describes the action taken to append/overwrite the given value for an existing header
|
||||||
// or to only add this header if it's absent. Value defaults to :ref:`APPEND_IF_EXISTS_OR_ADD<envoy_v3_api_enum_value_config.core.v3.HeaderValueOption.HeaderAppendAction.APPEND_IF_EXISTS_OR_ADD>`.
|
// or to only add this header if it's absent.
|
||||||
|
// Value defaults to :ref:`APPEND_IF_EXISTS_OR_ADD
|
||||||
|
// <envoy_v3_api_enum_value_config.core.v3.HeaderValueOption.HeaderAppendAction.APPEND_IF_EXISTS_OR_ADD>`.
|
||||||
HeaderAppendAction append_action = 3 [(validate.rules).enum = {defined_only: true}];
|
HeaderAppendAction append_action = 3 [(validate.rules).enum = {defined_only: true}];
|
||||||
|
|
||||||
|
// Is the header value allowed to be empty? If false (default), custom headers with empty values are dropped,
|
||||||
|
// otherwise they are added.
|
||||||
|
bool keep_empty_value = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wrapper for a set of headers.
|
// Wrapper for a set of headers.
|
||||||
|
|
@ -469,7 +487,7 @@ message TransportSocket {
|
||||||
// :ref:`FractionalPercent <envoy_v3_api_msg_type.v3.FractionalPercent>` proto represented as JSON/YAML
|
// :ref:`FractionalPercent <envoy_v3_api_msg_type.v3.FractionalPercent>` proto represented as JSON/YAML
|
||||||
// and may also be represented as an integer with the assumption that the value is an integral
|
// and may also be represented as an integer with the assumption that the value is an integral
|
||||||
// percentage out of 100. For instance, a runtime key lookup returning the value "42" would parse
|
// percentage out of 100. For instance, a runtime key lookup returning the value "42" would parse
|
||||||
// as a `FractionalPercent` whose numerator is 42 and denominator is HUNDRED.
|
// as a ``FractionalPercent`` whose numerator is 42 and denominator is HUNDRED.
|
||||||
message RuntimeFractionalPercent {
|
message RuntimeFractionalPercent {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.core.RuntimeFractionalPercent";
|
"envoy.api.v2.core.RuntimeFractionalPercent";
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ message ApiConfigSource {
|
||||||
// A list of config validators that will be executed when a new update is
|
// A list of config validators that will be executed when a new update is
|
||||||
// received from the ApiConfigSource. Note that each validator handles a
|
// received from the ApiConfigSource. Note that each validator handles a
|
||||||
// specific xDS service type, and only the validators corresponding to the
|
// specific xDS service type, and only the validators corresponding to the
|
||||||
// type url (in `:ref: DiscoveryResponse` or `:ref: DeltaDiscoveryResponse`)
|
// type url (in ``:ref: DiscoveryResponse`` or ``:ref: DeltaDiscoveryResponse``)
|
||||||
// will be invoked.
|
// will be invoked.
|
||||||
// If the validator returns false or throws an exception, the config will be rejected by
|
// If the validator returns false or throws an exception, the config will be rejected by
|
||||||
// the client, and a NACK will be sent.
|
// the client, and a NACK will be sent.
|
||||||
|
|
@ -168,24 +168,24 @@ message PathConfigSource {
|
||||||
//
|
//
|
||||||
// .. note::
|
// .. note::
|
||||||
//
|
//
|
||||||
// If `watched_directory` is *not* configured, Envoy will watch the file path for *moves.*
|
// If ``watched_directory`` is *not* configured, Envoy will watch the file path for *moves*.
|
||||||
// This is because in general only moves are atomic. The same method of swapping files as is
|
// This is because in general only moves are atomic. The same method of swapping files as is
|
||||||
// demonstrated in the :ref:`runtime documentation <config_runtime_symbolic_link_swap>` can be
|
// demonstrated in the :ref:`runtime documentation <config_runtime_symbolic_link_swap>` can be
|
||||||
// used here also. If `watched_directory` is configured, no watch will be placed directly on
|
// used here also. If ``watched_directory`` is configured, no watch will be placed directly on
|
||||||
// this path. Instead, the configured `watched_directory` will be used to trigger reloads of
|
// this path. Instead, the configured ``watched_directory`` will be used to trigger reloads of
|
||||||
// this path. This is required in certain deployment scenarios. See below for more information.
|
// this path. This is required in certain deployment scenarios. See below for more information.
|
||||||
string path = 1 [(validate.rules).string = {min_len: 1}];
|
string path = 1 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
// If configured, this directory will be watched for *moves.* When an entry in this directory is
|
// If configured, this directory will be watched for *moves*. When an entry in this directory is
|
||||||
// moved to, the `path` will be reloaded. This is required in certain deployment scenarios.
|
// moved to, the ``path`` will be reloaded. This is required in certain deployment scenarios.
|
||||||
//
|
//
|
||||||
// Specifically, if trying to load an xDS resource using a
|
// Specifically, if trying to load an xDS resource using a
|
||||||
// `Kubernetes ConfigMap <https://kubernetes.io/docs/concepts/configuration/configmap/>`_, the
|
// `Kubernetes ConfigMap <https://kubernetes.io/docs/concepts/configuration/configmap/>`_, the
|
||||||
// following configuration might be used:
|
// following configuration might be used:
|
||||||
// 1. Store xds.yaml inside a ConfigMap.
|
// 1. Store xds.yaml inside a ConfigMap.
|
||||||
// 2. Mount the ConfigMap to `/config_map/xds`
|
// 2. Mount the ConfigMap to ``/config_map/xds``
|
||||||
// 3. Configure path `/config_map/xds/xds.yaml`
|
// 3. Configure path ``/config_map/xds/xds.yaml``
|
||||||
// 4. Configure watched directory `/config_map/xds`
|
// 4. Configure watched directory ``/config_map/xds``
|
||||||
//
|
//
|
||||||
// The above configuration will ensure that Envoy watches the owning directory for moves which is
|
// The above configuration will ensure that Envoy watches the owning directory for moves which is
|
||||||
// required due to how Kubernetes manages ConfigMap symbolic links during atomic updates.
|
// required due to how Kubernetes manages ConfigMap symbolic links during atomic updates.
|
||||||
|
|
@ -203,7 +203,7 @@ message ConfigSource {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.ConfigSource";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.ConfigSource";
|
||||||
|
|
||||||
// Authorities that this config source may be used for. An authority specified in a xdstp:// URL
|
// Authorities that this config source may be used for. An authority specified in a xdstp:// URL
|
||||||
// is resolved to a *ConfigSource* prior to configuration fetch. This field provides the
|
// is resolved to a ``ConfigSource`` prior to configuration fetch. This field provides the
|
||||||
// association between authority name and configuration source.
|
// association between authority name and configuration source.
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
repeated xds.core.v3.Authority authorities = 7;
|
repeated xds.core.v3.Authority authorities = 7;
|
||||||
|
|
@ -211,7 +211,7 @@ message ConfigSource {
|
||||||
oneof config_source_specifier {
|
oneof config_source_specifier {
|
||||||
option (validate.required) = true;
|
option (validate.required) = true;
|
||||||
|
|
||||||
// Deprecated in favor of `path_config_source`. Use that field instead.
|
// Deprecated in favor of ``path_config_source``. Use that field instead.
|
||||||
string path = 1 [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
string path = 1 [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// Local filesystem path configuration source.
|
// Local filesystem path configuration source.
|
||||||
|
|
@ -269,7 +269,7 @@ message ExtensionConfigSource {
|
||||||
|
|
||||||
// Optional default configuration to use as the initial configuration if
|
// Optional default configuration to use as the initial configuration if
|
||||||
// there is a failure to receive the initial extension configuration or if
|
// there is a failure to receive the initial extension configuration or if
|
||||||
// `apply_default_config_without_warming` flag is set.
|
// ``apply_default_config_without_warming`` flag is set.
|
||||||
google.protobuf.Any default_config = 2;
|
google.protobuf.Any default_config = 2;
|
||||||
|
|
||||||
// Use the default config as the initial configuration without warming and
|
// Use the default config as the initial configuration without warming and
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,9 @@ message TypedExtensionConfig {
|
||||||
string name = 1 [(validate.rules).string = {min_len: 1}];
|
string name = 1 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
// The typed config for the extension. The type URL will be used to identify
|
// The typed config for the extension. The type URL will be used to identify
|
||||||
// the extension. In the case that the type URL is *xds.type.v3.TypedStruct*
|
// the extension. In the case that the type URL is ``xds.type.v3.TypedStruct``
|
||||||
// (or, for historical reasons, *udpa.type.v1.TypedStruct*), the inner type
|
// (or, for historical reasons, ``udpa.type.v1.TypedStruct``), the inner type
|
||||||
// URL of *TypedStruct* will be utilized. See the
|
// URL of ``TypedStruct`` will be utilized. See the
|
||||||
// :ref:`extension configuration overview
|
// :ref:`extension configuration overview
|
||||||
// <config_overview_extension_configuration>` for further details.
|
// <config_overview_extension_configuration>` for further details.
|
||||||
google.protobuf.Any typed_config = 2 [(validate.rules).any = {required: true}];
|
google.protobuf.Any typed_config = 2 [(validate.rules).any = {required: true}];
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ message GrpcService {
|
||||||
// <envoy_v3_api_field_config.cluster.v3.Cluster.transport_socket>`.
|
// <envoy_v3_api_field_config.cluster.v3.Cluster.transport_socket>`.
|
||||||
string cluster_name = 1 [(validate.rules).string = {min_len: 1}];
|
string cluster_name = 1 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
// The `:authority` header in the grpc request. If this field is not set, the authority header value will be `cluster_name`.
|
// The ``:authority`` header in the grpc request. If this field is not set, the authority header value will be ``cluster_name``.
|
||||||
// Note that this authority does not override the SNI. The SNI is provided by the transport socket of the cluster.
|
// Note that this authority does not override the SNI. The SNI is provided by the transport socket of the cluster.
|
||||||
string authority = 2
|
string authority = 2
|
||||||
[(validate.rules).string =
|
[(validate.rules).string =
|
||||||
|
|
@ -142,7 +142,7 @@ message GrpcService {
|
||||||
|
|
||||||
// URI of the token exchange service that handles token exchange requests.
|
// URI of the token exchange service that handles token exchange requests.
|
||||||
// [#comment:TODO(asraa): Add URI validation when implemented. Tracked by
|
// [#comment:TODO(asraa): Add URI validation when implemented. Tracked by
|
||||||
// https://github.com/envoyproxy/protoc-gen-validate/issues/303]
|
// https://github.com/bufbuild/protoc-gen-validate/issues/303]
|
||||||
string token_exchange_service_uri = 1;
|
string token_exchange_service_uri = 1;
|
||||||
|
|
||||||
// Location of the target service or resource where the client
|
// Location of the target service or resource where the client
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// Endpoint health status.
|
// Endpoint health status.
|
||||||
enum HealthStatus {
|
enum HealthStatus {
|
||||||
// The health status is not known. This is interpreted by Envoy as *HEALTHY*.
|
// The health status is not known. This is interpreted by Envoy as ``HEALTHY``.
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0;
|
||||||
|
|
||||||
// Healthy.
|
// Healthy.
|
||||||
|
|
@ -43,11 +43,11 @@ enum HealthStatus {
|
||||||
// `<https://aws.amazon.com/blogs/aws/elb-connection-draining-remove-instances-from-service-with-care/>`_
|
// `<https://aws.amazon.com/blogs/aws/elb-connection-draining-remove-instances-from-service-with-care/>`_
|
||||||
// or
|
// or
|
||||||
// `<https://cloud.google.com/compute/docs/load-balancing/enabling-connection-draining>`_.
|
// `<https://cloud.google.com/compute/docs/load-balancing/enabling-connection-draining>`_.
|
||||||
// This is interpreted by Envoy as *UNHEALTHY*.
|
// This is interpreted by Envoy as ``UNHEALTHY``.
|
||||||
DRAINING = 3;
|
DRAINING = 3;
|
||||||
|
|
||||||
// Health check timed out. This is part of HDS and is interpreted by Envoy as
|
// Health check timed out. This is part of HDS and is interpreted by Envoy as
|
||||||
// *UNHEALTHY*.
|
// ``UNHEALTHY``.
|
||||||
TIMEOUT = 4;
|
TIMEOUT = 4;
|
||||||
|
|
||||||
// Degraded.
|
// Degraded.
|
||||||
|
|
@ -75,12 +75,12 @@ message HealthCheck {
|
||||||
// Hex encoded payload. E.g., "000000FF".
|
// Hex encoded payload. E.g., "000000FF".
|
||||||
string text = 1 [(validate.rules).string = {min_len: 1}];
|
string text = 1 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
// [#not-implemented-hide:] Binary payload.
|
// Binary payload.
|
||||||
bytes binary = 2;
|
bytes binary = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 13]
|
// [#next-free-field: 15]
|
||||||
message HttpHealthCheck {
|
message HttpHealthCheck {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.core.HealthCheck.HttpHealthCheck";
|
"envoy.api.v2.core.HealthCheck.HttpHealthCheck";
|
||||||
|
|
@ -96,15 +96,27 @@ message HealthCheck {
|
||||||
string host = 1 [(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
string host = 1 [(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
||||||
|
|
||||||
// Specifies the HTTP path that will be requested during health checking. For example
|
// Specifies the HTTP path that will be requested during health checking. For example
|
||||||
// */healthcheck*.
|
// ``/healthcheck``.
|
||||||
string path = 2
|
string path = 2
|
||||||
[(validate.rules).string = {min_len: 1 well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
[(validate.rules).string = {min_len: 1 well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
||||||
|
|
||||||
// [#not-implemented-hide:] HTTP specific payload.
|
// [#not-implemented-hide:] HTTP specific payload.
|
||||||
Payload send = 3;
|
Payload send = 3;
|
||||||
|
|
||||||
// [#not-implemented-hide:] HTTP specific response.
|
// Specifies a list of HTTP expected responses to match in the first ``response_buffer_size`` bytes of the response body.
|
||||||
Payload receive = 4;
|
// If it is set, both the expected response check and status code determine the health check.
|
||||||
|
// When checking the response, “fuzzy” matching is performed such that each payload block must be found,
|
||||||
|
// and in the order specified, but not necessarily contiguous.
|
||||||
|
//
|
||||||
|
// .. note::
|
||||||
|
//
|
||||||
|
// It is recommended to set ``response_buffer_size`` based on the total Payload size for efficiency.
|
||||||
|
// The default buffer size is 1024 bytes when it is not set.
|
||||||
|
repeated Payload receive = 4;
|
||||||
|
|
||||||
|
// Specifies the size of response buffer in bytes that is used to Payload match.
|
||||||
|
// The default value is 1024. Setting to 0 implies that the Payload will be matched against the entire response.
|
||||||
|
google.protobuf.UInt64Value response_buffer_size = 14 [(validate.rules).uint64 = {gte: 0}];
|
||||||
|
|
||||||
// Specifies a list of HTTP headers that should be added to each request that is sent to the
|
// Specifies a list of HTTP headers that should be added to each request that is sent to the
|
||||||
// health checked cluster. For more information, including details on header value syntax, see
|
// health checked cluster. For more information, including details on header value syntax, see
|
||||||
|
|
@ -145,6 +157,12 @@ message HealthCheck {
|
||||||
// <envoy_v3_api_msg_type.matcher.v3.StringMatcher>`. See the :ref:`architecture overview
|
// <envoy_v3_api_msg_type.matcher.v3.StringMatcher>`. See the :ref:`architecture overview
|
||||||
// <arch_overview_health_checking_identity>` for more information.
|
// <arch_overview_health_checking_identity>` for more information.
|
||||||
type.matcher.v3.StringMatcher service_name_matcher = 11;
|
type.matcher.v3.StringMatcher service_name_matcher = 11;
|
||||||
|
|
||||||
|
// HTTP Method that will be used for health checking, default is "GET".
|
||||||
|
// GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE, PATCH methods are supported, but making request body is not supported.
|
||||||
|
// CONNECT method is disallowed because it is not appropriate for health check request.
|
||||||
|
// If a non-200 response is expected by the method, it needs to be set in :ref:`expected_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.expected_statuses>`.
|
||||||
|
RequestMethod method = 13 [(validate.rules).enum = {defined_only: true not_in: 6}];
|
||||||
}
|
}
|
||||||
|
|
||||||
message TcpHealthCheck {
|
message TcpHealthCheck {
|
||||||
|
|
@ -155,7 +173,7 @@ message HealthCheck {
|
||||||
Payload send = 1;
|
Payload send = 1;
|
||||||
|
|
||||||
// When checking the response, “fuzzy” matching is performed such that each
|
// When checking the response, “fuzzy” matching is performed such that each
|
||||||
// binary block must be found, and in the order specified, but not
|
// payload block must be found, and in the order specified, but not
|
||||||
// necessarily contiguous.
|
// necessarily contiguous.
|
||||||
repeated Payload receive = 2;
|
repeated Payload receive = 2;
|
||||||
}
|
}
|
||||||
|
|
@ -260,15 +278,15 @@ message HealthCheck {
|
||||||
google.protobuf.Duration interval_jitter = 3;
|
google.protobuf.Duration interval_jitter = 3;
|
||||||
|
|
||||||
// An optional jitter amount as a percentage of interval_ms. If specified,
|
// An optional jitter amount as a percentage of interval_ms. If specified,
|
||||||
// during every interval Envoy will add interval_ms *
|
// during every interval Envoy will add ``interval_ms`` *
|
||||||
// interval_jitter_percent / 100 to the wait time.
|
// ``interval_jitter_percent`` / 100 to the wait time.
|
||||||
//
|
//
|
||||||
// If interval_jitter_ms and interval_jitter_percent are both set, both of
|
// If interval_jitter_ms and interval_jitter_percent are both set, both of
|
||||||
// them will be used to increase the wait time.
|
// them will be used to increase the wait time.
|
||||||
uint32 interval_jitter_percent = 18;
|
uint32 interval_jitter_percent = 18;
|
||||||
|
|
||||||
// The number of unhealthy health checks required before a host is marked
|
// The number of unhealthy health checks required before a host is marked
|
||||||
// unhealthy. Note that for *http* health checking if a host responds with a code not in
|
// unhealthy. Note that for ``http`` health checking if a host responds with a code not in
|
||||||
// :ref:`expected_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.expected_statuses>`
|
// :ref:`expected_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.expected_statuses>`
|
||||||
// or :ref:`retriable_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.retriable_statuses>`,
|
// or :ref:`retriable_statuses <envoy_v3_api_field_config.core.v3.HealthCheck.HttpHealthCheck.retriable_statuses>`,
|
||||||
// this threshold is ignored and the host is considered immediately unhealthy.
|
// this threshold is ignored and the host is considered immediately unhealthy.
|
||||||
|
|
@ -316,7 +334,7 @@ message HealthCheck {
|
||||||
// (including new hosts) when the cluster has received no traffic.
|
// (including new hosts) when the cluster has received no traffic.
|
||||||
//
|
//
|
||||||
// This is useful for when we want to send frequent health checks with
|
// This is useful for when we want to send frequent health checks with
|
||||||
// `no_traffic_interval` but then revert to lower frequency `no_traffic_healthy_interval` once
|
// ``no_traffic_interval`` but then revert to lower frequency ``no_traffic_healthy_interval`` once
|
||||||
// a host in the cluster is marked as healthy.
|
// a host in the cluster is marked as healthy.
|
||||||
//
|
//
|
||||||
// Once a cluster has been used for traffic routing, Envoy will shift back to using the
|
// Once a cluster has been used for traffic routing, Envoy will shift back to using the
|
||||||
|
|
@ -386,7 +404,7 @@ message HealthCheck {
|
||||||
// name: envoy.transport_sockets.tls
|
// name: envoy.transport_sockets.tls
|
||||||
// config: { ... } # tls socket configuration
|
// config: { ... } # tls socket configuration
|
||||||
//
|
//
|
||||||
// If this field is set, then for health checks it will supersede an entry of *envoy.transport_socket* in the
|
// If this field is set, then for health checks it will supersede an entry of ``envoy.transport_socket`` in the
|
||||||
// :ref:`LbEndpoint.Metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`.
|
// :ref:`LbEndpoint.Metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`.
|
||||||
// This allows using different transport socket capabilities for health checking versus proxying to the
|
// This allows using different transport socket capabilities for health checking versus proxying to the
|
||||||
// endpoint.
|
// endpoint.
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ option java_multiple_files = true;
|
||||||
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: HTTP Service URI ]
|
// [#protodoc-title: HTTP service URI ]
|
||||||
|
|
||||||
// Envoy external URI descriptor
|
// Envoy external URI descriptor
|
||||||
message HttpUri {
|
message HttpUri {
|
||||||
|
|
@ -30,7 +30,7 @@ message HttpUri {
|
||||||
//
|
//
|
||||||
string uri = 1 [(validate.rules).string = {min_len: 1}];
|
string uri = 1 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
// Specify how `uri` is to be fetched. Today, this requires an explicit
|
// Specify how ``uri`` is to be fetched. Today, this requires an explicit
|
||||||
// cluster, but in the future we may support dynamic cluster creation or
|
// cluster, but in the future we may support dynamic cluster creation or
|
||||||
// inline DNS resolution. See `issue
|
// inline DNS resolution. See `issue
|
||||||
// <https://github.com/envoyproxy/envoy/issues/1606>`_.
|
// <https://github.com/envoyproxy/envoy/issues/1606>`_.
|
||||||
|
|
|
||||||
|
|
@ -75,9 +75,9 @@ message QuicProtocolOptions {
|
||||||
google.protobuf.UInt32Value initial_stream_window_size = 2
|
google.protobuf.UInt32Value initial_stream_window_size = 2
|
||||||
[(validate.rules).uint32 = {lte: 16777216 gte: 1}];
|
[(validate.rules).uint32 = {lte: 16777216 gte: 1}];
|
||||||
|
|
||||||
// Similar to *initial_stream_window_size*, but for connection-level
|
// Similar to ``initial_stream_window_size``, but for connection-level
|
||||||
// flow-control. Valid values rage from 1 to 25165824 (24MB, maximum supported by QUICHE) and defaults to 65536 (2^16).
|
// flow-control. Valid values rage from 1 to 25165824 (24MB, maximum supported by QUICHE) and defaults to 65536 (2^16).
|
||||||
// window. Currently, this has the same minimum/default as *initial_stream_window_size*.
|
// window. Currently, this has the same minimum/default as ``initial_stream_window_size``.
|
||||||
//
|
//
|
||||||
// NOTE: 16384 (2^14) is the minimum window size supported in Google QUIC. We only support increasing the default
|
// NOTE: 16384 (2^14) is the minimum window size supported in Google QUIC. We only support increasing the default
|
||||||
// window size now, so it's also the minimum.
|
// window size now, so it's also the minimum.
|
||||||
|
|
@ -109,7 +109,7 @@ message UpstreamHttpProtocolOptions {
|
||||||
// Automatic validate upstream presented certificate for new upstream connections based on the
|
// Automatic validate upstream presented certificate for new upstream connections based on the
|
||||||
// downstream HTTP host/authority header or any other arbitrary header when :ref:`override_auto_sni_header <envoy_v3_api_field_config.core.v3.UpstreamHttpProtocolOptions.override_auto_sni_header>`
|
// downstream HTTP host/authority header or any other arbitrary header when :ref:`override_auto_sni_header <envoy_v3_api_field_config.core.v3.UpstreamHttpProtocolOptions.override_auto_sni_header>`
|
||||||
// is set, as seen by the :ref:`router filter <config_http_filters_router>`.
|
// is set, as seen by the :ref:`router filter <config_http_filters_router>`.
|
||||||
// This field is intended to be set with `auto_sni` field.
|
// This field is intended to be set with ``auto_sni`` field.
|
||||||
bool auto_san_validation = 2;
|
bool auto_san_validation = 2;
|
||||||
|
|
||||||
// An optional alternative to the host/authority header to be used for setting the SNI value.
|
// An optional alternative to the host/authority header to be used for setting the SNI value.
|
||||||
|
|
@ -117,7 +117,7 @@ message UpstreamHttpProtocolOptions {
|
||||||
// :ref:`router filter <config_http_filters_router>`.
|
// :ref:`router filter <config_http_filters_router>`.
|
||||||
// If unset, host/authority header will be used for populating the SNI. If the specified header
|
// If unset, host/authority header will be used for populating the SNI. If the specified header
|
||||||
// is not found or the value is empty, host/authority header will be used instead.
|
// is not found or the value is empty, host/authority header will be used instead.
|
||||||
// This field is intended to be set with `auto_sni` and/or `auto_san_validation` fields.
|
// This field is intended to be set with ``auto_sni`` and/or ``auto_san_validation`` fields.
|
||||||
// If none of these fields are set then setting this would be a no-op.
|
// If none of these fields are set then setting this would be a no-op.
|
||||||
string override_auto_sni_header = 3
|
string override_auto_sni_header = 3
|
||||||
[(validate.rules).string = {well_known_regex: HTTP_HEADER_NAME ignore_empty: true}];
|
[(validate.rules).string = {well_known_regex: HTTP_HEADER_NAME ignore_empty: true}];
|
||||||
|
|
@ -127,6 +127,7 @@ message UpstreamHttpProtocolOptions {
|
||||||
// make an HTTP connection to an origin server. See https://tools.ietf.org/html/rfc7838 for
|
// make an HTTP connection to an origin server. See https://tools.ietf.org/html/rfc7838 for
|
||||||
// HTTP Alternative Services and https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-04
|
// HTTP Alternative Services and https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-04
|
||||||
// for the "HTTPS" DNS resource record.
|
// for the "HTTPS" DNS resource record.
|
||||||
|
// [#next-free-field: 6]
|
||||||
message AlternateProtocolsCacheOptions {
|
message AlternateProtocolsCacheOptions {
|
||||||
// Allows pre-populating the cache with HTTP/3 alternate protocols entries with a 7 day lifetime.
|
// Allows pre-populating the cache with HTTP/3 alternate protocols entries with a 7 day lifetime.
|
||||||
// This will cause Envoy to attempt HTTP/3 to those upstreams, even if the upstreams have not
|
// This will cause Envoy to attempt HTTP/3 to those upstreams, even if the upstreams have not
|
||||||
|
|
@ -171,6 +172,17 @@ message AlternateProtocolsCacheOptions {
|
||||||
|
|
||||||
// Allows pre-populating the cache with entries, as described above.
|
// Allows pre-populating the cache with entries, as described above.
|
||||||
repeated AlternateProtocolsCacheEntry prepopulated_entries = 4;
|
repeated AlternateProtocolsCacheEntry prepopulated_entries = 4;
|
||||||
|
|
||||||
|
// Optional list of hostnames suffixes for which Alt-Svc entries can be shared. For example, if
|
||||||
|
// this list contained the value ``.c.example.com``, then an Alt-Svc entry for ``foo.c.example.com``
|
||||||
|
// could be shared with ``bar.c.example.com`` but would not be shared with ``baz.example.com``. On
|
||||||
|
// the other hand, if the list contained the value ``.example.com`` then all three hosts could share
|
||||||
|
// Alt-Svc entries. Each entry must start with ``.``. If a hostname matches multiple suffixes, the
|
||||||
|
// first listed suffix will be used.
|
||||||
|
//
|
||||||
|
// Since lookup in this list is O(n), it is recommended that the number of suffixes be limited.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
repeated string canonical_suffixes = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 7]
|
// [#next-free-field: 7]
|
||||||
|
|
@ -247,7 +259,7 @@ message HttpProtocolOptions {
|
||||||
google.protobuf.UInt32Value max_requests_per_connection = 6;
|
google.protobuf.UInt32Value max_requests_per_connection = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 8]
|
// [#next-free-field: 9]
|
||||||
message Http1ProtocolOptions {
|
message Http1ProtocolOptions {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.core.Http1ProtocolOptions";
|
"envoy.api.v2.core.Http1ProtocolOptions";
|
||||||
|
|
@ -282,18 +294,18 @@ message Http1ProtocolOptions {
|
||||||
// Handle HTTP requests with absolute URLs in the requests. These requests
|
// Handle HTTP requests with absolute URLs in the requests. These requests
|
||||||
// are generally sent by clients to forward/explicit proxies. This allows clients to configure
|
// are generally sent by clients to forward/explicit proxies. This allows clients to configure
|
||||||
// envoy as their HTTP proxy. In Unix, for example, this is typically done by setting the
|
// envoy as their HTTP proxy. In Unix, for example, this is typically done by setting the
|
||||||
// *http_proxy* environment variable.
|
// ``http_proxy`` environment variable.
|
||||||
google.protobuf.BoolValue allow_absolute_url = 1;
|
google.protobuf.BoolValue allow_absolute_url = 1;
|
||||||
|
|
||||||
// Handle incoming HTTP/1.0 and HTTP 0.9 requests.
|
// Handle incoming HTTP/1.0 and HTTP 0.9 requests.
|
||||||
// This is off by default, and not fully standards compliant. There is support for pre-HTTP/1.1
|
// This is off by default, and not fully standards compliant. There is support for pre-HTTP/1.1
|
||||||
// style connect logic, dechunking, and handling lack of client host iff
|
// style connect logic, dechunking, and handling lack of client host iff
|
||||||
// *default_host_for_http_10* is configured.
|
// ``default_host_for_http_10`` is configured.
|
||||||
bool accept_http_10 = 2;
|
bool accept_http_10 = 2;
|
||||||
|
|
||||||
// A default host for HTTP/1.0 requests. This is highly suggested if *accept_http_10* is true as
|
// A default host for HTTP/1.0 requests. This is highly suggested if ``accept_http_10`` is true as
|
||||||
// Envoy does not otherwise support HTTP/1.0 without a Host header.
|
// Envoy does not otherwise support HTTP/1.0 without a Host header.
|
||||||
// This is a no-op if *accept_http_10* is not true.
|
// This is a no-op if ``accept_http_10`` is not true.
|
||||||
string default_host_for_http_10 = 3;
|
string default_host_for_http_10 = 3;
|
||||||
|
|
||||||
// Describes how the keys for response headers should be formatted. By default, all header keys
|
// Describes how the keys for response headers should be formatted. By default, all header keys
|
||||||
|
|
@ -311,7 +323,7 @@ message Http1ProtocolOptions {
|
||||||
// - The content length header is not present.
|
// - The content length header is not present.
|
||||||
bool enable_trailers = 5;
|
bool enable_trailers = 5;
|
||||||
|
|
||||||
// Allows Envoy to process requests/responses with both `Content-Length` and `Transfer-Encoding`
|
// Allows Envoy to process requests/responses with both ``Content-Length`` and ``Transfer-Encoding``
|
||||||
// headers set. By default such messages are rejected, but if option is enabled - Envoy will
|
// headers set. By default such messages are rejected, but if option is enabled - Envoy will
|
||||||
// remove Content-Length header and process message.
|
// remove Content-Length header and process message.
|
||||||
// See `RFC7230, sec. 3.3.3 <https://tools.ietf.org/html/rfc7230#section-3.3.3>`_ for details.
|
// See `RFC7230, sec. 3.3.3 <https://tools.ietf.org/html/rfc7230#section-3.3.3>`_ for details.
|
||||||
|
|
@ -319,6 +331,9 @@ message Http1ProtocolOptions {
|
||||||
// .. attention::
|
// .. attention::
|
||||||
// Enabling this option might lead to request smuggling vulnerability, especially if traffic
|
// Enabling this option might lead to request smuggling vulnerability, especially if traffic
|
||||||
// is proxied via multiple layers of proxies.
|
// is proxied via multiple layers of proxies.
|
||||||
|
// [#comment:TODO: This field is ignored when the
|
||||||
|
// :ref:`header validation configuration <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.typed_header_validation_config>`
|
||||||
|
// is present.]
|
||||||
bool allow_chunked_length = 6;
|
bool allow_chunked_length = 6;
|
||||||
|
|
||||||
// Allows invalid HTTP messaging. When this option is false, then Envoy will terminate
|
// Allows invalid HTTP messaging. When this option is false, then Envoy will terminate
|
||||||
|
|
@ -328,6 +343,13 @@ message Http1ProtocolOptions {
|
||||||
// If set, this overrides any HCM :ref:`stream_error_on_invalid_http_messaging
|
// If set, this overrides any HCM :ref:`stream_error_on_invalid_http_messaging
|
||||||
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>`.
|
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>`.
|
||||||
google.protobuf.BoolValue override_stream_error_on_invalid_http_message = 7;
|
google.protobuf.BoolValue override_stream_error_on_invalid_http_message = 7;
|
||||||
|
|
||||||
|
// Allows sending fully qualified URLs when proxying the first line of the
|
||||||
|
// response. By default, Envoy will only send the path components in the first line.
|
||||||
|
// If this is true, Envoy will create a fully qualified URI composing scheme
|
||||||
|
// (inferred if not present), host (from the host/:authority header) and path
|
||||||
|
// (from first line or :path header).
|
||||||
|
bool send_fully_qualified_url = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message KeepaliveSettings {
|
message KeepaliveSettings {
|
||||||
|
|
@ -415,8 +437,8 @@ message Http2ProtocolOptions {
|
||||||
google.protobuf.UInt32Value initial_stream_window_size = 3
|
google.protobuf.UInt32Value initial_stream_window_size = 3
|
||||||
[(validate.rules).uint32 = {lte: 2147483647 gte: 65535}];
|
[(validate.rules).uint32 = {lte: 2147483647 gte: 65535}];
|
||||||
|
|
||||||
// Similar to *initial_stream_window_size*, but for connection-level flow-control
|
// Similar to ``initial_stream_window_size``, but for connection-level flow-control
|
||||||
// window. Currently, this has the same minimum/maximum/default as *initial_stream_window_size*.
|
// window. Currently, this has the same minimum/maximum/default as ``initial_stream_window_size``.
|
||||||
google.protobuf.UInt32Value initial_connection_window_size = 4
|
google.protobuf.UInt32Value initial_connection_window_size = 4
|
||||||
[(validate.rules).uint32 = {lte: 2147483647 gte: 65535}];
|
[(validate.rules).uint32 = {lte: 2147483647 gte: 65535}];
|
||||||
|
|
||||||
|
|
@ -456,11 +478,11 @@ message Http2ProtocolOptions {
|
||||||
// of PRIORITY frames received over the lifetime of connection exceeds the value calculated
|
// of PRIORITY frames received over the lifetime of connection exceeds the value calculated
|
||||||
// using this formula::
|
// using this formula::
|
||||||
//
|
//
|
||||||
// max_inbound_priority_frames_per_stream * (1 + opened_streams)
|
// ``max_inbound_priority_frames_per_stream`` * (1 + ``opened_streams``)
|
||||||
//
|
//
|
||||||
// the connection is terminated. For downstream connections the `opened_streams` is incremented when
|
// the connection is terminated. For downstream connections the ``opened_streams`` is incremented when
|
||||||
// Envoy receives complete response headers from the upstream server. For upstream connection the
|
// Envoy receives complete response headers from the upstream server. For upstream connection the
|
||||||
// `opened_streams` is incremented when Envoy send the HEADERS frame for a new stream. The
|
// ``opened_streams`` is incremented when Envoy send the HEADERS frame for a new stream. The
|
||||||
// ``http2.inbound_priority_frames_flood`` stat tracks
|
// ``http2.inbound_priority_frames_flood`` stat tracks
|
||||||
// the number of connections terminated due to flood mitigation. The default limit is 100.
|
// the number of connections terminated due to flood mitigation. The default limit is 100.
|
||||||
google.protobuf.UInt32Value max_inbound_priority_frames_per_stream = 10;
|
google.protobuf.UInt32Value max_inbound_priority_frames_per_stream = 10;
|
||||||
|
|
@ -469,12 +491,12 @@ message Http2ProtocolOptions {
|
||||||
// of WINDOW_UPDATE frames received over the lifetime of connection exceeds the value calculated
|
// of WINDOW_UPDATE frames received over the lifetime of connection exceeds the value calculated
|
||||||
// using this formula::
|
// using this formula::
|
||||||
//
|
//
|
||||||
// 5 + 2 * (opened_streams +
|
// 5 + 2 * (``opened_streams`` +
|
||||||
// max_inbound_window_update_frames_per_data_frame_sent * outbound_data_frames)
|
// ``max_inbound_window_update_frames_per_data_frame_sent`` * ``outbound_data_frames``)
|
||||||
//
|
//
|
||||||
// the connection is terminated. For downstream connections the `opened_streams` is incremented when
|
// the connection is terminated. For downstream connections the ``opened_streams`` is incremented when
|
||||||
// Envoy receives complete response headers from the upstream server. For upstream connections the
|
// Envoy receives complete response headers from the upstream server. For upstream connections the
|
||||||
// `opened_streams` is incremented when Envoy sends the HEADERS frame for a new stream. The
|
// ``opened_streams`` is incremented when Envoy sends the HEADERS frame for a new stream. The
|
||||||
// ``http2.inbound_priority_frames_flood`` stat tracks the number of connections terminated due to
|
// ``http2.inbound_priority_frames_flood`` stat tracks the number of connections terminated due to
|
||||||
// flood mitigation. The default max_inbound_window_update_frames_per_data_frame_sent value is 10.
|
// flood mitigation. The default max_inbound_window_update_frames_per_data_frame_sent value is 10.
|
||||||
// Setting this to 1 should be enough to support HTTP/2 implementations with basic flow control,
|
// Setting this to 1 should be enough to support HTTP/2 implementations with basic flow control,
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ option java_multiple_files = true;
|
||||||
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Proxy Protocol]
|
// [#protodoc-title: Proxy protocol]
|
||||||
|
|
||||||
message ProxyProtocolConfig {
|
message ProxyProtocolConfig {
|
||||||
enum Version {
|
enum Version {
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ option java_multiple_files = true;
|
||||||
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/core/v3;corev3";
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Socket Option ]
|
// [#protodoc-title: Socket option]
|
||||||
|
|
||||||
// Generic socket option message. This would be used to set socket options that
|
// Generic socket option message. This would be used to set socket options that
|
||||||
// might not exist in upstream kernels or precompiled Envoy binaries.
|
// might not exist in upstream kernels or precompiled Envoy binaries.
|
||||||
|
|
@ -75,3 +75,7 @@ message SocketOption {
|
||||||
// STATE_PREBIND is currently the only valid value.
|
// STATE_PREBIND is currently the only valid value.
|
||||||
SocketState state = 6 [(validate.rules).enum = {defined_only: true}];
|
SocketState state = 6 [(validate.rules).enum = {defined_only: true}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message SocketOptionsOverride {
|
||||||
|
repeated SocketOption socket_options = 1;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,9 +97,9 @@ message SubstitutionFormatString {
|
||||||
// * for ``json_format`` the keys with null values are omitted in the output structure.
|
// * for ``json_format`` the keys with null values are omitted in the output structure.
|
||||||
bool omit_empty_values = 3;
|
bool omit_empty_values = 3;
|
||||||
|
|
||||||
// Specify a *content_type* field.
|
// Specify a ``content_type`` field.
|
||||||
// If this field is not set then ``text/plain`` is used for *text_format* and
|
// If this field is not set then ``text/plain`` is used for ``text_format`` and
|
||||||
// ``application/json`` is used for *json_format*.
|
// ``application/json`` is used for ``json_format``.
|
||||||
//
|
//
|
||||||
// .. validated-code-block:: yaml
|
// .. validated-code-block:: yaml
|
||||||
// :type-name: envoy.config.core.v3.SubstitutionFormatString
|
// :type-name: envoy.config.core.v3.SubstitutionFormatString
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,17 @@ message Endpoint {
|
||||||
// to a non-empty value allows overriding the cluster level configuration for a specific
|
// to a non-empty value allows overriding the cluster level configuration for a specific
|
||||||
// endpoint.
|
// endpoint.
|
||||||
string hostname = 2;
|
string hostname = 2;
|
||||||
|
|
||||||
|
// Optional alternative health check host address.
|
||||||
|
//
|
||||||
|
// .. attention::
|
||||||
|
//
|
||||||
|
// The form of the health check host address is expected to be a direct IP address.
|
||||||
|
core.v3.Address address = 3;
|
||||||
|
|
||||||
|
// Optional flag to control if perform active health check for this endpoint.
|
||||||
|
// Active health check is enabled by default if there is a health checker.
|
||||||
|
bool disable_active_health_check = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The upstream host address.
|
// The upstream host address.
|
||||||
|
|
@ -91,8 +102,8 @@ message LbEndpoint {
|
||||||
|
|
||||||
// The endpoint metadata specifies values that may be used by the load
|
// The endpoint metadata specifies values that may be used by the load
|
||||||
// balancer to select endpoints in a cluster for a given request. The filter
|
// balancer to select endpoints in a cluster for a given request. The filter
|
||||||
// name should be specified as *envoy.lb*. An example boolean key-value pair
|
// name should be specified as ``envoy.lb``. An example boolean key-value pair
|
||||||
// is *canary*, providing the optional canary status of the upstream host.
|
// is ``canary``, providing the optional canary status of the upstream host.
|
||||||
// This may be matched against in a route's
|
// This may be matched against in a route's
|
||||||
// :ref:`RouteAction <envoy_v3_api_msg_config.route.v3.RouteAction>` metadata_match field
|
// :ref:`RouteAction <envoy_v3_api_msg_config.route.v3.RouteAction>` metadata_match field
|
||||||
// to subset the endpoints considered in cluster load balancing.
|
// to subset the endpoints considered in cluster load balancing.
|
||||||
|
|
@ -104,9 +115,9 @@ message LbEndpoint {
|
||||||
// of the weights of all endpoints in the endpoint's locality to produce a
|
// of the weights of all endpoints in the endpoint's locality to produce a
|
||||||
// percentage of traffic for the endpoint. This percentage is then further
|
// percentage of traffic for the endpoint. This percentage is then further
|
||||||
// weighted by the endpoint's locality's load balancing weight from
|
// weighted by the endpoint's locality's load balancing weight from
|
||||||
// LocalityLbEndpoints. If unspecified, each host is presumed to have equal
|
// LocalityLbEndpoints. If unspecified, will be treated as 1. The sum
|
||||||
// weight in a locality. The sum of the weights of all endpoints in the
|
// of the weights of all endpoints in the endpoint's locality must not
|
||||||
// endpoint's locality must not exceed uint32_t maximal value (4294967295).
|
// exceed uint32_t maximal value (4294967295).
|
||||||
google.protobuf.UInt32Value load_balancing_weight = 4 [(validate.rules).uint32 = {gte: 1}];
|
google.protobuf.UInt32Value load_balancing_weight = 4 [(validate.rules).uint32 = {gte: 1}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -140,13 +151,13 @@ message LocalityLbEndpoints {
|
||||||
|
|
||||||
// The group of endpoints belonging to the locality specified.
|
// The group of endpoints belonging to the locality specified.
|
||||||
// [#comment:TODO(adisuissa): Once LEDS is implemented this field needs to be
|
// [#comment:TODO(adisuissa): Once LEDS is implemented this field needs to be
|
||||||
// deprecated and replaced by *load_balancer_endpoints*.]
|
// deprecated and replaced by ``load_balancer_endpoints``.]
|
||||||
repeated LbEndpoint lb_endpoints = 2;
|
repeated LbEndpoint lb_endpoints = 2;
|
||||||
|
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
oneof lb_config {
|
oneof lb_config {
|
||||||
// The group of endpoints belonging to the locality.
|
// The group of endpoints belonging to the locality.
|
||||||
// [#comment:TODO(adisuissa): Once LEDS is implemented the *lb_endpoints* field
|
// [#comment:TODO(adisuissa): Once LEDS is implemented the ``lb_endpoints`` field
|
||||||
// needs to be deprecated.]
|
// needs to be deprecated.]
|
||||||
LbEndpointList load_balancer_endpoints = 7;
|
LbEndpointList load_balancer_endpoints = 7;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -161,8 +161,8 @@ message ClusterStats {
|
||||||
repeated DroppedRequests dropped_requests = 5;
|
repeated DroppedRequests dropped_requests = 5;
|
||||||
|
|
||||||
// Period over which the actual load report occurred. This will be guaranteed to include every
|
// Period over which the actual load report occurred. This will be guaranteed to include every
|
||||||
// request reported. Due to system load and delays between the *LoadStatsRequest* sent from Envoy
|
// request reported. Due to system load and delays between the ``LoadStatsRequest`` sent from Envoy
|
||||||
// and the *LoadStatsResponse* message sent from the management server, this may be longer than
|
// and the ``LoadStatsResponse`` message sent from the management server, this may be longer than
|
||||||
// the requested load reporting interval in the *LoadStatsResponse*.
|
// the requested load reporting interval in the ``LoadStatsResponse``.
|
||||||
google.protobuf.Duration load_report_interval = 4;
|
google.protobuf.Duration load_report_interval = 4;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ package envoy.config.listener.v3;
|
||||||
import "envoy/config/accesslog/v3/accesslog.proto";
|
import "envoy/config/accesslog/v3/accesslog.proto";
|
||||||
import "envoy/config/core/v3/address.proto";
|
import "envoy/config/core/v3/address.proto";
|
||||||
import "envoy/config/core/v3/base.proto";
|
import "envoy/config/core/v3/base.proto";
|
||||||
|
import "envoy/config/core/v3/extension.proto";
|
||||||
import "envoy/config/core/v3/socket_option.proto";
|
import "envoy/config/core/v3/socket_option.proto";
|
||||||
import "envoy/config/listener/v3/api_listener.proto";
|
import "envoy/config/listener/v3/api_listener.proto";
|
||||||
import "envoy/config/listener/v3/listener_components.proto";
|
import "envoy/config/listener/v3/listener_components.proto";
|
||||||
|
|
@ -32,13 +33,27 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// [#protodoc-title: Listener configuration]
|
// [#protodoc-title: Listener configuration]
|
||||||
// Listener :ref:`configuration overview <config_listeners>`
|
// Listener :ref:`configuration overview <config_listeners>`
|
||||||
|
|
||||||
// Listener list collections. Entries are *Listener* resources or references.
|
// The additional address the listener is listening on.
|
||||||
|
message AdditionalAddress {
|
||||||
|
core.v3.Address address = 1;
|
||||||
|
|
||||||
|
// Additional socket options that may not be present in Envoy source code or
|
||||||
|
// precompiled binaries. If specified, this will override the
|
||||||
|
// :ref:`socket_options <envoy_v3_api_field_config.listener.v3.Listener.socket_options>`
|
||||||
|
// in the listener. If specified with no
|
||||||
|
// :ref:`socket_options <envoy_v3_api_field_config.core.v3.SocketOptionsOverride.socket_options>`
|
||||||
|
// or an empty list of :ref:`socket_options <envoy_v3_api_field_config.core.v3.SocketOptionsOverride.socket_options>`,
|
||||||
|
// it means no socket option will apply.
|
||||||
|
core.v3.SocketOptionsOverride socket_options = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Listener list collections. Entries are ``Listener`` resources or references.
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
message ListenerCollection {
|
message ListenerCollection {
|
||||||
repeated xds.core.v3.CollectionEntry entries = 1;
|
repeated xds.core.v3.CollectionEntry entries = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 33]
|
// [#next-free-field: 34]
|
||||||
message Listener {
|
message Listener {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Listener";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Listener";
|
||||||
|
|
||||||
|
|
@ -88,11 +103,15 @@ message Listener {
|
||||||
|
|
||||||
// If specified, the listener will use the exact connection balancer.
|
// If specified, the listener will use the exact connection balancer.
|
||||||
ExactBalance exact_balance = 1;
|
ExactBalance exact_balance = 1;
|
||||||
|
|
||||||
|
// The listener will use the connection balancer according to ``type_url``. If ``type_url`` is invalid,
|
||||||
|
// Envoy will not attempt to balance active connections between worker threads.
|
||||||
|
// [#extension-category: envoy.network.connection_balance]
|
||||||
|
core.v3.TypedExtensionConfig extend_balance = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configuration for envoy internal listener. All the future internal listener features should be added here.
|
// Configuration for envoy internal listener. All the future internal listener features should be added here.
|
||||||
// [#not-implemented-hide:]
|
|
||||||
message InternalListenerConfig {
|
message InternalListenerConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,12 +125,17 @@ message Listener {
|
||||||
// The address that the listener should listen on. In general, the address must be unique, though
|
// The address that the listener should listen on. In general, the address must be unique, though
|
||||||
// that is governed by the bind rules of the OS. E.g., multiple listeners can listen on port 0 on
|
// that is governed by the bind rules of the OS. E.g., multiple listeners can listen on port 0 on
|
||||||
// Linux as the actual port will be allocated by the OS.
|
// Linux as the actual port will be allocated by the OS.
|
||||||
// Required unless *api_listener* or *listener_specifier* is populated.
|
// Required unless ``api_listener`` or ``listener_specifier`` is populated.
|
||||||
core.v3.Address address = 2;
|
core.v3.Address address = 2;
|
||||||
|
|
||||||
|
// The additional addresses the listener should listen on. The addresses must be unique across all
|
||||||
|
// listeners. Multiple addresses with port 0 can be supplied. When using multiple addresses in a single listener,
|
||||||
|
// all addresses use the same protocol, and multiple internal addresses are not supported.
|
||||||
|
repeated AdditionalAddress additional_addresses = 33;
|
||||||
|
|
||||||
// Optional prefix to use on listener stats. If empty, the stats will be rooted at
|
// Optional prefix to use on listener stats. If empty, the stats will be rooted at
|
||||||
// `listener.<address as string>.`. If non-empty, stats will be rooted at
|
// ``listener.<address as string>.``. If non-empty, stats will be rooted at
|
||||||
// `listener.<stat_prefix>.`.
|
// ``listener.<stat_prefix>.``.
|
||||||
string stat_prefix = 28;
|
string stat_prefix = 28;
|
||||||
|
|
||||||
// A list of filter chains to consider for this listener. The
|
// A list of filter chains to consider for this listener. The
|
||||||
|
|
@ -142,7 +166,7 @@ message Listener {
|
||||||
xds.type.matcher.v3.Matcher filter_chain_matcher = 32
|
xds.type.matcher.v3.Matcher filter_chain_matcher = 32
|
||||||
[(xds.annotations.v3.field_status).work_in_progress = true];
|
[(xds.annotations.v3.field_status).work_in_progress = true];
|
||||||
|
|
||||||
// If a connection is redirected using *iptables*, the port on which the proxy
|
// If a connection is redirected using ``iptables``, the port on which the proxy
|
||||||
// receives it might be different from the original destination address. When this flag is set to
|
// receives it might be different from the original destination address. When this flag is set to
|
||||||
// true, the listener hands off redirected connections to the listener associated with the
|
// true, the listener hands off redirected connections to the listener associated with the
|
||||||
// original destination address. If there is no listener associated with the original destination
|
// original destination address. If there is no listener associated with the original destination
|
||||||
|
|
@ -180,7 +204,7 @@ message Listener {
|
||||||
|
|
||||||
// The timeout to wait for all listener filters to complete operation. If the timeout is reached,
|
// The timeout to wait for all listener filters to complete operation. If the timeout is reached,
|
||||||
// the accepted socket is closed without a connection being created unless
|
// the accepted socket is closed without a connection being created unless
|
||||||
// `continue_on_listener_filters_timeout` is set to true. Specify 0 to disable the
|
// ``continue_on_listener_filters_timeout`` is set to true. Specify 0 to disable the
|
||||||
// timeout. If not specified, a default timeout of 15s is used.
|
// timeout. If not specified, a default timeout of 15s is used.
|
||||||
google.protobuf.Duration listener_filters_timeout = 15;
|
google.protobuf.Duration listener_filters_timeout = 15;
|
||||||
|
|
||||||
|
|
@ -195,30 +219,33 @@ message Listener {
|
||||||
|
|
||||||
// Whether the listener should be set as a transparent socket.
|
// Whether the listener should be set as a transparent socket.
|
||||||
// When this flag is set to true, connections can be redirected to the listener using an
|
// When this flag is set to true, connections can be redirected to the listener using an
|
||||||
// *iptables* *TPROXY* target, in which case the original source and destination addresses and
|
// ``iptables`` ``TPROXY`` target, in which case the original source and destination addresses and
|
||||||
// ports are preserved on accepted connections. This flag should be used in combination with
|
// ports are preserved on accepted connections. This flag should be used in combination with
|
||||||
// :ref:`an original_dst <config_listener_filters_original_dst>` :ref:`listener filter
|
// :ref:`an original_dst <config_listener_filters_original_dst>` :ref:`listener filter
|
||||||
// <envoy_v3_api_field_config.listener.v3.Listener.listener_filters>` to mark the connections' local addresses as
|
// <envoy_v3_api_field_config.listener.v3.Listener.listener_filters>` to mark the connections' local addresses as
|
||||||
// "restored." This can be used to hand off each redirected connection to another listener
|
// "restored." This can be used to hand off each redirected connection to another listener
|
||||||
// associated with the connection's destination address. Direct connections to the socket without
|
// associated with the connection's destination address. Direct connections to the socket without
|
||||||
// using *TPROXY* cannot be distinguished from connections redirected using *TPROXY* and are
|
// using ``TPROXY`` cannot be distinguished from connections redirected using ``TPROXY`` and are
|
||||||
// therefore treated as if they were redirected.
|
// therefore treated as if they were redirected.
|
||||||
// When this flag is set to false, the listener's socket is explicitly reset as non-transparent.
|
// When this flag is set to false, the listener's socket is explicitly reset as non-transparent.
|
||||||
// Setting this flag requires Envoy to run with the *CAP_NET_ADMIN* capability.
|
// Setting this flag requires Envoy to run with the ``CAP_NET_ADMIN`` capability.
|
||||||
// When this flag is not set (default), the socket is not modified, i.e. the transparent option
|
// When this flag is not set (default), the socket is not modified, i.e. the transparent option
|
||||||
// is neither set nor reset.
|
// is neither set nor reset.
|
||||||
google.protobuf.BoolValue transparent = 10;
|
google.protobuf.BoolValue transparent = 10;
|
||||||
|
|
||||||
// Whether the listener should set the *IP_FREEBIND* socket option. When this
|
// Whether the listener should set the ``IP_FREEBIND`` socket option. When this
|
||||||
// flag is set to true, listeners can be bound to an IP address that is not
|
// flag is set to true, listeners can be bound to an IP address that is not
|
||||||
// configured on the system running Envoy. When this flag is set to false, the
|
// configured on the system running Envoy. When this flag is set to false, the
|
||||||
// option *IP_FREEBIND* is disabled on the socket. When this flag is not set
|
// option ``IP_FREEBIND`` is disabled on the socket. When this flag is not set
|
||||||
// (default), the socket is not modified, i.e. the option is neither enabled
|
// (default), the socket is not modified, i.e. the option is neither enabled
|
||||||
// nor disabled.
|
// nor disabled.
|
||||||
google.protobuf.BoolValue freebind = 11;
|
google.protobuf.BoolValue freebind = 11;
|
||||||
|
|
||||||
// Additional socket options that may not be present in Envoy source code or
|
// Additional socket options that may not be present in Envoy source code or
|
||||||
// precompiled binaries.
|
// precompiled binaries. The socket options can be updated for a listener when
|
||||||
|
// :ref:`enable_reuse_port <envoy_v3_api_field_config.listener.v3.Listener.enable_reuse_port>`
|
||||||
|
// is `true`. Otherwise, if socket options change during a listener update the update will be rejected
|
||||||
|
// to make it clear that the options were not updated.
|
||||||
repeated core.v3.SocketOption socket_options = 13;
|
repeated core.v3.SocketOption socket_options = 13;
|
||||||
|
|
||||||
// Whether the listener should accept TCP Fast Open (TFO) connections.
|
// Whether the listener should accept TCP Fast Open (TFO) connections.
|
||||||
|
|
@ -277,14 +304,16 @@ message Listener {
|
||||||
// enable the balance config in Y1 and Y2 to balance the connections among the workers.
|
// enable the balance config in Y1 and Y2 to balance the connections among the workers.
|
||||||
ConnectionBalanceConfig connection_balance_config = 20;
|
ConnectionBalanceConfig connection_balance_config = 20;
|
||||||
|
|
||||||
// Deprecated. Use `enable_reuse_port` instead.
|
// Deprecated. Use ``enable_reuse_port`` instead.
|
||||||
bool reuse_port = 21 [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
bool reuse_port = 21 [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// When this flag is set to true, listeners set the *SO_REUSEPORT* socket option and
|
// When this flag is set to true, listeners set the ``SO_REUSEPORT`` socket option and
|
||||||
// create one socket for each worker thread. This makes inbound connections
|
// create one socket for each worker thread. This makes inbound connections
|
||||||
// distribute among worker threads roughly evenly in cases where there are a high number
|
// distribute among worker threads roughly evenly in cases where there are a high number
|
||||||
// of connections. When this flag is set to false, all worker threads share one socket. This field
|
// of connections. When this flag is set to false, all worker threads share one socket. This field
|
||||||
// defaults to true.
|
// defaults to true. The change of field will be rejected during an listener update when the
|
||||||
|
// runtime flag ``envoy.reloadable_features.enable_update_listener_socket_options`` is enabled.
|
||||||
|
// Otherwise, the update of this field will be ignored quietly.
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
|
|
@ -317,24 +346,21 @@ message Listener {
|
||||||
google.protobuf.BoolValue bind_to_port = 26;
|
google.protobuf.BoolValue bind_to_port = 26;
|
||||||
|
|
||||||
// The exclusive listener type and the corresponding config.
|
// The exclusive listener type and the corresponding config.
|
||||||
// TODO(lambdai): https://github.com/envoyproxy/envoy/issues/15372
|
|
||||||
// Will create and add TcpListenerConfig. Will add UdpListenerConfig and ApiListener.
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
oneof listener_specifier {
|
oneof listener_specifier {
|
||||||
// Used to represent an internal listener which does not listen on OSI L4 address but can be used by the
|
// Used to represent an internal listener which does not listen on OSI L4 address but can be used by the
|
||||||
// :ref:`envoy cluster <envoy_v3_api_msg_config.cluster.v3.Cluster>` to create a user space connection to.
|
// :ref:`envoy cluster <envoy_v3_api_msg_config.cluster.v3.Cluster>` to create a user space connection to.
|
||||||
// The internal listener acts as a tcp listener. It supports listener filters and network filter chains.
|
// The internal listener acts as a TCP listener. It supports listener filters and network filter chains.
|
||||||
// The internal listener require :ref:`address <envoy_v3_api_field_config.listener.v3.Listener.address>` has
|
// Upstream clusters refer to the internal listeners by their :ref:`name
|
||||||
// field `envoy_internal_address`.
|
// <envoy_v3_api_field_config.listener.v3.Listener.name>`. :ref:`Address
|
||||||
|
// <envoy_v3_api_field_config.listener.v3.Listener.address>` must not be set on the internal listeners.
|
||||||
//
|
//
|
||||||
// There are some limitations are derived from the implementation. The known limitations include
|
// There are some limitations that are derived from the implementation. The known limitations include:
|
||||||
//
|
//
|
||||||
// * :ref:`ConnectionBalanceConfig <envoy_v3_api_msg_config.listener.v3.Listener.ConnectionBalanceConfig>` is not
|
// * :ref:`ConnectionBalanceConfig <envoy_v3_api_msg_config.listener.v3.Listener.ConnectionBalanceConfig>` is not
|
||||||
// allowed because both cluster connection and listener connection must be owned by the same dispatcher.
|
// allowed because both the cluster connection and the listener connection must be owned by the same dispatcher.
|
||||||
// * :ref:`tcp_backlog_size <envoy_v3_api_field_config.listener.v3.Listener.tcp_backlog_size>`
|
// * :ref:`tcp_backlog_size <envoy_v3_api_field_config.listener.v3.Listener.tcp_backlog_size>`
|
||||||
// * :ref:`freebind <envoy_v3_api_field_config.listener.v3.Listener.freebind>`
|
// * :ref:`freebind <envoy_v3_api_field_config.listener.v3.Listener.freebind>`
|
||||||
// * :ref:`transparent <envoy_v3_api_field_config.listener.v3.Listener.transparent>`
|
// * :ref:`transparent <envoy_v3_api_field_config.listener.v3.Listener.transparent>`
|
||||||
// [#not-implemented-hide:]
|
|
||||||
InternalListenerConfig internal_listener = 27;
|
InternalListenerConfig internal_listener = 27;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -346,3 +372,21 @@ message Listener {
|
||||||
// :ref:`global_downstream_max_connections <config_overload_manager_limiting_connections>`.
|
// :ref:`global_downstream_max_connections <config_overload_manager_limiting_connections>`.
|
||||||
bool ignore_global_conn_limit = 31;
|
bool ignore_global_conn_limit = 31;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A placeholder proto so that users can explicitly configure the standard
|
||||||
|
// Listener Manager via the bootstrap's :ref:`listener_manager <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.listener_manager>`.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
message ListenerManager {
|
||||||
|
}
|
||||||
|
|
||||||
|
// A placeholder proto so that users can explicitly configure the standard
|
||||||
|
// Validation Listener Manager via the bootstrap's :ref:`listener_manager <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.listener_manager>`.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
message ValidationListenerManager {
|
||||||
|
}
|
||||||
|
|
||||||
|
// A placeholder proto so that users can explicitly configure the API
|
||||||
|
// Listener Manager via the bootstrap's :ref:`listener_manager <envoy_v3_api_field_config.bootstrap.v3.Bootstrap.listener_manager>`.
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
message ApiListenerManager {
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@ import "google/protobuf/any.proto";
|
||||||
import "google/protobuf/duration.proto";
|
import "google/protobuf/duration.proto";
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
import "xds/annotations/v3/status.proto";
|
|
||||||
|
|
||||||
import "envoy/annotations/deprecation.proto";
|
import "envoy/annotations/deprecation.proto";
|
||||||
import "udpa/annotations/status.proto";
|
import "udpa/annotations/status.proto";
|
||||||
import "udpa/annotations/versioning.proto";
|
import "udpa/annotations/versioning.proto";
|
||||||
|
|
@ -157,6 +155,7 @@ message FilterChainMatch {
|
||||||
// will be first matched against ``www.example.com``, then ``*.example.com``, then ``*.com``.
|
// will be first matched against ``www.example.com``, then ``*.example.com``, then ``*.com``.
|
||||||
//
|
//
|
||||||
// Note that partial wildcards are not supported, and values like ``*w.example.com`` are invalid.
|
// Note that partial wildcards are not supported, and values like ``*w.example.com`` are invalid.
|
||||||
|
// The value ``*`` is also not supported, and ``server_names`` should be omitted instead.
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
|
|
@ -229,6 +228,12 @@ message FilterChain {
|
||||||
// connections established with the listener. Order matters as the filters are
|
// connections established with the listener. Order matters as the filters are
|
||||||
// processed sequentially as connection events happen. Note: If the filter
|
// processed sequentially as connection events happen. Note: If the filter
|
||||||
// list is empty, the connection will close by default.
|
// list is empty, the connection will close by default.
|
||||||
|
//
|
||||||
|
// For QUIC listeners, network filters other than HTTP Connection Manager (HCM)
|
||||||
|
// can be created, but due to differences in the connection implementation compared
|
||||||
|
// to TCP, the onData() method will never be called. Therefore, network filters
|
||||||
|
// for QUIC listeners should only expect to do work at the start of a new connection
|
||||||
|
// (i.e. in onNewConnection()). HCM must be the last (or only) filter in the chain.
|
||||||
repeated Filter filters = 3;
|
repeated Filter filters = 3;
|
||||||
|
|
||||||
// Whether the listener should expect a PROXY protocol V1 header on new
|
// Whether the listener should expect a PROXY protocol V1 header on new
|
||||||
|
|
@ -248,8 +253,8 @@ message FilterChain {
|
||||||
core.v3.Metadata metadata = 5;
|
core.v3.Metadata metadata = 5;
|
||||||
|
|
||||||
// Optional custom transport socket implementation to use for downstream connections.
|
// Optional custom transport socket implementation to use for downstream connections.
|
||||||
// To setup TLS, set a transport socket with name `envoy.transport_sockets.tls` and
|
// To setup TLS, set a transport socket with name ``envoy.transport_sockets.tls`` and
|
||||||
// :ref:`DownstreamTlsContext <envoy_v3_api_msg_extensions.transport_sockets.tls.v3.DownstreamTlsContext>` in the `typed_config`.
|
// :ref:`DownstreamTlsContext <envoy_v3_api_msg_extensions.transport_sockets.tls.v3.DownstreamTlsContext>` in the ``typed_config``.
|
||||||
// If no transport socket configuration is specified, new connections
|
// If no transport socket configuration is specified, new connections
|
||||||
// will be set up with plaintext.
|
// will be set up with plaintext.
|
||||||
// [#extension-category: envoy.transport_sockets.downstream]
|
// [#extension-category: envoy.transport_sockets.downstream]
|
||||||
|
|
@ -264,7 +269,7 @@ message FilterChain {
|
||||||
// Note: :ref:`filter_chain_matcher
|
// Note: :ref:`filter_chain_matcher
|
||||||
// <envoy_v3_api_field_config.listener.v3.Listener.filter_chain_matcher>`
|
// <envoy_v3_api_field_config.listener.v3.Listener.filter_chain_matcher>`
|
||||||
// requires that filter chains are uniquely named within a listener.
|
// requires that filter chains are uniquely named within a listener.
|
||||||
string name = 7 [(xds.annotations.v3.field_status).work_in_progress = true];
|
string name = 7;
|
||||||
|
|
||||||
// [#not-implemented-hide:] The configuration to specify whether the filter chain will be built on-demand.
|
// [#not-implemented-hide:] The configuration to specify whether the filter chain will be built on-demand.
|
||||||
// If this field is not empty, the filter chain will be built on-demand.
|
// If this field is not empty, the filter chain will be built on-demand.
|
||||||
|
|
@ -357,7 +362,6 @@ message ListenerFilter {
|
||||||
// Configuration source specifier for an extension configuration discovery
|
// Configuration source specifier for an extension configuration discovery
|
||||||
// service. In case of a failure and without the default configuration, the
|
// service. In case of a failure and without the default configuration, the
|
||||||
// listener closes the connections.
|
// listener closes the connections.
|
||||||
// [#not-implemented-hide:]
|
|
||||||
core.v3.ExtensionConfigSource config_discovery = 5;
|
core.v3.ExtensionConfigSource config_discovery = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// [#protodoc-title: QUIC listener config]
|
// [#protodoc-title: QUIC listener config]
|
||||||
|
|
||||||
// Configuration specific to the UDP QUIC listener.
|
// Configuration specific to the UDP QUIC listener.
|
||||||
// [#next-free-field: 8]
|
// [#next-free-field: 9]
|
||||||
message QuicProtocolOptions {
|
message QuicProtocolOptions {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.listener.QuicProtocolOptions";
|
"envoy.api.v2.listener.QuicProtocolOptions";
|
||||||
|
|
@ -54,13 +54,18 @@ message QuicProtocolOptions {
|
||||||
google.protobuf.UInt32Value packets_to_read_to_connection_count_ratio = 5
|
google.protobuf.UInt32Value packets_to_read_to_connection_count_ratio = 5
|
||||||
[(validate.rules).uint32 = {gte: 1}];
|
[(validate.rules).uint32 = {gte: 1}];
|
||||||
|
|
||||||
// Configure which implementation of `quic::QuicCryptoClientStreamBase` to be used for this listener.
|
// Configure which implementation of ``quic::QuicCryptoClientStreamBase`` to be used for this listener.
|
||||||
// If not specified the :ref:`QUICHE default one configured by <envoy_v3_api_msg_extensions.quic.crypto_stream.v3.CryptoServerStreamConfig>` will be used.
|
// If not specified the :ref:`QUICHE default one configured by <envoy_v3_api_msg_extensions.quic.crypto_stream.v3.CryptoServerStreamConfig>` will be used.
|
||||||
// [#extension-category: envoy.quic.server.crypto_stream]
|
// [#extension-category: envoy.quic.server.crypto_stream]
|
||||||
core.v3.TypedExtensionConfig crypto_stream_config = 6;
|
core.v3.TypedExtensionConfig crypto_stream_config = 6;
|
||||||
|
|
||||||
// Configure which implementation of `quic::ProofSource` to be used for this listener.
|
// Configure which implementation of ``quic::ProofSource`` to be used for this listener.
|
||||||
// If not specified the :ref:`default one configured by <envoy_v3_api_msg_extensions.quic.proof_source.v3.ProofSourceConfig>` will be used.
|
// If not specified the :ref:`default one configured by <envoy_v3_api_msg_extensions.quic.proof_source.v3.ProofSourceConfig>` will be used.
|
||||||
// [#extension-category: envoy.quic.proof_source]
|
// [#extension-category: envoy.quic.proof_source]
|
||||||
core.v3.TypedExtensionConfig proof_source_config = 7;
|
core.v3.TypedExtensionConfig proof_source_config = 7;
|
||||||
|
|
||||||
|
// Config which implementation of ``quic::ConnectionIdGeneratorInterface`` to be used for this listener.
|
||||||
|
// If not specified the :ref:`default one configured by <envoy_v3_api_msg_extensions.quic.connection_id_generator.v3.DeterministicConnectionIdGeneratorConfig>` will be used.
|
||||||
|
// [#extension-category: envoy.quic.connection_id_generator]
|
||||||
|
core.v3.TypedExtensionConfig connection_id_generator_config = 8;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ syntax = "proto3";
|
||||||
|
|
||||||
package envoy.config.listener.v3;
|
package envoy.config.listener.v3;
|
||||||
|
|
||||||
|
import "envoy/config/core/v3/extension.proto";
|
||||||
import "envoy/config/core/v3/udp_socket_config.proto";
|
import "envoy/config/core/v3/udp_socket_config.proto";
|
||||||
import "envoy/config/listener/v3/quic_config.proto";
|
import "envoy/config/listener/v3/quic_config.proto";
|
||||||
|
|
||||||
|
|
@ -17,7 +18,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// [#protodoc-title: UDP listener config]
|
// [#protodoc-title: UDP listener config]
|
||||||
// Listener :ref:`configuration overview <config_listeners>`
|
// Listener :ref:`configuration overview <config_listeners>`
|
||||||
|
|
||||||
// [#next-free-field: 8]
|
// [#next-free-field: 9]
|
||||||
message UdpListenerConfig {
|
message UdpListenerConfig {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.listener.UdpListenerConfig";
|
"envoy.api.v2.listener.UdpListenerConfig";
|
||||||
|
|
@ -35,6 +36,14 @@ message UdpListenerConfig {
|
||||||
// Configuration for QUIC protocol. If empty, QUIC will not be enabled on this listener. Set
|
// Configuration for QUIC protocol. If empty, QUIC will not be enabled on this listener. Set
|
||||||
// to the default object to enable QUIC without modifying any additional options.
|
// to the default object to enable QUIC without modifying any additional options.
|
||||||
QuicProtocolOptions quic_options = 7;
|
QuicProtocolOptions quic_options = 7;
|
||||||
|
|
||||||
|
// Configuration for the UDP packet writer. If empty, HTTP/3 will use GSO if available
|
||||||
|
// (:ref:`UdpDefaultWriterFactory <envoy_v3_api_msg_extensions.udp_packet_writer.v3.UdpGsoBatchWriterFactory>`)
|
||||||
|
// or the default kernel sendmsg if not,
|
||||||
|
// (:ref:`UdpDefaultWriterFactory <envoy_v3_api_msg_extensions.udp_packet_writer.v3.UdpDefaultWriterFactory>`)
|
||||||
|
// and raw UDP will use kernel sendmsg.
|
||||||
|
// [#extension-category: envoy.udp_packet_writer]
|
||||||
|
core.v3.TypedExtensionConfig udp_packet_packet_writer_config = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ActiveRawUdpListenerConfig {
|
message ActiveRawUdpListenerConfig {
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,11 @@ message StatsConfig {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.config.metrics.v2.StatsConfig";
|
"envoy.config.metrics.v2.StatsConfig";
|
||||||
|
|
||||||
// Each stat name is iteratively processed through these tag specifiers.
|
// Each stat name is independently processed through these tag specifiers. When a tag is
|
||||||
// When a tag is matched, the first capture group is removed from the name so
|
// matched, the first capture group is not immediately removed from the name, so later
|
||||||
// later :ref:`TagSpecifiers <envoy_v3_api_msg_config.metrics.v3.TagSpecifier>` cannot match that
|
// :ref:`TagSpecifiers <envoy_v3_api_msg_config.metrics.v3.TagSpecifier>` can also match that
|
||||||
// same portion of the match.
|
// same portion of the match. After all tag matching is complete, a tag-extracted version of
|
||||||
|
// the name is produced and is used in stats sinks that represent tags, such as Prometheus.
|
||||||
repeated TagSpecifier stats_tags = 1;
|
repeated TagSpecifier stats_tags = 1;
|
||||||
|
|
||||||
// Use all default tag regexes specified in Envoy. These can be combined with
|
// Use all default tag regexes specified in Envoy. These can be combined with
|
||||||
|
|
@ -120,7 +121,7 @@ message StatsMatcher {
|
||||||
// limited by either an exclusion or an inclusion list of :ref:`StringMatcher
|
// limited by either an exclusion or an inclusion list of :ref:`StringMatcher
|
||||||
// <envoy_v3_api_msg_type.matcher.v3.StringMatcher>` protos:
|
// <envoy_v3_api_msg_type.matcher.v3.StringMatcher>` protos:
|
||||||
//
|
//
|
||||||
// * If `reject_all` is set to `true`, no stats will be instantiated. If `reject_all` is set to
|
// * If ``reject_all`` is set to `true`, no stats will be instantiated. If ``reject_all`` is set to
|
||||||
// `false`, all stats will be instantiated.
|
// `false`, all stats will be instantiated.
|
||||||
//
|
//
|
||||||
// * If an exclusion list is supplied, any stat name matching *any* of the StringMatchers in the
|
// * If an exclusion list is supplied, any stat name matching *any* of the StringMatchers in the
|
||||||
|
|
@ -186,7 +187,7 @@ message StatsMatcher {
|
||||||
oneof stats_matcher {
|
oneof stats_matcher {
|
||||||
option (validate.required) = true;
|
option (validate.required) = true;
|
||||||
|
|
||||||
// If `reject_all` is true, then all stats are disabled. If `reject_all` is false, then all
|
// If ``reject_all`` is true, then all stats are disabled. If ``reject_all`` is false, then all
|
||||||
// stats are enabled.
|
// stats are enabled.
|
||||||
bool reject_all = 1;
|
bool reject_all = 1;
|
||||||
|
|
||||||
|
|
@ -219,7 +220,11 @@ message TagSpecifier {
|
||||||
//
|
//
|
||||||
// .. note::
|
// .. note::
|
||||||
//
|
//
|
||||||
// It is invalid to specify the same tag name twice in a config.
|
// A stat name may be spelled in such a way that it matches two different
|
||||||
|
// tag extractors for the same tag name. In that case, all but one of the
|
||||||
|
// tag values will be dropped. It is not specified which tag value will be
|
||||||
|
// retained. The extraction will only occur for one of the extractors, and
|
||||||
|
// only the matched extraction will be removed from the tag name.
|
||||||
string tag_name = 1;
|
string tag_name = 1;
|
||||||
|
|
||||||
oneof tag_value {
|
oneof tag_value {
|
||||||
|
|
@ -265,18 +270,18 @@ message TagSpecifier {
|
||||||
// }
|
// }
|
||||||
// ]
|
// ]
|
||||||
//
|
//
|
||||||
// The two regexes of the specifiers will be processed in the definition order.
|
// The two regexes of the specifiers will be processed from the elaborated
|
||||||
|
// stat name.
|
||||||
//
|
//
|
||||||
// The first regex will remove ``ios.``, leaving the tag extracted name
|
// The first regex will save ``ios.`` as the tag value for ``envoy.http_user_agent``. It will
|
||||||
// ``http.connection_manager_1.user_agent.downstream_cx_total``. The tag
|
// leave it in the name for potential matching with additional tag specifiers. After all tag
|
||||||
// ``envoy.http_user_agent`` will be added with tag value ``ios``.
|
// specifiers are processed the tags will be removed from the name.
|
||||||
//
|
//
|
||||||
// The second regex will remove ``connection_manager_1.`` from the tag
|
// The second regex will populate tag ``envoy.http_conn_manager_prefix`` with value
|
||||||
// extracted name produced by the first regex
|
// ``connection_manager_1.``, based on the original stat name.
|
||||||
// ``http.connection_manager_1.user_agent.downstream_cx_total``, leaving
|
//
|
||||||
// ``http.user_agent.downstream_cx_total`` as the tag extracted name. The tag
|
// As a final step, the matched tags are removed, leaving
|
||||||
// ``envoy.http_conn_manager_prefix`` will be added with the tag value
|
// ``http.user_agent.downstream_cx_total`` as the tag extracted name.
|
||||||
// ``connection_manager_1``.
|
|
||||||
string regex = 2 [(validate.rules).string = {max_bytes: 1024}];
|
string regex = 2 [(validate.rules).string = {max_bytes: 1024}];
|
||||||
|
|
||||||
// Specifies a fixed tag value for the ``tag_name``.
|
// Specifies a fixed tag value for the ``tag_name``.
|
||||||
|
|
@ -287,7 +292,7 @@ message TagSpecifier {
|
||||||
// Specifies a matcher for stats and the buckets that matching stats should use.
|
// Specifies a matcher for stats and the buckets that matching stats should use.
|
||||||
message HistogramBucketSettings {
|
message HistogramBucketSettings {
|
||||||
// The stats that this rule applies to. The match is applied to the original stat name
|
// The stats that this rule applies to. The match is applied to the original stat name
|
||||||
// before tag-extraction, for example `cluster.exampleclustername.upstream_cx_length_ms`.
|
// before tag-extraction, for example ``cluster.exampleclustername.upstream_cx_length_ms``.
|
||||||
type.matcher.v3.StringMatcher match = 1 [(validate.rules).message = {required: true}];
|
type.matcher.v3.StringMatcher match = 1 [(validate.rules).message = {required: true}];
|
||||||
|
|
||||||
// Each value is the upper bound of a bucket. Each bucket must be greater than 0 and unique.
|
// Each value is the upper bound of a bucket. Each bucket must be greater than 0 and unique.
|
||||||
|
|
@ -299,7 +304,7 @@ message HistogramBucketSettings {
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stats configuration proto schema for built-in *envoy.stat_sinks.statsd* sink. This sink does not support
|
// Stats configuration proto schema for built-in ``envoy.stat_sinks.statsd`` sink. This sink does not support
|
||||||
// tagged metrics.
|
// tagged metrics.
|
||||||
// [#extension: envoy.stat_sinks.statsd]
|
// [#extension: envoy.stat_sinks.statsd]
|
||||||
message StatsdSink {
|
message StatsdSink {
|
||||||
|
|
@ -348,7 +353,7 @@ message StatsdSink {
|
||||||
string prefix = 3;
|
string prefix = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stats configuration proto schema for built-in *envoy.stat_sinks.dog_statsd* sink.
|
// Stats configuration proto schema for built-in ``envoy.stat_sinks.dog_statsd`` sink.
|
||||||
// The sink emits stats with `DogStatsD <https://docs.datadoghq.com/guides/dogstatsd/>`_
|
// The sink emits stats with `DogStatsD <https://docs.datadoghq.com/guides/dogstatsd/>`_
|
||||||
// compatible tags. Tags are configurable via :ref:`StatsConfig
|
// compatible tags. Tags are configurable via :ref:`StatsConfig
|
||||||
// <envoy_v3_api_msg_config.metrics.v3.StatsConfig>`.
|
// <envoy_v3_api_msg_config.metrics.v3.StatsConfig>`.
|
||||||
|
|
@ -380,7 +385,7 @@ message DogStatsdSink {
|
||||||
google.protobuf.UInt64Value max_bytes_per_datagram = 4 [(validate.rules).uint64 = {gt: 0}];
|
google.protobuf.UInt64Value max_bytes_per_datagram = 4 [(validate.rules).uint64 = {gt: 0}];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stats configuration proto schema for built-in *envoy.stat_sinks.hystrix* sink.
|
// Stats configuration proto schema for built-in ``envoy.stat_sinks.hystrix`` sink.
|
||||||
// The sink emits stats in `text/event-stream
|
// The sink emits stats in `text/event-stream
|
||||||
// <https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events>`_
|
// <https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events>`_
|
||||||
// formatted stream for use by `Hystrix dashboard
|
// formatted stream for use by `Hystrix dashboard
|
||||||
|
|
@ -401,7 +406,7 @@ message HystrixSink {
|
||||||
// in the process). The sink then outputs the aggregate statistics across the
|
// in the process). The sink then outputs the aggregate statistics across the
|
||||||
// current rolling window to the event stream(s).
|
// current rolling window to the event stream(s).
|
||||||
//
|
//
|
||||||
// rolling_window(ms) = stats_flush_interval(ms) * num_of_buckets
|
// ``rolling_window(ms)`` = ``stats_flush_interval(ms)`` * ``num_of_buckets``
|
||||||
//
|
//
|
||||||
// More detailed explanation can be found in `Hystrix wiki
|
// More detailed explanation can be found in `Hystrix wiki
|
||||||
// <https://github.com/Netflix/Hystrix/wiki/Metrics-and-Monitoring#hystrixrollingnumber>`_.
|
// <https://github.com/Netflix/Hystrix/wiki/Metrics-and-Monitoring#hystrixrollingnumber>`_.
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ message ThresholdTrigger {
|
||||||
message ScaledTrigger {
|
message ScaledTrigger {
|
||||||
// If the resource pressure is greater than this value, the trigger will be in the
|
// If the resource pressure is greater than this value, the trigger will be in the
|
||||||
// :ref:`scaling <arch_overview_overload_manager-triggers-state>` state with value
|
// :ref:`scaling <arch_overview_overload_manager-triggers-state>` state with value
|
||||||
// `(pressure - scaling_threshold) / (saturation_threshold - scaling_threshold)`.
|
// ``(pressure - scaling_threshold) / (saturation_threshold - scaling_threshold)``.
|
||||||
double scaling_threshold = 1 [(validate.rules).double = {lte: 1.0 gte: 0.0}];
|
double scaling_threshold = 1 [(validate.rules).double = {lte: 1.0 gte: 0.0}];
|
||||||
|
|
||||||
// If the resource pressure is greater than this value, the trigger will enter saturation.
|
// If the resource pressure is greater than this value, the trigger will enter saturation.
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ package envoy.config.rbac.v3;
|
||||||
import "envoy/config/core/v3/address.proto";
|
import "envoy/config/core/v3/address.proto";
|
||||||
import "envoy/config/core/v3/extension.proto";
|
import "envoy/config/core/v3/extension.proto";
|
||||||
import "envoy/config/route/v3/route_components.proto";
|
import "envoy/config/route/v3/route_components.proto";
|
||||||
|
import "envoy/type/matcher/v3/filter_state.proto";
|
||||||
import "envoy/type/matcher/v3/metadata.proto";
|
import "envoy/type/matcher/v3/metadata.proto";
|
||||||
import "envoy/type/matcher/v3/path.proto";
|
import "envoy/type/matcher/v3/path.proto";
|
||||||
import "envoy/type/matcher/v3/string.proto";
|
import "envoy/type/matcher/v3/string.proto";
|
||||||
|
|
@ -28,21 +29,21 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// [#protodoc-title: Role Based Access Control (RBAC)]
|
// [#protodoc-title: Role Based Access Control (RBAC)]
|
||||||
|
|
||||||
// Role Based Access Control (RBAC) provides service-level and method-level access control for a
|
// Role Based Access Control (RBAC) provides service-level and method-level access control for a
|
||||||
// service. Requests are allowed or denied based on the `action` and whether a matching policy is
|
// service. Requests are allowed or denied based on the ``action`` and whether a matching policy is
|
||||||
// found. For instance, if the action is ALLOW and a matching policy is found the request should be
|
// found. For instance, if the action is ALLOW and a matching policy is found the request should be
|
||||||
// allowed.
|
// allowed.
|
||||||
//
|
//
|
||||||
// RBAC can also be used to make access logging decisions by communicating with access loggers
|
// RBAC can also be used to make access logging decisions by communicating with access loggers
|
||||||
// through dynamic metadata. When the action is LOG and at least one policy matches, the
|
// through dynamic metadata. When the action is LOG and at least one policy matches, the
|
||||||
// `access_log_hint` value in the shared key namespace 'envoy.common' is set to `true` indicating
|
// ``access_log_hint`` value in the shared key namespace 'envoy.common' is set to ``true`` indicating
|
||||||
// the request should be logged.
|
// the request should be logged.
|
||||||
//
|
//
|
||||||
// Here is an example of RBAC configuration. It has two policies:
|
// Here is an example of RBAC configuration. It has two policies:
|
||||||
//
|
//
|
||||||
// * Service account "cluster.local/ns/default/sa/admin" has full access to the service, and so
|
// * Service account ``cluster.local/ns/default/sa/admin`` has full access to the service, and so
|
||||||
// does "cluster.local/ns/default/sa/superuser".
|
// does "cluster.local/ns/default/sa/superuser".
|
||||||
//
|
//
|
||||||
// * Any user can read ("GET") the service at paths with prefix "/products", so long as the
|
// * Any user can read (``GET``) the service at paths with prefix ``/products``, so long as the
|
||||||
// destination port is either 80 or 443.
|
// destination port is either 80 or 443.
|
||||||
//
|
//
|
||||||
// .. code-block:: yaml
|
// .. code-block:: yaml
|
||||||
|
|
@ -89,7 +90,7 @@ message RBAC {
|
||||||
// access control.
|
// access control.
|
||||||
DENY = 1;
|
DENY = 1;
|
||||||
|
|
||||||
// The policies set the `access_log_hint` dynamic metadata key based on if requests match.
|
// The policies set the ``access_log_hint`` dynamic metadata key based on if requests match.
|
||||||
// All requests are allowed.
|
// All requests are allowed.
|
||||||
LOG = 2;
|
LOG = 2;
|
||||||
}
|
}
|
||||||
|
|
@ -99,13 +100,13 @@ message RBAC {
|
||||||
//
|
//
|
||||||
// Actions:
|
// Actions:
|
||||||
//
|
//
|
||||||
// * ALLOW: Allows the request if and only if there is a policy that matches
|
// * ``ALLOW``: Allows the request if and only if there is a policy that matches
|
||||||
// the request.
|
// the request.
|
||||||
// * DENY: Allows the request if and only if there are no policies that
|
// * ``DENY``: Allows the request if and only if there are no policies that
|
||||||
// match the request.
|
// match the request.
|
||||||
// * LOG: Allows all requests. If at least one policy matches, the dynamic
|
// * ``LOG``: Allows all requests. If at least one policy matches, the dynamic
|
||||||
// metadata key `access_log_hint` is set to the value `true` under the shared
|
// metadata key ``access_log_hint`` is set to the value ``true`` under the shared
|
||||||
// key namespace 'envoy.common'. If no policies match, it is set to `false`.
|
// key namespace ``envoy.common``. If no policies match, it is set to ``false``.
|
||||||
// Other actions do not modify this key.
|
// Other actions do not modify this key.
|
||||||
//
|
//
|
||||||
Action action = 1 [(validate.rules).enum = {defined_only: true}];
|
Action action = 1 [(validate.rules).enum = {defined_only: true}];
|
||||||
|
|
@ -124,12 +125,12 @@ message Policy {
|
||||||
|
|
||||||
// Required. The set of permissions that define a role. Each permission is
|
// Required. The set of permissions that define a role. Each permission is
|
||||||
// matched with OR semantics. To match all actions for this policy, a single
|
// matched with OR semantics. To match all actions for this policy, a single
|
||||||
// Permission with the `any` field set to true should be used.
|
// Permission with the ``any`` field set to true should be used.
|
||||||
repeated Permission permissions = 1 [(validate.rules).repeated = {min_items: 1}];
|
repeated Permission permissions = 1 [(validate.rules).repeated = {min_items: 1}];
|
||||||
|
|
||||||
// Required. The set of principals that are assigned/denied the role based on
|
// Required. The set of principals that are assigned/denied the role based on
|
||||||
// “action”. Each principal is matched with OR semantics. To match all
|
// “action”. Each principal is matched with OR semantics. To match all
|
||||||
// downstreams for this policy, a single Principal with the `any` field set to
|
// downstreams for this policy, a single Principal with the ``any`` field set to
|
||||||
// true should be used.
|
// true should be used.
|
||||||
repeated Principal principals = 2 [(validate.rules).repeated = {min_items: 1}];
|
repeated Principal principals = 2 [(validate.rules).repeated = {min_items: 1}];
|
||||||
|
|
||||||
|
|
@ -152,7 +153,7 @@ message Policy {
|
||||||
message Permission {
|
message Permission {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.config.rbac.v2.Permission";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.config.rbac.v2.Permission";
|
||||||
|
|
||||||
// Used in the `and_rules` and `or_rules` fields in the `rule` oneof. Depending on the context,
|
// Used in the ``and_rules`` and ``or_rules`` fields in the ``rule`` oneof. Depending on the context,
|
||||||
// each are applied with the associated behavior.
|
// each are applied with the associated behavior.
|
||||||
message Set {
|
message Set {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
|
@ -175,7 +176,7 @@ message Permission {
|
||||||
|
|
||||||
// A header (or pseudo-header such as :path or :method) on the incoming HTTP request. Only
|
// A header (or pseudo-header such as :path or :method) on the incoming HTTP request. Only
|
||||||
// available for HTTP request.
|
// available for HTTP request.
|
||||||
// Note: the pseudo-header :path includes the query and fragment string. Use the `url_path`
|
// Note: the pseudo-header :path includes the query and fragment string. Use the ``url_path``
|
||||||
// field if you want to match the URL path without the query and fragment string.
|
// field if you want to match the URL path without the query and fragment string.
|
||||||
route.v3.HeaderMatcher header = 4;
|
route.v3.HeaderMatcher header = 4;
|
||||||
|
|
||||||
|
|
@ -195,8 +196,8 @@ message Permission {
|
||||||
type.matcher.v3.MetadataMatcher metadata = 7;
|
type.matcher.v3.MetadataMatcher metadata = 7;
|
||||||
|
|
||||||
// Negates matching the provided permission. For instance, if the value of
|
// Negates matching the provided permission. For instance, if the value of
|
||||||
// `not_rule` would match, this permission would not match. Conversely, if
|
// ``not_rule`` would match, this permission would not match. Conversely, if
|
||||||
// the value of `not_rule` would not match, this permission would match.
|
// the value of ``not_rule`` would not match, this permission would match.
|
||||||
Permission not_rule = 8;
|
Permission not_rule = 8;
|
||||||
|
|
||||||
// The request server from the client's connection request. This is
|
// The request server from the client's connection request. This is
|
||||||
|
|
@ -208,7 +209,7 @@ message Permission {
|
||||||
// as explained below.
|
// as explained below.
|
||||||
//
|
//
|
||||||
// * If the :ref:`TLS Inspector <config_listener_filters_tls_inspector>`
|
// * If the :ref:`TLS Inspector <config_listener_filters_tls_inspector>`
|
||||||
// filter is not added, and if a `FilterChainMatch` is not defined for
|
// filter is not added, and if a ``FilterChainMatch`` is not defined for
|
||||||
// the :ref:`server name
|
// the :ref:`server name
|
||||||
// <envoy_v3_api_field_config.listener.v3.FilterChainMatch.server_names>`,
|
// <envoy_v3_api_field_config.listener.v3.FilterChainMatch.server_names>`,
|
||||||
// a TLS connection's requested SNI server name will be treated as if it
|
// a TLS connection's requested SNI server name will be treated as if it
|
||||||
|
|
@ -229,11 +230,11 @@ message Permission {
|
||||||
|
|
||||||
// Principal defines an identity or a group of identities for a downstream
|
// Principal defines an identity or a group of identities for a downstream
|
||||||
// subject.
|
// subject.
|
||||||
// [#next-free-field: 12]
|
// [#next-free-field: 13]
|
||||||
message Principal {
|
message Principal {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.config.rbac.v2.Principal";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.config.rbac.v2.Principal";
|
||||||
|
|
||||||
// Used in the `and_ids` and `or_ids` fields in the `identifier` oneof.
|
// Used in the ``and_ids`` and ``or_ids`` fields in the ``identifier`` oneof.
|
||||||
// Depending on the context, each are applied with the associated behavior.
|
// Depending on the context, each are applied with the associated behavior.
|
||||||
message Set {
|
message Set {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
|
@ -294,7 +295,7 @@ message Principal {
|
||||||
|
|
||||||
// A header (or pseudo-header such as :path or :method) on the incoming HTTP
|
// A header (or pseudo-header such as :path or :method) on the incoming HTTP
|
||||||
// request. Only available for HTTP request. Note: the pseudo-header :path
|
// request. Only available for HTTP request. Note: the pseudo-header :path
|
||||||
// includes the query and fragment string. Use the `url_path` field if you
|
// includes the query and fragment string. Use the ``url_path`` field if you
|
||||||
// want to match the URL path without the query and fragment string.
|
// want to match the URL path without the query and fragment string.
|
||||||
route.v3.HeaderMatcher header = 6;
|
route.v3.HeaderMatcher header = 6;
|
||||||
|
|
||||||
|
|
@ -304,9 +305,38 @@ message Principal {
|
||||||
// Metadata that describes additional information about the principal.
|
// Metadata that describes additional information about the principal.
|
||||||
type.matcher.v3.MetadataMatcher metadata = 7;
|
type.matcher.v3.MetadataMatcher metadata = 7;
|
||||||
|
|
||||||
|
// Identifies the principal using a filter state object.
|
||||||
|
type.matcher.v3.FilterStateMatcher filter_state = 12;
|
||||||
|
|
||||||
// Negates matching the provided principal. For instance, if the value of
|
// Negates matching the provided principal. For instance, if the value of
|
||||||
// `not_id` would match, this principal would not match. Conversely, if the
|
// ``not_id`` would match, this principal would not match. Conversely, if the
|
||||||
// value of `not_id` would not match, this principal would match.
|
// value of ``not_id`` would not match, this principal would match.
|
||||||
Principal not_id = 8;
|
Principal not_id = 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Action defines the result of allowance or denial when a request matches the matcher.
|
||||||
|
message Action {
|
||||||
|
// The name indicates the policy name.
|
||||||
|
string name = 1 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
|
// The action to take if the matcher matches. Every action either allows or denies a request,
|
||||||
|
// and can also carry out action-specific operations.
|
||||||
|
//
|
||||||
|
// Actions:
|
||||||
|
//
|
||||||
|
// * ``ALLOW``: If the request gets matched on ALLOW, it is permitted.
|
||||||
|
// * ``DENY``: If the request gets matched on DENY, it is not permitted.
|
||||||
|
// * ``LOG``: If the request gets matched on LOG, it is permitted. Besides, the
|
||||||
|
// dynamic metadata key ``access_log_hint`` under the shared key namespace
|
||||||
|
// ``envoy.common`` will be set to the value ``true``.
|
||||||
|
// * If the request cannot get matched, it will fallback to ``DENY``.
|
||||||
|
//
|
||||||
|
// Log behavior:
|
||||||
|
//
|
||||||
|
// If the RBAC matcher contains at least one LOG action, the dynamic
|
||||||
|
// metadata key ``access_log_hint`` will be set based on if the request
|
||||||
|
// get matched on the LOG action.
|
||||||
|
//
|
||||||
|
RBAC.Action action = 2;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import "envoy/config/core/v3/base.proto";
|
||||||
import "envoy/config/core/v3/config_source.proto";
|
import "envoy/config/core/v3/config_source.proto";
|
||||||
import "envoy/config/route/v3/route_components.proto";
|
import "envoy/config/route/v3/route_components.proto";
|
||||||
|
|
||||||
|
import "google/protobuf/any.proto";
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
import "udpa/annotations/status.proto";
|
import "udpa/annotations/status.proto";
|
||||||
|
|
@ -22,7 +23,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// * Routing :ref:`architecture overview <arch_overview_http_routing>`
|
// * Routing :ref:`architecture overview <arch_overview_http_routing>`
|
||||||
// * HTTP :ref:`router filter <config_http_filters_router>`
|
// * HTTP :ref:`router filter <config_http_filters_router>`
|
||||||
|
|
||||||
// [#next-free-field: 15]
|
// [#next-free-field: 17]
|
||||||
message RouteConfiguration {
|
message RouteConfiguration {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.RouteConfiguration";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.RouteConfiguration";
|
||||||
|
|
||||||
|
|
@ -36,10 +37,10 @@ message RouteConfiguration {
|
||||||
repeated VirtualHost virtual_hosts = 2;
|
repeated VirtualHost virtual_hosts = 2;
|
||||||
|
|
||||||
// An array of virtual hosts will be dynamically loaded via the VHDS API.
|
// An array of virtual hosts will be dynamically loaded via the VHDS API.
|
||||||
// Both *virtual_hosts* and *vhds* fields will be used when present. *virtual_hosts* can be used
|
// Both ``virtual_hosts`` and ``vhds`` fields will be used when present. ``virtual_hosts`` can be used
|
||||||
// for a base routing table or for infrequently changing virtual hosts. *vhds* is used for
|
// for a base routing table or for infrequently changing virtual hosts. ``vhds`` is used for
|
||||||
// on-demand discovery of virtual hosts. The contents of these two fields will be merged to
|
// on-demand discovery of virtual hosts. The contents of these two fields will be merged to
|
||||||
// generate a routing table for a given RouteConfiguration, with *vhds* derived configuration
|
// generate a routing table for a given RouteConfiguration, with ``vhds`` derived configuration
|
||||||
// taking precedence.
|
// taking precedence.
|
||||||
Vhds vhds = 9;
|
Vhds vhds = 9;
|
||||||
|
|
||||||
|
|
@ -90,7 +91,6 @@ message RouteConfiguration {
|
||||||
// To allow setting overrides at the route or virtual host level, this order can be reversed
|
// To allow setting overrides at the route or virtual host level, this order can be reversed
|
||||||
// by setting this option to true. Defaults to false.
|
// by setting this option to true. Defaults to false.
|
||||||
//
|
//
|
||||||
// [#next-major-version: In the v3 API, this will default to true.]
|
|
||||||
bool most_specific_header_mutations_wins = 10;
|
bool most_specific_header_mutations_wins = 10;
|
||||||
|
|
||||||
// An optional boolean that specifies whether the clusters that the route
|
// An optional boolean that specifies whether the clusters that the route
|
||||||
|
|
@ -123,7 +123,7 @@ message RouteConfiguration {
|
||||||
|
|
||||||
// A list of plugins and their configurations which may be used by a
|
// A list of plugins and their configurations which may be used by a
|
||||||
// :ref:`cluster specifier plugin name <envoy_v3_api_field_config.route.v3.RouteAction.cluster_specifier_plugin>`
|
// :ref:`cluster specifier plugin name <envoy_v3_api_field_config.route.v3.RouteAction.cluster_specifier_plugin>`
|
||||||
// within the route. All *extension.name* fields in this list must be unique.
|
// within the route. All ``extension.name`` fields in this list must be unique.
|
||||||
repeated ClusterSpecifierPlugin cluster_specifier_plugins = 12;
|
repeated ClusterSpecifierPlugin cluster_specifier_plugins = 12;
|
||||||
|
|
||||||
// Specify a set of default request mirroring policies which apply to all routes under its virtual hosts.
|
// Specify a set of default request mirroring policies which apply to all routes under its virtual hosts.
|
||||||
|
|
@ -135,6 +135,26 @@ message RouteConfiguration {
|
||||||
// NOTE: this option will not strip the port number (if any) contained in route config
|
// NOTE: this option will not strip the port number (if any) contained in route config
|
||||||
// :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`.domains field.
|
// :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`.domains field.
|
||||||
bool ignore_port_in_host_matching = 14;
|
bool ignore_port_in_host_matching = 14;
|
||||||
|
|
||||||
|
// Ignore path-parameters in path-matching.
|
||||||
|
// Before RFC3986, URI were like(RFC1808): <scheme>://<net_loc>/<path>;<params>?<query>#<fragment>
|
||||||
|
// Envoy by default takes ":path" as "<path>;<params>".
|
||||||
|
// For users who want to only match path on the "<path>" portion, this option should be true.
|
||||||
|
bool ignore_path_parameters_in_path_matching = 15;
|
||||||
|
|
||||||
|
// The typed_per_filter_config field can be used to provide RouteConfiguration level per filter config.
|
||||||
|
// The key should match the :ref:`filter config name
|
||||||
|
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpFilter.name>`.
|
||||||
|
// The canonical filter name (e.g., ``envoy.filters.http.buffer`` for the HTTP buffer filter) can also
|
||||||
|
// be used for the backwards compatibility. If there is no entry referred by the filter config name, the
|
||||||
|
// entry referred by the canonical filter name will be provided to the filters as fallback.
|
||||||
|
//
|
||||||
|
// Use of this field is filter specific;
|
||||||
|
// see the :ref:`HTTP filter documentation <config_http_filters>` for if and how it is utilized.
|
||||||
|
// [#comment: An entry's value may be wrapped in a
|
||||||
|
// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
|
||||||
|
// message to specify additional options.]
|
||||||
|
map<string, google.protobuf.Any> typed_per_filter_config = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Vhds {
|
message Vhds {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// host header. This allows a single listener to service multiple top level domain path trees. Once
|
// host header. This allows a single listener to service multiple top level domain path trees. Once
|
||||||
// a virtual host is selected based on the domain, the routes are processed in order to see which
|
// a virtual host is selected based on the domain, the routes are processed in order to see which
|
||||||
// upstream cluster to route to or whether to perform a redirect.
|
// upstream cluster to route to or whether to perform a redirect.
|
||||||
// [#next-free-field: 23]
|
// [#next-free-field: 24]
|
||||||
message VirtualHost {
|
message VirtualHost {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.VirtualHost";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.VirtualHost";
|
||||||
|
|
||||||
|
|
@ -91,11 +91,11 @@ message VirtualHost {
|
||||||
|
|
||||||
// The list of routes that will be matched, in order, for incoming requests.
|
// The list of routes that will be matched, in order, for incoming requests.
|
||||||
// The first route that matches will be used.
|
// The first route that matches will be used.
|
||||||
// Only one of this and `matcher` can be specified.
|
// Only one of this and ``matcher`` can be specified.
|
||||||
repeated Route routes = 3;
|
repeated Route routes = 3;
|
||||||
|
|
||||||
// [#next-major-version: This should be included in a oneof with routes wrapped in a message.]
|
// [#next-major-version: This should be included in a oneof with routes wrapped in a message.]
|
||||||
// The match tree to use when resolving route actions for incoming requests. Only one of this and `routes`
|
// The match tree to use when resolving route actions for incoming requests. Only one of this and ``routes``
|
||||||
// can be specified.
|
// can be specified.
|
||||||
xds.type.matcher.v3.Matcher matcher = 21
|
xds.type.matcher.v3.Matcher matcher = 21
|
||||||
[(xds.annotations.v3.field_status).work_in_progress = true];
|
[(xds.annotations.v3.field_status).work_in_progress = true];
|
||||||
|
|
@ -142,14 +142,26 @@ message VirtualHost {
|
||||||
items {string {min_len: 1 well_known_regex: HTTP_HEADER_NAME strict: false}}
|
items {string {min_len: 1 well_known_regex: HTTP_HEADER_NAME strict: false}}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
// Indicates that the virtual host has a CORS policy.
|
// Indicates that the virtual host has a CORS policy. This field is ignored if related cors policy is
|
||||||
CorsPolicy cors = 8;
|
// found in the
|
||||||
|
// :ref:`VirtualHost.typed_per_filter_config<envoy_v3_api_field_config.route.v3.VirtualHost.typed_per_filter_config>`.
|
||||||
|
//
|
||||||
|
// .. attention::
|
||||||
|
//
|
||||||
|
// This option has been deprecated. Please use
|
||||||
|
// :ref:`VirtualHost.typed_per_filter_config<envoy_v3_api_field_config.route.v3.VirtualHost.typed_per_filter_config>`
|
||||||
|
// to configure the CORS HTTP filter.
|
||||||
|
CorsPolicy cors = 8 [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// The per_filter_config field can be used to provide virtual host-specific
|
// The per_filter_config field can be used to provide virtual host-specific configurations for filters.
|
||||||
// configurations for filters. The key should match the filter name, such as
|
// The key should match the :ref:`filter config name
|
||||||
// *envoy.filters.http.buffer* for the HTTP buffer filter. Use of this field is filter
|
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpFilter.name>`.
|
||||||
// specific; see the :ref:`HTTP filter documentation <config_http_filters>`
|
// The canonical filter name (e.g., ``envoy.filters.http.buffer`` for the HTTP buffer filter) can also
|
||||||
// for if and how it is utilized.
|
// be used for the backwards compatibility. If there is no entry referred by the filter config name, the
|
||||||
|
// entry referred by the canonical filter name will be provided to the filters as fallback.
|
||||||
|
//
|
||||||
|
// Use of this field is filter specific;
|
||||||
|
// see the :ref:`HTTP filter documentation <config_http_filters>` for if and how it is utilized.
|
||||||
// [#comment: An entry's value may be wrapped in a
|
// [#comment: An entry's value may be wrapped in a
|
||||||
// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
|
// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
|
||||||
// message to specify additional options.]
|
// message to specify additional options.]
|
||||||
|
|
@ -194,6 +206,10 @@ message VirtualHost {
|
||||||
// independently (e.g.: values are not inherited).
|
// independently (e.g.: values are not inherited).
|
||||||
HedgePolicy hedge_policy = 17;
|
HedgePolicy hedge_policy = 17;
|
||||||
|
|
||||||
|
// Decides whether to include the :ref:`x-envoy-is-timeout-retry <config_http_filters_router_x-envoy-is-timeout-retry>`
|
||||||
|
// request header in retries initiated by per try timeouts.
|
||||||
|
bool include_is_timeout_retry_header = 23;
|
||||||
|
|
||||||
// The maximum bytes which will be buffered for retries and shadowing.
|
// The maximum bytes which will be buffered for retries and shadowing.
|
||||||
// If set and a route-specific limit is not set, the bytes actually buffered will be the minimum
|
// If set and a route-specific limit is not set, the bytes actually buffered will be the minimum
|
||||||
// value of this and the listener per_connection_buffer_limit_bytes.
|
// value of this and the listener per_connection_buffer_limit_bytes.
|
||||||
|
|
@ -212,6 +228,13 @@ message FilterAction {
|
||||||
google.protobuf.Any action = 1;
|
google.protobuf.Any action = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This can be used in route matcher :ref:`VirtualHost.matcher <envoy_v3_api_field_config.route.v3.VirtualHost.matcher>`.
|
||||||
|
// When the matcher matches, routes will be matched and run.
|
||||||
|
message RouteList {
|
||||||
|
// The list of routes that will be matched and run, in order. The first route that matches will be used.
|
||||||
|
repeated Route routes = 1;
|
||||||
|
}
|
||||||
|
|
||||||
// A route is both a specification of how to match a request as well as an indication of what to do
|
// A route is both a specification of how to match a request as well as an indication of what to do
|
||||||
// next (e.g., redirect, forward, rewrite, etc.).
|
// next (e.g., redirect, forward, rewrite, etc.).
|
||||||
//
|
//
|
||||||
|
|
@ -219,7 +242,7 @@ message FilterAction {
|
||||||
//
|
//
|
||||||
// Envoy supports routing on HTTP method via :ref:`header matching
|
// Envoy supports routing on HTTP method via :ref:`header matching
|
||||||
// <envoy_v3_api_msg_config.route.v3.HeaderMatcher>`.
|
// <envoy_v3_api_msg_config.route.v3.HeaderMatcher>`.
|
||||||
// [#next-free-field: 19]
|
// [#next-free-field: 20]
|
||||||
message Route {
|
message Route {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.Route";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.Route";
|
||||||
|
|
||||||
|
|
@ -263,17 +286,21 @@ message Route {
|
||||||
// about the route. It can be used for configuration, stats, and logging.
|
// about the route. It can be used for configuration, stats, and logging.
|
||||||
// The metadata should go under the filter namespace that will need it.
|
// The metadata should go under the filter namespace that will need it.
|
||||||
// For instance, if the metadata is intended for the Router filter,
|
// For instance, if the metadata is intended for the Router filter,
|
||||||
// the filter name should be specified as *envoy.filters.http.router*.
|
// the filter name should be specified as ``envoy.filters.http.router``.
|
||||||
core.v3.Metadata metadata = 4;
|
core.v3.Metadata metadata = 4;
|
||||||
|
|
||||||
// Decorator for the matched route.
|
// Decorator for the matched route.
|
||||||
Decorator decorator = 5;
|
Decorator decorator = 5;
|
||||||
|
|
||||||
// The typed_per_filter_config field can be used to provide route-specific
|
// The per_filter_config field can be used to provide route-specific configurations for filters.
|
||||||
// configurations for filters. The key should match the filter name, such as
|
// The key should match the :ref:`filter config name
|
||||||
// *envoy.filters.http.buffer* for the HTTP buffer filter. Use of this field is filter
|
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpFilter.name>`.
|
||||||
// specific; see the :ref:`HTTP filter documentation <config_http_filters>` for
|
// The canonical filter name (e.g., ``envoy.filters.http.buffer`` for the HTTP buffer filter) can also
|
||||||
// if and how it is utilized.
|
// be used for the backwards compatibility. If there is no entry referred by the filter config name, the
|
||||||
|
// entry referred by the canonical filter name will be provided to the filters as fallback.
|
||||||
|
//
|
||||||
|
// Use of this field is filter specific;
|
||||||
|
// see the :ref:`HTTP filter documentation <config_http_filters>` for if and how it is utilized.
|
||||||
// [#comment: An entry's value may be wrapped in a
|
// [#comment: An entry's value may be wrapped in a
|
||||||
// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
|
// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
|
||||||
// message to specify additional options.]
|
// message to specify additional options.]
|
||||||
|
|
@ -317,6 +344,21 @@ message Route {
|
||||||
// If set, the bytes actually buffered will be the minimum value of this and the
|
// If set, the bytes actually buffered will be the minimum value of this and the
|
||||||
// listener per_connection_buffer_limit_bytes.
|
// listener per_connection_buffer_limit_bytes.
|
||||||
google.protobuf.UInt32Value per_request_buffer_limit_bytes = 16;
|
google.protobuf.UInt32Value per_request_buffer_limit_bytes = 16;
|
||||||
|
|
||||||
|
// The human readable prefix to use when emitting statistics for this endpoint.
|
||||||
|
// The statistics are rooted at vhost.<virtual host name>.route.<stat_prefix>.
|
||||||
|
// This should be set for highly critical
|
||||||
|
// endpoints that one wishes to get “per-route” statistics on.
|
||||||
|
// If not set, endpoint statistics are not generated.
|
||||||
|
//
|
||||||
|
// The emitted statistics are the same as those documented for :ref:`virtual clusters <config_http_filters_router_vcluster_stats>`.
|
||||||
|
//
|
||||||
|
// .. warning::
|
||||||
|
//
|
||||||
|
// We do not recommend setting up a stat prefix for
|
||||||
|
// every application endpoint. This is both not easily maintainable and
|
||||||
|
// statistics use a non-trivial amount of memory(approximately 1KiB per route).
|
||||||
|
string stat_prefix = 19;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compared to the :ref:`cluster <envoy_v3_api_field_config.route.v3.RouteAction.cluster>` field that specifies a
|
// Compared to the :ref:`cluster <envoy_v3_api_field_config.route.v3.RouteAction.cluster>` field that specifies a
|
||||||
|
|
@ -337,13 +379,13 @@ message WeightedCluster {
|
||||||
|
|
||||||
reserved "per_filter_config";
|
reserved "per_filter_config";
|
||||||
|
|
||||||
// Only one of *name* and *cluster_header* may be specified.
|
// Only one of ``name`` and ``cluster_header`` may be specified.
|
||||||
// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1}]
|
// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1}]
|
||||||
// Name of the upstream cluster. The cluster must exist in the
|
// Name of the upstream cluster. The cluster must exist in the
|
||||||
// :ref:`cluster manager configuration <config_cluster_manager>`.
|
// :ref:`cluster manager configuration <config_cluster_manager>`.
|
||||||
string name = 1 [(udpa.annotations.field_migrate).oneof_promotion = "cluster_specifier"];
|
string name = 1 [(udpa.annotations.field_migrate).oneof_promotion = "cluster_specifier"];
|
||||||
|
|
||||||
// Only one of *name* and *cluster_header* may be specified.
|
// Only one of ``name`` and ``cluster_header`` may be specified.
|
||||||
// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1 }]
|
// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1 }]
|
||||||
// Envoy will determine the cluster to route to by reading the value of the
|
// Envoy will determine the cluster to route to by reading the value of the
|
||||||
// HTTP header named by cluster_header from the request headers. If the
|
// HTTP header named by cluster_header from the request headers. If the
|
||||||
|
|
@ -352,8 +394,8 @@ message WeightedCluster {
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
// Internally, Envoy always uses the HTTP/2 *:authority* header to represent the HTTP/1
|
// Internally, Envoy always uses the HTTP/2 ``:authority`` header to represent the HTTP/1
|
||||||
// *Host* header. Thus, if attempting to match on *Host*, match on *:authority* instead.
|
// ``Host`` header. Thus, if attempting to match on ``Host``, match on ``:authority`` instead.
|
||||||
//
|
//
|
||||||
// .. note::
|
// .. note::
|
||||||
//
|
//
|
||||||
|
|
@ -363,17 +405,18 @@ message WeightedCluster {
|
||||||
(udpa.annotations.field_migrate).oneof_promotion = "cluster_specifier"
|
(udpa.annotations.field_migrate).oneof_promotion = "cluster_specifier"
|
||||||
];
|
];
|
||||||
|
|
||||||
// An integer between 0 and :ref:`total_weight
|
// The weight of the cluster. This value is relative to the other clusters'
|
||||||
// <envoy_v3_api_field_config.route.v3.WeightedCluster.total_weight>`. When a request matches the route,
|
// weights. When a request matches the route, the choice of an upstream cluster
|
||||||
// the choice of an upstream cluster is determined by its weight. The sum of weights across all
|
// is determined by its weight. The sum of weights across all
|
||||||
// entries in the clusters array must add up to the total_weight, which defaults to 100.
|
// entries in the clusters array must be greater than 0, and must not exceed
|
||||||
|
// uint32_t maximal value (4294967295).
|
||||||
google.protobuf.UInt32Value weight = 2;
|
google.protobuf.UInt32Value weight = 2;
|
||||||
|
|
||||||
// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints in
|
// Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints in
|
||||||
// the upstream cluster with metadata matching what is set in this field will be considered for
|
// the upstream cluster with metadata matching what is set in this field will be considered for
|
||||||
// load balancing. Note that this will be merged with what's provided in
|
// load balancing. Note that this will be merged with what's provided in
|
||||||
// :ref:`RouteAction.metadata_match <envoy_v3_api_field_config.route.v3.RouteAction.metadata_match>`, with
|
// :ref:`RouteAction.metadata_match <envoy_v3_api_field_config.route.v3.RouteAction.metadata_match>`, with
|
||||||
// values here taking precedence. The filter name should be specified as *envoy.lb*.
|
// values here taking precedence. The filter name should be specified as ``envoy.lb``.
|
||||||
core.v3.Metadata metadata_match = 3;
|
core.v3.Metadata metadata_match = 3;
|
||||||
|
|
||||||
// Specifies a list of headers to be added to requests when this cluster is selected
|
// Specifies a list of headers to be added to requests when this cluster is selected
|
||||||
|
|
@ -408,11 +451,16 @@ message WeightedCluster {
|
||||||
items {string {well_known_regex: HTTP_HEADER_NAME strict: false}}
|
items {string {well_known_regex: HTTP_HEADER_NAME strict: false}}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
// The per_filter_config field can be used to provide weighted cluster-specific
|
// The per_filter_config field can be used to provide weighted cluster-specific configurations
|
||||||
// configurations for filters. The key should match the filter name, such as
|
// for filters.
|
||||||
// *envoy.filters.http.buffer* for the HTTP buffer filter. Use of this field is filter
|
// The key should match the :ref:`filter config name
|
||||||
// specific; see the :ref:`HTTP filter documentation <config_http_filters>`
|
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpFilter.name>`.
|
||||||
// for if and how it is utilized.
|
// The canonical filter name (e.g., ``envoy.filters.http.buffer`` for the HTTP buffer filter) can also
|
||||||
|
// be used for the backwards compatibility. If there is no entry referred by the filter config name, the
|
||||||
|
// entry referred by the canonical filter name will be provided to the filters as fallback.
|
||||||
|
//
|
||||||
|
// Use of this field is filter specific;
|
||||||
|
// see the :ref:`HTTP filter documentation <config_http_filters>` for if and how it is utilized.
|
||||||
// [#comment: An entry's value may be wrapped in a
|
// [#comment: An entry's value may be wrapped in a
|
||||||
// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
|
// :ref:`FilterConfig<envoy_v3_api_msg_config.route.v3.FilterConfig>`
|
||||||
// message to specify additional options.]
|
// message to specify additional options.]
|
||||||
|
|
@ -430,14 +478,17 @@ message WeightedCluster {
|
||||||
repeated ClusterWeight clusters = 1 [(validate.rules).repeated = {min_items: 1}];
|
repeated ClusterWeight clusters = 1 [(validate.rules).repeated = {min_items: 1}];
|
||||||
|
|
||||||
// Specifies the total weight across all clusters. The sum of all cluster weights must equal this
|
// Specifies the total weight across all clusters. The sum of all cluster weights must equal this
|
||||||
// value, which must be greater than 0. Defaults to 100.
|
// value, if this is greater than 0.
|
||||||
google.protobuf.UInt32Value total_weight = 3 [(validate.rules).uint32 = {gte: 1}];
|
// This field is now deprecated, and the client will use the sum of all
|
||||||
|
// cluster weights. It is up to the management server to supply the correct weights.
|
||||||
|
google.protobuf.UInt32Value total_weight = 3
|
||||||
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// Specifies the runtime key prefix that should be used to construct the
|
// Specifies the runtime key prefix that should be used to construct the
|
||||||
// runtime keys associated with each cluster. When the *runtime_key_prefix* is
|
// runtime keys associated with each cluster. When the ``runtime_key_prefix`` is
|
||||||
// specified, the router will look for weights associated with each upstream
|
// specified, the router will look for weights associated with each upstream
|
||||||
// cluster under the key *runtime_key_prefix* + "." + *cluster[i].name* where
|
// cluster under the key ``runtime_key_prefix`` + ``.`` + ``cluster[i].name`` where
|
||||||
// *cluster[i]* denotes an entry in the clusters array field. If the runtime
|
// ``cluster[i]`` denotes an entry in the clusters array field. If the runtime
|
||||||
// key for the cluster does not exist, the value specified in the
|
// key for the cluster does not exist, the value specified in the
|
||||||
// configuration file will be used as the default weight. See the :ref:`runtime documentation
|
// configuration file will be used as the default weight. See the :ref:`runtime documentation
|
||||||
// <operations_runtime>` for how key names map to the underlying implementation.
|
// <operations_runtime>` for how key names map to the underlying implementation.
|
||||||
|
|
@ -449,7 +500,8 @@ message WeightedCluster {
|
||||||
// If header is not present or invalid, Envoy will fall back to use the internally generated random value.
|
// If header is not present or invalid, Envoy will fall back to use the internally generated random value.
|
||||||
// This header is expected to be single-valued header as we only want to have one selected value throughout
|
// This header is expected to be single-valued header as we only want to have one selected value throughout
|
||||||
// the process for the consistency. And the value is a unsigned number between 0 and UINT64_MAX.
|
// the process for the consistency. And the value is a unsigned number between 0 and UINT64_MAX.
|
||||||
string header_name = 4;
|
string header_name = 4
|
||||||
|
[(validate.rules).string = {well_known_regex: HTTP_HEADER_NAME strict: false}];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -466,7 +518,7 @@ message ClusterSpecifierPlugin {
|
||||||
bool is_optional = 2;
|
bool is_optional = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 15]
|
// [#next-free-field: 16]
|
||||||
message RouteMatch {
|
message RouteMatch {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RouteMatch";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RouteMatch";
|
||||||
|
|
||||||
|
|
@ -500,17 +552,17 @@ message RouteMatch {
|
||||||
option (validate.required) = true;
|
option (validate.required) = true;
|
||||||
|
|
||||||
// If specified, the route is a prefix rule meaning that the prefix must
|
// If specified, the route is a prefix rule meaning that the prefix must
|
||||||
// match the beginning of the *:path* header.
|
// match the beginning of the ``:path`` header.
|
||||||
string prefix = 1;
|
string prefix = 1;
|
||||||
|
|
||||||
// If specified, the route is an exact path rule meaning that the path must
|
// If specified, the route is an exact path rule meaning that the path must
|
||||||
// exactly match the *:path* header once the query string is removed.
|
// exactly match the ``:path`` header once the query string is removed.
|
||||||
string path = 2;
|
string path = 2;
|
||||||
|
|
||||||
// If specified, the route is a regular expression rule meaning that the
|
// If specified, the route is a regular expression rule meaning that the
|
||||||
// regex must match the *:path* header once the query string is removed. The entire path
|
// regex must match the ``:path`` header once the query string is removed. The entire path
|
||||||
// (without the query string) must match the regex. The rule will not match if only a
|
// (without the query string) must match the regex. The rule will not match if only a
|
||||||
// subsequence of the *:path* header matches the regex.
|
// subsequence of the ``:path`` header matches the regex.
|
||||||
//
|
//
|
||||||
// [#next-major-version: In the v3 API we should redo how path specification works such
|
// [#next-major-version: In the v3 API we should redo how path specification works such
|
||||||
// that we utilize StringMatcher, and additionally have consistent options around whether we
|
// that we utilize StringMatcher, and additionally have consistent options around whether we
|
||||||
|
|
@ -542,6 +594,9 @@ message RouteMatch {
|
||||||
//
|
//
|
||||||
// Expect the value to not contain ``?`` or ``#`` and not to end in ``/``
|
// Expect the value to not contain ``?`` or ``#`` and not to end in ``/``
|
||||||
string path_separated_prefix = 14 [(validate.rules).string = {pattern: "^[^?#]+[^?#/]$"}];
|
string path_separated_prefix = 14 [(validate.rules).string = {pattern: "^[^?#]+[^?#/]$"}];
|
||||||
|
|
||||||
|
// [#extension-category: envoy.path.match]
|
||||||
|
core.v3.TypedExtensionConfig path_match_policy = 15;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indicates that prefix/path matching should be case sensitive. The default
|
// Indicates that prefix/path matching should be case sensitive. The default
|
||||||
|
|
@ -574,9 +629,9 @@ message RouteMatch {
|
||||||
repeated HeaderMatcher headers = 6;
|
repeated HeaderMatcher headers = 6;
|
||||||
|
|
||||||
// Specifies a set of URL query parameters on which the route should
|
// Specifies a set of URL query parameters on which the route should
|
||||||
// match. The router will check the query string from the *path* header
|
// match. The router will check the query string from the ``path`` header
|
||||||
// against all the specified query parameters. If the number of specified
|
// against all the specified query parameters. If the number of specified
|
||||||
// query parameters is nonzero, they all must match the *path* header's
|
// query parameters is nonzero, they all must match the ``path`` header's
|
||||||
// query string for a match to occur.
|
// query string for a match to occur.
|
||||||
//
|
//
|
||||||
// .. note::
|
// .. note::
|
||||||
|
|
@ -606,7 +661,15 @@ message RouteMatch {
|
||||||
repeated type.matcher.v3.MetadataMatcher dynamic_metadata = 13;
|
repeated type.matcher.v3.MetadataMatcher dynamic_metadata = 13;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 12]
|
// Cors policy configuration.
|
||||||
|
//
|
||||||
|
// .. attention::
|
||||||
|
//
|
||||||
|
// This message has been deprecated. Please use
|
||||||
|
// :ref:`CorsPolicy in filter extension <envoy_v3_api_msg_extensions.filters.http.cors.v3.CorsPolicy>`
|
||||||
|
// as as alternative.
|
||||||
|
//
|
||||||
|
// [#next-free-field: 13]
|
||||||
message CorsPolicy {
|
message CorsPolicy {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.CorsPolicy";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.CorsPolicy";
|
||||||
|
|
||||||
|
|
@ -618,16 +681,16 @@ message CorsPolicy {
|
||||||
// string matchers match.
|
// string matchers match.
|
||||||
repeated type.matcher.v3.StringMatcher allow_origin_string_match = 11;
|
repeated type.matcher.v3.StringMatcher allow_origin_string_match = 11;
|
||||||
|
|
||||||
// Specifies the content for the *access-control-allow-methods* header.
|
// Specifies the content for the ``access-control-allow-methods`` header.
|
||||||
string allow_methods = 2;
|
string allow_methods = 2;
|
||||||
|
|
||||||
// Specifies the content for the *access-control-allow-headers* header.
|
// Specifies the content for the ``access-control-allow-headers`` header.
|
||||||
string allow_headers = 3;
|
string allow_headers = 3;
|
||||||
|
|
||||||
// Specifies the content for the *access-control-expose-headers* header.
|
// Specifies the content for the ``access-control-expose-headers`` header.
|
||||||
string expose_headers = 4;
|
string expose_headers = 4;
|
||||||
|
|
||||||
// Specifies the content for the *access-control-max-age* header.
|
// Specifies the content for the ``access-control-max-age`` header.
|
||||||
string max_age = 5;
|
string max_age = 5;
|
||||||
|
|
||||||
// Specifies whether the resource allows credentials.
|
// Specifies whether the resource allows credentials.
|
||||||
|
|
@ -652,11 +715,17 @@ message CorsPolicy {
|
||||||
//
|
//
|
||||||
// If :ref:`runtime_key <envoy_v3_api_field_config.core.v3.RuntimeFractionalPercent.runtime_key>` is specified,
|
// If :ref:`runtime_key <envoy_v3_api_field_config.core.v3.RuntimeFractionalPercent.runtime_key>` is specified,
|
||||||
// Envoy will lookup the runtime key to get the percentage of requests for which it will evaluate
|
// Envoy will lookup the runtime key to get the percentage of requests for which it will evaluate
|
||||||
// and track the request's *Origin* to determine if it's valid but will not enforce any policies.
|
// and track the request's ``Origin`` to determine if it's valid but will not enforce any policies.
|
||||||
core.v3.RuntimeFractionalPercent shadow_enabled = 10;
|
core.v3.RuntimeFractionalPercent shadow_enabled = 10;
|
||||||
|
|
||||||
|
// Specify whether allow requests whose target server's IP address is more private than that from
|
||||||
|
// which the request initiator was fetched.
|
||||||
|
//
|
||||||
|
// More details refer to https://developer.chrome.com/blog/private-network-access-preflight.
|
||||||
|
google.protobuf.BoolValue allow_private_network_access = 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 40]
|
// [#next-free-field: 42]
|
||||||
message RouteAction {
|
message RouteAction {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RouteAction";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RouteAction";
|
||||||
|
|
||||||
|
|
@ -666,6 +735,9 @@ message RouteAction {
|
||||||
|
|
||||||
// HTTP status code - 404 Not Found.
|
// HTTP status code - 404 Not Found.
|
||||||
NOT_FOUND = 1;
|
NOT_FOUND = 1;
|
||||||
|
|
||||||
|
// HTTP status code - 500 Internal Server Error.
|
||||||
|
INTERNAL_SERVER_ERROR = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configures :ref:`internal redirect <arch_overview_internal_redirects>` behavior.
|
// Configures :ref:`internal redirect <arch_overview_internal_redirects>` behavior.
|
||||||
|
|
@ -682,12 +754,16 @@ message RouteAction {
|
||||||
// respond before returning the response from the primary cluster. All normal statistics are
|
// respond before returning the response from the primary cluster. All normal statistics are
|
||||||
// collected for the shadow cluster making this feature useful for testing.
|
// collected for the shadow cluster making this feature useful for testing.
|
||||||
//
|
//
|
||||||
// During shadowing, the host/authority header is altered such that *-shadow* is appended. This is
|
// During shadowing, the host/authority header is altered such that ``-shadow`` is appended. This is
|
||||||
// useful for logging. For example, *cluster1* becomes *cluster1-shadow*.
|
// useful for logging. For example, ``cluster1`` becomes ``cluster1-shadow``.
|
||||||
//
|
//
|
||||||
// .. note::
|
// .. note::
|
||||||
//
|
//
|
||||||
// Shadowing will not be triggered if the primary cluster does not exist.
|
// Shadowing will not be triggered if the primary cluster does not exist.
|
||||||
|
//
|
||||||
|
// .. note::
|
||||||
|
//
|
||||||
|
// Shadowing doesn't support Http CONNECT and upgrades.
|
||||||
// [#next-free-field: 6]
|
// [#next-free-field: 6]
|
||||||
message RequestMirrorPolicy {
|
message RequestMirrorPolicy {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
|
@ -697,13 +773,13 @@ message RouteAction {
|
||||||
|
|
||||||
reserved "runtime_key";
|
reserved "runtime_key";
|
||||||
|
|
||||||
// Only one of *cluster* and *cluster_header* can be specified.
|
// Only one of ``cluster`` and ``cluster_header`` can be specified.
|
||||||
// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1}]
|
// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1}]
|
||||||
// Specifies the cluster that requests will be mirrored to. The cluster must
|
// Specifies the cluster that requests will be mirrored to. The cluster must
|
||||||
// exist in the cluster manager configuration.
|
// exist in the cluster manager configuration.
|
||||||
string cluster = 1 [(udpa.annotations.field_migrate).oneof_promotion = "cluster_specifier"];
|
string cluster = 1 [(udpa.annotations.field_migrate).oneof_promotion = "cluster_specifier"];
|
||||||
|
|
||||||
// Only one of *cluster* and *cluster_header* can be specified.
|
// Only one of ``cluster`` and ``cluster_header`` can be specified.
|
||||||
// Envoy will determine the cluster to route to by reading the value of the
|
// Envoy will determine the cluster to route to by reading the value of the
|
||||||
// HTTP header named by cluster_header from the request headers. Only the first value in header is used,
|
// HTTP header named by cluster_header from the request headers. Only the first value in header is used,
|
||||||
// and no shadow request will happen if the value is not found in headers. Envoy will not wait for
|
// and no shadow request will happen if the value is not found in headers. Envoy will not wait for
|
||||||
|
|
@ -711,8 +787,8 @@ message RouteAction {
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
// Internally, Envoy always uses the HTTP/2 *:authority* header to represent the HTTP/1
|
// Internally, Envoy always uses the HTTP/2 ``:authority`` header to represent the HTTP/1
|
||||||
// *Host* header. Thus, if attempting to match on *Host*, match on *:authority* instead.
|
// ``Host`` header. Thus, if attempting to match on ``Host``, match on ``:authority`` instead.
|
||||||
//
|
//
|
||||||
// .. note::
|
// .. note::
|
||||||
//
|
//
|
||||||
|
|
@ -724,7 +800,7 @@ message RouteAction {
|
||||||
|
|
||||||
// If not specified, all requests to the target cluster will be mirrored.
|
// If not specified, all requests to the target cluster will be mirrored.
|
||||||
//
|
//
|
||||||
// If specified, this field takes precedence over the `runtime_key` field and requests must also
|
// If specified, this field takes precedence over the ``runtime_key`` field and requests must also
|
||||||
// fall under the percentage of matches indicated by this field.
|
// fall under the percentage of matches indicated by this field.
|
||||||
//
|
//
|
||||||
// For some fraction N/D, a random number in the range [0,D) is selected. If the
|
// For some fraction N/D, a random number in the range [0,D) is selected. If the
|
||||||
|
|
@ -908,11 +984,11 @@ message RouteAction {
|
||||||
|
|
||||||
// If present, and the request contains a `grpc-timeout header
|
// If present, and the request contains a `grpc-timeout header
|
||||||
// <https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md>`_, use that value as the
|
// <https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md>`_, use that value as the
|
||||||
// *max_stream_duration*, but limit the applied timeout to the maximum value specified here.
|
// ``max_stream_duration``, but limit the applied timeout to the maximum value specified here.
|
||||||
// If set to 0, the `grpc-timeout` header is used without modification.
|
// If set to 0, the ``grpc-timeout`` header is used without modification.
|
||||||
google.protobuf.Duration grpc_timeout_header_max = 2;
|
google.protobuf.Duration grpc_timeout_header_max = 2;
|
||||||
|
|
||||||
// If present, Envoy will adjust the timeout provided by the `grpc-timeout` header by
|
// If present, Envoy will adjust the timeout provided by the ``grpc-timeout`` header by
|
||||||
// subtracting the provided duration from the header. This is useful for allowing Envoy to set
|
// subtracting the provided duration from the header. This is useful for allowing Envoy to set
|
||||||
// its global timeout to be less than that of the deadline imposed by the calling client, which
|
// its global timeout to be less than that of the deadline imposed by the calling client, which
|
||||||
// makes it more likely that Envoy will handle the timeout instead of having the call canceled
|
// makes it more likely that Envoy will handle the timeout instead of having the call canceled
|
||||||
|
|
@ -939,8 +1015,8 @@ message RouteAction {
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
// Internally, Envoy always uses the HTTP/2 *:authority* header to represent the HTTP/1
|
// Internally, Envoy always uses the HTTP/2 ``:authority`` header to represent the HTTP/1
|
||||||
// *Host* header. Thus, if attempting to match on *Host*, match on *:authority* instead.
|
// ``Host`` header. Thus, if attempting to match on ``Host``, match on ``:authority`` instead.
|
||||||
//
|
//
|
||||||
// .. note::
|
// .. note::
|
||||||
//
|
//
|
||||||
|
|
@ -975,7 +1051,7 @@ message RouteAction {
|
||||||
// in the upstream cluster with metadata matching what's set in this field will be considered
|
// in the upstream cluster with metadata matching what's set in this field will be considered
|
||||||
// for load balancing. If using :ref:`weighted_clusters
|
// for load balancing. If using :ref:`weighted_clusters
|
||||||
// <envoy_v3_api_field_config.route.v3.RouteAction.weighted_clusters>`, metadata will be merged, with values
|
// <envoy_v3_api_field_config.route.v3.RouteAction.weighted_clusters>`, metadata will be merged, with values
|
||||||
// provided there taking precedence. The filter name should be specified as *envoy.lb*.
|
// provided there taking precedence. The filter name should be specified as ``envoy.lb``.
|
||||||
core.v3.Metadata metadata_match = 4;
|
core.v3.Metadata metadata_match = 4;
|
||||||
|
|
||||||
// Indicates that during forwarding, the matched prefix (or path) should be
|
// Indicates that during forwarding, the matched prefix (or path) should be
|
||||||
|
|
@ -984,16 +1060,16 @@ message RouteAction {
|
||||||
// place the original path before rewrite into the :ref:`x-envoy-original-path
|
// place the original path before rewrite into the :ref:`x-envoy-original-path
|
||||||
// <config_http_filters_router_x-envoy-original-path>` header.
|
// <config_http_filters_router_x-envoy-original-path>` header.
|
||||||
//
|
//
|
||||||
// Only one of *prefix_rewrite* or
|
// Only one of :ref:`regex_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.regex_rewrite>`
|
||||||
// :ref:`regex_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.regex_rewrite>`
|
// :ref:`path_rewrite_policy <envoy_v3_api_field_config.route.v3.RouteAction.path_rewrite_policy>`,
|
||||||
// may be specified.
|
// or :ref:`prefix_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.prefix_rewrite>` may be specified.
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
// Pay careful attention to the use of trailing slashes in the
|
// Pay careful attention to the use of trailing slashes in the
|
||||||
// :ref:`route's match <envoy_v3_api_field_config.route.v3.Route.match>` prefix value.
|
// :ref:`route's match <envoy_v3_api_field_config.route.v3.Route.match>` prefix value.
|
||||||
// Stripping a prefix from a path requires multiple Routes to handle all cases. For example,
|
// Stripping a prefix from a path requires multiple Routes to handle all cases. For example,
|
||||||
// rewriting */prefix* to */* and */prefix/etc* to */etc* cannot be done in a single
|
// rewriting ``/prefix`` to ``/`` and ``/prefix/etc`` to ``/etc`` cannot be done in a single
|
||||||
// :ref:`Route <envoy_v3_api_msg_config.route.v3.Route>`, as shown by the below config entries:
|
// :ref:`Route <envoy_v3_api_msg_config.route.v3.Route>`, as shown by the below config entries:
|
||||||
//
|
//
|
||||||
// .. code-block:: yaml
|
// .. code-block:: yaml
|
||||||
|
|
@ -1007,8 +1083,8 @@ message RouteAction {
|
||||||
// route:
|
// route:
|
||||||
// prefix_rewrite: "/"
|
// prefix_rewrite: "/"
|
||||||
//
|
//
|
||||||
// Having above entries in the config, requests to */prefix* will be stripped to */*, while
|
// Having above entries in the config, requests to ``/prefix`` will be stripped to ``/``, while
|
||||||
// requests to */prefix/etc* will be stripped to */etc*.
|
// requests to ``/prefix/etc`` will be stripped to ``/etc``.
|
||||||
string prefix_rewrite = 5
|
string prefix_rewrite = 5
|
||||||
[(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
[(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
||||||
|
|
||||||
|
|
@ -1021,8 +1097,10 @@ message RouteAction {
|
||||||
// before the rewrite into the :ref:`x-envoy-original-path
|
// before the rewrite into the :ref:`x-envoy-original-path
|
||||||
// <config_http_filters_router_x-envoy-original-path>` header.
|
// <config_http_filters_router_x-envoy-original-path>` header.
|
||||||
//
|
//
|
||||||
// Only one of :ref:`prefix_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.prefix_rewrite>`
|
// Only one of :ref:`regex_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.regex_rewrite>`,
|
||||||
// or *regex_rewrite* may be specified.
|
// :ref:`prefix_rewrite <envoy_v3_api_field_config.route.v3.RouteAction.prefix_rewrite>`, or
|
||||||
|
// :ref:`path_rewrite_policy <envoy_v3_api_field_config.route.v3.RouteAction.path_rewrite_policy>`]
|
||||||
|
// may be specified.
|
||||||
//
|
//
|
||||||
// Examples using Google's `RE2 <https://github.com/google/re2>`_ engine:
|
// Examples using Google's `RE2 <https://github.com/google/re2>`_ engine:
|
||||||
//
|
//
|
||||||
|
|
@ -1042,6 +1120,9 @@ message RouteAction {
|
||||||
// ``/aaa/yyy/bbb``.
|
// ``/aaa/yyy/bbb``.
|
||||||
type.matcher.v3.RegexMatchAndSubstitute regex_rewrite = 32;
|
type.matcher.v3.RegexMatchAndSubstitute regex_rewrite = 32;
|
||||||
|
|
||||||
|
// [#extension-category: envoy.path.rewrite]
|
||||||
|
core.v3.TypedExtensionConfig path_rewrite_policy = 41;
|
||||||
|
|
||||||
oneof host_rewrite_specifier {
|
oneof host_rewrite_specifier {
|
||||||
// Indicates that during forwarding, the host header will be swapped with
|
// Indicates that during forwarding, the host header will be swapped with
|
||||||
// this value. Using this option will append the
|
// this value. Using this option will append the
|
||||||
|
|
@ -1054,7 +1135,7 @@ message RouteAction {
|
||||||
// Indicates that during forwarding, the host header will be swapped with
|
// Indicates that during forwarding, the host header will be swapped with
|
||||||
// the hostname of the upstream host chosen by the cluster manager. This
|
// the hostname of the upstream host chosen by the cluster manager. This
|
||||||
// option is applicable only when the destination cluster for a route is of
|
// option is applicable only when the destination cluster for a route is of
|
||||||
// type *strict_dns* or *logical_dns*. Setting this to true with other cluster types
|
// type ``strict_dns`` or ``logical_dns``. Setting this to true with other cluster types
|
||||||
// has no effect. Using this option will append the
|
// has no effect. Using this option will append the
|
||||||
// :ref:`config_http_conn_man_headers_x-forwarded-host` header if
|
// :ref:`config_http_conn_man_headers_x-forwarded-host` header if
|
||||||
// :ref:`append_x_forwarded_host <envoy_v3_api_field_config.route.v3.RouteAction.append_x_forwarded_host>`
|
// :ref:`append_x_forwarded_host <envoy_v3_api_field_config.route.v3.RouteAction.append_x_forwarded_host>`
|
||||||
|
|
@ -1097,7 +1178,7 @@ message RouteAction {
|
||||||
// regex: "^/(.+)/.+$"
|
// regex: "^/(.+)/.+$"
|
||||||
// substitution: \1
|
// substitution: \1
|
||||||
//
|
//
|
||||||
// Would rewrite the host header to `envoyproxy.io` given the path `/envoyproxy.io/some/path`.
|
// Would rewrite the host header to ``envoyproxy.io`` given the path ``/envoyproxy.io/some/path``.
|
||||||
type.matcher.v3.RegexMatchAndSubstitute host_rewrite_path_regex = 35;
|
type.matcher.v3.RegexMatchAndSubstitute host_rewrite_path_regex = 35;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1147,6 +1228,11 @@ message RouteAction {
|
||||||
// :ref:`HTTP_DOWNSTREAM_STREAM_IDLE <envoy_v3_api_enum_value_config.overload.v3.ScaleTimersOverloadActionConfig.TimerType.HTTP_DOWNSTREAM_STREAM_IDLE>`.
|
// :ref:`HTTP_DOWNSTREAM_STREAM_IDLE <envoy_v3_api_enum_value_config.overload.v3.ScaleTimersOverloadActionConfig.TimerType.HTTP_DOWNSTREAM_STREAM_IDLE>`.
|
||||||
google.protobuf.Duration idle_timeout = 24;
|
google.protobuf.Duration idle_timeout = 24;
|
||||||
|
|
||||||
|
// Specifies how to send request over TLS early data.
|
||||||
|
// If absent, allows `safe HTTP requests <https://www.rfc-editor.org/rfc/rfc7231#section-4.2.1>`_ to be sent on early data.
|
||||||
|
// [#extension-category: envoy.route.early_data_policy]
|
||||||
|
core.v3.TypedExtensionConfig early_data_policy = 40;
|
||||||
|
|
||||||
// Indicates that the route has a retry policy. Note that if this is set,
|
// Indicates that the route has a retry policy. Note that if this is set,
|
||||||
// it'll take precedence over the virtual host level retry policy entirely
|
// it'll take precedence over the virtual host level retry policy entirely
|
||||||
// (e.g.: policies are not merged, most internal one becomes the enforced policy).
|
// (e.g.: policies are not merged, most internal one becomes the enforced policy).
|
||||||
|
|
@ -1194,8 +1280,17 @@ message RouteAction {
|
||||||
// ignoring the rest of the hash policy list.
|
// ignoring the rest of the hash policy list.
|
||||||
repeated HashPolicy hash_policy = 15;
|
repeated HashPolicy hash_policy = 15;
|
||||||
|
|
||||||
// Indicates that the route has a CORS policy.
|
// Indicates that the route has a CORS policy. This field is ignored if related cors policy is
|
||||||
CorsPolicy cors = 17;
|
// found in the :ref:`Route.typed_per_filter_config<envoy_v3_api_field_config.route.v3.Route.typed_per_filter_config>` or
|
||||||
|
// :ref:`WeightedCluster.ClusterWeight.typed_per_filter_config<envoy_v3_api_field_config.route.v3.WeightedCluster.ClusterWeight.typed_per_filter_config>`.
|
||||||
|
//
|
||||||
|
// .. attention::
|
||||||
|
//
|
||||||
|
// This option has been deprecated. Please use
|
||||||
|
// :ref:`Route.typed_per_filter_config<envoy_v3_api_field_config.route.v3.Route.typed_per_filter_config>` or
|
||||||
|
// :ref:`WeightedCluster.ClusterWeight.typed_per_filter_config<envoy_v3_api_field_config.route.v3.WeightedCluster.ClusterWeight.typed_per_filter_config>`
|
||||||
|
// to configure the CORS HTTP filter.
|
||||||
|
CorsPolicy cors = 17 [deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// Deprecated by :ref:`grpc_timeout_header_max <envoy_v3_api_field_config.route.v3.RouteAction.MaxStreamDuration.grpc_timeout_header_max>`
|
// Deprecated by :ref:`grpc_timeout_header_max <envoy_v3_api_field_config.route.v3.RouteAction.MaxStreamDuration.grpc_timeout_header_max>`
|
||||||
// If present, and the request is a gRPC request, use the
|
// If present, and the request is a gRPC request, use the
|
||||||
|
|
@ -1203,7 +1298,7 @@ message RouteAction {
|
||||||
// or its default value (infinity) instead of
|
// or its default value (infinity) instead of
|
||||||
// :ref:`timeout <envoy_v3_api_field_config.route.v3.RouteAction.timeout>`, but limit the applied timeout
|
// :ref:`timeout <envoy_v3_api_field_config.route.v3.RouteAction.timeout>`, but limit the applied timeout
|
||||||
// to the maximum value specified here. If configured as 0, the maximum allowed timeout for
|
// to the maximum value specified here. If configured as 0, the maximum allowed timeout for
|
||||||
// gRPC requests is infinity. If not configured at all, the `grpc-timeout` header is not used
|
// gRPC requests is infinity. If not configured at all, the ``grpc-timeout`` header is not used
|
||||||
// and gRPC requests time out like any other requests using
|
// and gRPC requests time out like any other requests using
|
||||||
// :ref:`timeout <envoy_v3_api_field_config.route.v3.RouteAction.timeout>` or its default.
|
// :ref:`timeout <envoy_v3_api_field_config.route.v3.RouteAction.timeout>` or its default.
|
||||||
// This can be used to prevent unexpected upstream request timeouts due to potentially long
|
// This can be used to prevent unexpected upstream request timeouts due to potentially long
|
||||||
|
|
@ -1221,7 +1316,7 @@ message RouteAction {
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// Deprecated by :ref:`grpc_timeout_header_offset <envoy_v3_api_field_config.route.v3.RouteAction.MaxStreamDuration.grpc_timeout_header_offset>`.
|
// Deprecated by :ref:`grpc_timeout_header_offset <envoy_v3_api_field_config.route.v3.RouteAction.MaxStreamDuration.grpc_timeout_header_offset>`.
|
||||||
// If present, Envoy will adjust the timeout provided by the `grpc-timeout` header by subtracting
|
// If present, Envoy will adjust the timeout provided by the ``grpc-timeout`` header by subtracting
|
||||||
// the provided duration from the header. This is useful in allowing Envoy to set its global
|
// the provided duration from the header. This is useful in allowing Envoy to set its global
|
||||||
// timeout to be less than that of the deadline imposed by the calling client, which makes it more
|
// timeout to be less than that of the deadline imposed by the calling client, which makes it more
|
||||||
// likely that Envoy will handle the timeout instead of having the call canceled by the client.
|
// likely that Envoy will handle the timeout instead of having the call canceled by the client.
|
||||||
|
|
@ -1324,8 +1419,8 @@ message RetryPolicy {
|
||||||
}];
|
}];
|
||||||
|
|
||||||
// Specifies the maximum interval between retries. This parameter is optional, but must be
|
// Specifies the maximum interval between retries. This parameter is optional, but must be
|
||||||
// greater than or equal to the `base_interval` if set. The default is 10 times the
|
// greater than or equal to the ``base_interval`` if set. The default is 10 times the
|
||||||
// `base_interval`. See :ref:`config_http_filters_router_x-envoy-max-retries` for a discussion
|
// ``base_interval``. See :ref:`config_http_filters_router_x-envoy-max-retries` for a discussion
|
||||||
// of Envoy's back-off algorithm.
|
// of Envoy's back-off algorithm.
|
||||||
google.protobuf.Duration max_interval = 2 [(validate.rules).duration = {gt {}}];
|
google.protobuf.Duration max_interval = 2 [(validate.rules).duration = {gt {}}];
|
||||||
}
|
}
|
||||||
|
|
@ -1470,7 +1565,7 @@ message RetryPolicy {
|
||||||
|
|
||||||
// Specifies parameters that control exponential retry back off. This parameter is optional, in which case the
|
// Specifies parameters that control exponential retry back off. This parameter is optional, in which case the
|
||||||
// default base interval is 25 milliseconds or, if set, the current value of the
|
// default base interval is 25 milliseconds or, if set, the current value of the
|
||||||
// `upstream.base_retry_backoff_ms` runtime parameter. The default maximum interval is 10 times
|
// ``upstream.base_retry_backoff_ms`` runtime parameter. The default maximum interval is 10 times
|
||||||
// the base interval. The documentation for :ref:`config_http_filters_router_x-envoy-max-retries`
|
// the base interval. The documentation for :ref:`config_http_filters_router_x-envoy-max-retries`
|
||||||
// describes Envoy's back-off algorithm.
|
// describes Envoy's back-off algorithm.
|
||||||
RetryBackOff retry_back_off = 8;
|
RetryBackOff retry_back_off = 8;
|
||||||
|
|
@ -1480,7 +1575,7 @@ message RetryPolicy {
|
||||||
// return a response header like ``Retry-After`` or ``X-RateLimit-Reset`` to
|
// return a response header like ``Retry-After`` or ``X-RateLimit-Reset`` to
|
||||||
// provide feedback to the client on how long to wait before retrying. If
|
// provide feedback to the client on how long to wait before retrying. If
|
||||||
// configured, this back-off strategy will be used instead of the
|
// configured, this back-off strategy will be used instead of the
|
||||||
// default exponential back off strategy (configured using `retry_back_off`)
|
// default exponential back off strategy (configured using ``retry_back_off``)
|
||||||
// whenever a response includes the matching headers.
|
// whenever a response includes the matching headers.
|
||||||
RateLimitedRetryBackOff rate_limited_retry_back_off = 11;
|
RateLimitedRetryBackOff rate_limited_retry_back_off = 11;
|
||||||
|
|
||||||
|
|
@ -1547,10 +1642,10 @@ message RedirectAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
// When the scheme redirection take place, the following rules apply:
|
// When the scheme redirection take place, the following rules apply:
|
||||||
// 1. If the source URI scheme is `http` and the port is explicitly
|
// 1. If the source URI scheme is ``http`` and the port is explicitly
|
||||||
// set to `:80`, the port will be removed after the redirection
|
// set to ``:80``, the port will be removed after the redirection
|
||||||
// 2. If the source URI scheme is `https` and the port is explicitly
|
// 2. If the source URI scheme is ``https`` and the port is explicitly
|
||||||
// set to `:443`, the port will be removed after the redirection
|
// set to ``:443``, the port will be removed after the redirection
|
||||||
oneof scheme_rewrite_specifier {
|
oneof scheme_rewrite_specifier {
|
||||||
// The scheme portion of the URL will be swapped with "https".
|
// The scheme portion of the URL will be swapped with "https".
|
||||||
bool https_redirect = 4;
|
bool https_redirect = 4;
|
||||||
|
|
@ -1644,7 +1739,7 @@ message DirectResponseAction {
|
||||||
//
|
//
|
||||||
// .. note::
|
// .. note::
|
||||||
//
|
//
|
||||||
// Headers can be specified using *response_headers_to_add* in the enclosing
|
// Headers can be specified using ``response_headers_to_add`` in the enclosing
|
||||||
// :ref:`envoy_v3_api_msg_config.route.v3.Route`, :ref:`envoy_v3_api_msg_config.route.v3.RouteConfiguration` or
|
// :ref:`envoy_v3_api_msg_config.route.v3.Route`, :ref:`envoy_v3_api_msg_config.route.v3.RouteConfiguration` or
|
||||||
// :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`.
|
// :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`.
|
||||||
core.v3.DataSource body = 2;
|
core.v3.DataSource body = 2;
|
||||||
|
|
@ -1733,7 +1828,7 @@ message VirtualCluster {
|
||||||
reserved "pattern", "method";
|
reserved "pattern", "method";
|
||||||
|
|
||||||
// Specifies a list of header matchers to use for matching requests. Each specified header must
|
// Specifies a list of header matchers to use for matching requests. Each specified header must
|
||||||
// match. The pseudo-headers `:path` and `:method` can be used to match the request path and
|
// match. The pseudo-headers ``:path`` and ``:method`` can be used to match the request path and
|
||||||
// method, respectively.
|
// method, respectively.
|
||||||
repeated HeaderMatcher headers = 4;
|
repeated HeaderMatcher headers = 4;
|
||||||
|
|
||||||
|
|
@ -1748,7 +1843,7 @@ message VirtualCluster {
|
||||||
message RateLimit {
|
message RateLimit {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RateLimit";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RateLimit";
|
||||||
|
|
||||||
// [#next-free-field: 11]
|
// [#next-free-field: 12]
|
||||||
message Action {
|
message Action {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.route.RateLimit.Action";
|
"envoy.api.v2.route.RateLimit.Action";
|
||||||
|
|
@ -1787,7 +1882,7 @@ message RateLimit {
|
||||||
}
|
}
|
||||||
|
|
||||||
// The following descriptor entry is appended when a header contains a key that matches the
|
// The following descriptor entry is appended when a header contains a key that matches the
|
||||||
// *header_name*:
|
// ``header_name``:
|
||||||
//
|
//
|
||||||
// .. code-block:: cpp
|
// .. code-block:: cpp
|
||||||
//
|
//
|
||||||
|
|
@ -1831,14 +1926,14 @@ message RateLimit {
|
||||||
message MaskedRemoteAddress {
|
message MaskedRemoteAddress {
|
||||||
// Length of prefix mask len for IPv4 (e.g. 0, 32).
|
// Length of prefix mask len for IPv4 (e.g. 0, 32).
|
||||||
// Defaults to 32 when unset.
|
// Defaults to 32 when unset.
|
||||||
// For example, trusted address from x-forwarded-for is `192.168.1.1`,
|
// For example, trusted address from x-forwarded-for is ``192.168.1.1``,
|
||||||
// the descriptor entry is ("masked_remote_address", "192.168.1.1/32");
|
// the descriptor entry is ("masked_remote_address", "192.168.1.1/32");
|
||||||
// if mask len is 24, the descriptor entry is ("masked_remote_address", "192.168.1.0/24").
|
// if mask len is 24, the descriptor entry is ("masked_remote_address", "192.168.1.0/24").
|
||||||
google.protobuf.UInt32Value v4_prefix_mask_len = 1 [(validate.rules).uint32 = {lte: 32}];
|
google.protobuf.UInt32Value v4_prefix_mask_len = 1 [(validate.rules).uint32 = {lte: 32}];
|
||||||
|
|
||||||
// Length of prefix mask len for IPv6 (e.g. 0, 128).
|
// Length of prefix mask len for IPv6 (e.g. 0, 128).
|
||||||
// Defaults to 128 when unset.
|
// Defaults to 128 when unset.
|
||||||
// For example, trusted address from x-forwarded-for is `2001:abcd:ef01:2345:6789:abcd:ef01:234`,
|
// For example, trusted address from x-forwarded-for is ``2001:abcd:ef01:2345:6789:abcd:ef01:234``,
|
||||||
// the descriptor entry is ("masked_remote_address", "2001:abcd:ef01:2345:6789:abcd:ef01:234/128");
|
// the descriptor entry is ("masked_remote_address", "2001:abcd:ef01:2345:6789:abcd:ef01:234/128");
|
||||||
// if mask len is 64, the descriptor entry is ("masked_remote_address", "2001:abcd:ef01:2345::/64").
|
// if mask len is 64, the descriptor entry is ("masked_remote_address", "2001:abcd:ef01:2345::/64").
|
||||||
google.protobuf.UInt32Value v6_prefix_mask_len = 2 [(validate.rules).uint32 = {lte: 128}];
|
google.protobuf.UInt32Value v6_prefix_mask_len = 2 [(validate.rules).uint32 = {lte: 128}];
|
||||||
|
|
@ -1870,7 +1965,7 @@ message RateLimit {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.route.RateLimit.Action.HeaderValueMatch";
|
"envoy.api.v2.route.RateLimit.Action.HeaderValueMatch";
|
||||||
|
|
||||||
// The key to use in the descriptor entry. Defaults to `header_match`.
|
// The key to use in the descriptor entry. Defaults to ``header_match``.
|
||||||
string descriptor_key = 4;
|
string descriptor_key = 4;
|
||||||
|
|
||||||
// The value to use in the descriptor entry.
|
// The value to use in the descriptor entry.
|
||||||
|
|
@ -1907,7 +2002,7 @@ message RateLimit {
|
||||||
// only happen if the value in the dynamic metadata is of type string.
|
// only happen if the value in the dynamic metadata is of type string.
|
||||||
type.metadata.v3.MetadataKey metadata_key = 2 [(validate.rules).message = {required: true}];
|
type.metadata.v3.MetadataKey metadata_key = 2 [(validate.rules).message = {required: true}];
|
||||||
|
|
||||||
// An optional value to use if *metadata_key* is empty. If not set and
|
// An optional value to use if ``metadata_key`` is empty. If not set and
|
||||||
// no value is present under the metadata_key then no descriptor is generated.
|
// no value is present under the metadata_key then no descriptor is generated.
|
||||||
string default_value = 3;
|
string default_value = 3;
|
||||||
}
|
}
|
||||||
|
|
@ -1917,6 +2012,7 @@ message RateLimit {
|
||||||
// .. code-block:: cpp
|
// .. code-block:: cpp
|
||||||
//
|
//
|
||||||
// ("<descriptor_key>", "<value_queried_from_metadata>")
|
// ("<descriptor_key>", "<value_queried_from_metadata>")
|
||||||
|
// [#next-free-field: 6]
|
||||||
message MetaData {
|
message MetaData {
|
||||||
enum Source {
|
enum Source {
|
||||||
// Query :ref:`dynamic metadata <well_known_dynamic_metadata>`
|
// Query :ref:`dynamic metadata <well_known_dynamic_metadata>`
|
||||||
|
|
@ -1933,12 +2029,45 @@ message RateLimit {
|
||||||
// only happen if the value in the metadata is of type string.
|
// only happen if the value in the metadata is of type string.
|
||||||
type.metadata.v3.MetadataKey metadata_key = 2 [(validate.rules).message = {required: true}];
|
type.metadata.v3.MetadataKey metadata_key = 2 [(validate.rules).message = {required: true}];
|
||||||
|
|
||||||
// An optional value to use if *metadata_key* is empty. If not set and
|
// An optional value to use if ``metadata_key`` is empty. If not set and
|
||||||
// no value is present under the metadata_key then no descriptor is generated.
|
// no value is present under the metadata_key then ``skip_if_absent`` is followed to
|
||||||
|
// skip calling the rate limiting service or skip the descriptor.
|
||||||
string default_value = 3;
|
string default_value = 3;
|
||||||
|
|
||||||
// Source of metadata
|
// Source of metadata
|
||||||
Source source = 4 [(validate.rules).enum = {defined_only: true}];
|
Source source = 4 [(validate.rules).enum = {defined_only: true}];
|
||||||
|
|
||||||
|
// If set to true, Envoy skips the descriptor while calling rate limiting service
|
||||||
|
// when ``metadata_key`` is empty and ``default_value`` is not set. By default it skips calling the
|
||||||
|
// rate limiting service in that case.
|
||||||
|
bool skip_if_absent = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The following descriptor entry is appended to the descriptor:
|
||||||
|
//
|
||||||
|
// .. code-block:: cpp
|
||||||
|
//
|
||||||
|
// ("query_match", "<descriptor_value>")
|
||||||
|
message QueryParameterValueMatch {
|
||||||
|
// The key to use in the descriptor entry. Defaults to ``query_match``.
|
||||||
|
string descriptor_key = 4;
|
||||||
|
|
||||||
|
// The value to use in the descriptor entry.
|
||||||
|
string descriptor_value = 1 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
|
// If set to true, the action will append a descriptor entry when the
|
||||||
|
// request matches the headers. If set to false, the action will append a
|
||||||
|
// descriptor entry when the request does not match the headers. The
|
||||||
|
// default value is true.
|
||||||
|
google.protobuf.BoolValue expect_match = 2;
|
||||||
|
|
||||||
|
// Specifies a set of query parameters that the rate limit action should match
|
||||||
|
// on. The action will check the request’s query parameters against all the
|
||||||
|
// specified query parameters in the config. A match will happen if all the
|
||||||
|
// query parameters in the config are present in the request with the same values
|
||||||
|
// (or based on presence if the value field is not in the config).
|
||||||
|
repeated QueryParameterMatcher query_parameters = 3
|
||||||
|
[(validate.rules).repeated = {min_items: 1}];
|
||||||
}
|
}
|
||||||
|
|
||||||
oneof action_specifier {
|
oneof action_specifier {
|
||||||
|
|
@ -1987,6 +2116,9 @@ message RateLimit {
|
||||||
|
|
||||||
// Rate limit on masked remote address.
|
// Rate limit on masked remote address.
|
||||||
MaskedRemoteAddress masked_remote_address = 10;
|
MaskedRemoteAddress masked_remote_address = 10;
|
||||||
|
|
||||||
|
// Rate limit on the existence of query parameters.
|
||||||
|
QueryParameterValueMatch query_parameter_value_match = 11;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2037,19 +2169,21 @@ message RateLimit {
|
||||||
|
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
// Internally, Envoy always uses the HTTP/2 *:authority* header to represent the HTTP/1 *Host*
|
// Internally, Envoy always uses the HTTP/2 ``:authority`` header to represent the HTTP/1 ``Host``
|
||||||
// header. Thus, if attempting to match on *Host*, match on *:authority* instead.
|
// header. Thus, if attempting to match on ``Host``, match on ``:authority`` instead.
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
//
|
//
|
||||||
// To route on HTTP method, use the special HTTP/2 *:method* header. This works for both
|
// To route on HTTP method, use the special HTTP/2 ``:method`` header. This works for both
|
||||||
// HTTP/1 and HTTP/2 as Envoy normalizes headers. E.g.,
|
// HTTP/1 and HTTP/2 as Envoy normalizes headers. E.g.,
|
||||||
//
|
//
|
||||||
// .. code-block:: json
|
// .. code-block:: json
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// "name": ":method",
|
// "name": ":method",
|
||||||
// "exact_match": "POST"
|
// "string_match": {
|
||||||
|
// "exact": "POST"
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
|
|
@ -2059,7 +2193,7 @@ message RateLimit {
|
||||||
// value.
|
// value.
|
||||||
//
|
//
|
||||||
// [#next-major-version: HeaderMatcher should be refactored to use StringMatcher.]
|
// [#next-major-version: HeaderMatcher should be refactored to use StringMatcher.]
|
||||||
// [#next-free-field: 14]
|
// [#next-free-field: 15]
|
||||||
message HeaderMatcher {
|
message HeaderMatcher {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.HeaderMatcher";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.HeaderMatcher";
|
||||||
|
|
||||||
|
|
@ -2094,8 +2228,8 @@ message HeaderMatcher {
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
//
|
//
|
||||||
// * For range [-10,0), route will match for header value -1, but not for 0, "somestring", 10.9,
|
// * For range [-10,0), route will match for header value -1, but not for 0, ``somestring``, 10.9,
|
||||||
// "-1somestring"
|
// ``-1somestring``
|
||||||
type.v3.Int64Range range_match = 6;
|
type.v3.Int64Range range_match = 6;
|
||||||
|
|
||||||
// If specified as true, header match will be performed based on whether the header is in the
|
// If specified as true, header match will be performed based on whether the header is in the
|
||||||
|
|
@ -2108,7 +2242,7 @@ message HeaderMatcher {
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
//
|
//
|
||||||
// * The prefix *abcd* matches the value *abcdxyz*, but not for *abcxyz*.
|
// * The prefix ``abcd`` matches the value ``abcdxyz``, but not for ``abcxyz``.
|
||||||
string prefix_match = 9 [
|
string prefix_match = 9 [
|
||||||
deprecated = true,
|
deprecated = true,
|
||||||
(validate.rules).string = {min_len: 1},
|
(validate.rules).string = {min_len: 1},
|
||||||
|
|
@ -2121,7 +2255,7 @@ message HeaderMatcher {
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
//
|
//
|
||||||
// * The suffix *abcd* matches the value *xyzabcd*, but not for *xyzbcd*.
|
// * The suffix ``abcd`` matches the value ``xyzabcd``, but not for ``xyzbcd``.
|
||||||
string suffix_match = 10 [
|
string suffix_match = 10 [
|
||||||
deprecated = true,
|
deprecated = true,
|
||||||
(validate.rules).string = {min_len: 1},
|
(validate.rules).string = {min_len: 1},
|
||||||
|
|
@ -2135,7 +2269,7 @@ message HeaderMatcher {
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
//
|
//
|
||||||
// * The value *abcd* matches the value *xyzabcdpqr*, but not for *xyzbcdpqr*.
|
// * The value ``abcd`` matches the value ``xyzabcdpqr``, but not for ``xyzbcdpqr``.
|
||||||
string contains_match = 12 [
|
string contains_match = 12 [
|
||||||
deprecated = true,
|
deprecated = true,
|
||||||
(validate.rules).string = {min_len: 1},
|
(validate.rules).string = {min_len: 1},
|
||||||
|
|
@ -2150,9 +2284,37 @@ message HeaderMatcher {
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
//
|
//
|
||||||
// * The regex ``\d{3}`` does not match the value *1234*, so it will match when inverted.
|
// * The regex ``\d{3}`` does not match the value ``1234``, so it will match when inverted.
|
||||||
// * The range [-10,0) will match the value -1, so it will not match when inverted.
|
// * The range [-10,0) will match the value -1, so it will not match when inverted.
|
||||||
bool invert_match = 8;
|
bool invert_match = 8;
|
||||||
|
|
||||||
|
// If specified, for any header match rule, if the header match rule specified header
|
||||||
|
// does not exist, this header value will be treated as empty. Defaults to false.
|
||||||
|
//
|
||||||
|
// Examples:
|
||||||
|
//
|
||||||
|
// * The header match rule specified header "header1" to range match of [0, 10],
|
||||||
|
// :ref:`invert_match <envoy_v3_api_field_config.route.v3.HeaderMatcher.invert_match>`
|
||||||
|
// is set to true and :ref:`treat_missing_header_as_empty <envoy_v3_api_field_config.route.v3.HeaderMatcher.treat_missing_header_as_empty>`
|
||||||
|
// is set to true; The "header1" header is not present. The match rule will
|
||||||
|
// treat the "header1" as an empty header. The empty header does not match the range,
|
||||||
|
// so it will match when inverted.
|
||||||
|
// * The header match rule specified header "header2" to range match of [0, 10],
|
||||||
|
// :ref:`invert_match <envoy_v3_api_field_config.route.v3.HeaderMatcher.invert_match>`
|
||||||
|
// is set to true and :ref:`treat_missing_header_as_empty <envoy_v3_api_field_config.route.v3.HeaderMatcher.treat_missing_header_as_empty>`
|
||||||
|
// is set to false; The "header2" header is not present and the header
|
||||||
|
// matcher rule for "header2" will be ignored so it will not match.
|
||||||
|
// * The header match rule specified header "header3" to a string regex match
|
||||||
|
// ``^$`` which means an empty string, and
|
||||||
|
// :ref:`treat_missing_header_as_empty <envoy_v3_api_field_config.route.v3.HeaderMatcher.treat_missing_header_as_empty>`
|
||||||
|
// is set to true; The "header3" header is not present.
|
||||||
|
// The match rule will treat the "header3" header as an empty header so it will match.
|
||||||
|
// * The header match rule specified header "header4" to a string regex match
|
||||||
|
// ``^$`` which means an empty string, and
|
||||||
|
// :ref:`treat_missing_header_as_empty <envoy_v3_api_field_config.route.v3.HeaderMatcher.treat_missing_header_as_empty>`
|
||||||
|
// is set to false; The "header4" header is not present.
|
||||||
|
// The match rule for "header4" will be ignored so it will not match.
|
||||||
|
bool treat_missing_header_as_empty = 14;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Query parameter matching treats the query string of a request's :path header
|
// Query parameter matching treats the query string of a request's :path header
|
||||||
|
|
@ -2167,7 +2329,7 @@ message QueryParameterMatcher {
|
||||||
reserved "value", "regex";
|
reserved "value", "regex";
|
||||||
|
|
||||||
// Specifies the name of a key that must be present in the requested
|
// Specifies the name of a key that must be present in the requested
|
||||||
// *path*'s query string.
|
// ``path``'s query string.
|
||||||
string name = 1 [(validate.rules).string = {min_len: 1 max_bytes: 1024}];
|
string name = 1 [(validate.rules).string = {min_len: 1 max_bytes: 1024}];
|
||||||
|
|
||||||
oneof query_parameter_match_specifier {
|
oneof query_parameter_match_specifier {
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// Host: foo.com
|
// Host: foo.com
|
||||||
// X-Route-Selector: vip=172.10.10.20
|
// X-Route-Selector: vip=172.10.10.20
|
||||||
//
|
//
|
||||||
// would result in the routing table defined by the `route-config1`
|
// would result in the routing table defined by the ``route-config1``
|
||||||
// RouteConfiguration being assigned to the HTTP request/stream.
|
// RouteConfiguration being assigned to the HTTP request/stream.
|
||||||
//
|
//
|
||||||
// [#next-free-field: 6]
|
// [#next-free-field: 6]
|
||||||
|
|
|
||||||
|
|
@ -27,4 +27,8 @@ message DatadogConfig {
|
||||||
|
|
||||||
// The name used for the service when traces are generated by envoy.
|
// The name used for the service when traces are generated by envoy.
|
||||||
string service_name = 2 [(validate.rules).string = {min_len: 1}];
|
string service_name = 2 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
|
// Optional hostname to use when sending spans to the collector_cluster. Useful for collectors
|
||||||
|
// that require a specific hostname. Defaults to :ref:`collector_cluster <envoy_v3_api_field_config.trace.v3.DatadogConfig.collector_cluster>` above.
|
||||||
|
string collector_hostname = 3;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// Configuration for the LightStep tracer.
|
// Configuration for the LightStep tracer.
|
||||||
// [#extension: envoy.tracers.lightstep]
|
// [#extension: envoy.tracers.lightstep]
|
||||||
|
// [#not-implemented-hide:]
|
||||||
message LightstepConfig {
|
message LightstepConfig {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.config.trace.v2.LightstepConfig";
|
"envoy.config.trace.v2.LightstepConfig";
|
||||||
|
|
|
||||||
28
xds/third_party/envoy/src/main/proto/envoy/config/trace/v3/opentelemetry.proto
vendored
Normal file
28
xds/third_party/envoy/src/main/proto/envoy/config/trace/v3/opentelemetry.proto
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package envoy.config.trace.v3;
|
||||||
|
|
||||||
|
import "envoy/config/core/v3/grpc_service.proto";
|
||||||
|
|
||||||
|
import "udpa/annotations/status.proto";
|
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.config.trace.v3";
|
||||||
|
option java_outer_classname = "OpentelemetryProto";
|
||||||
|
option java_multiple_files = true;
|
||||||
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/config/trace/v3;tracev3";
|
||||||
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
|
// [#protodoc-title: OpenTelemetry tracer]
|
||||||
|
|
||||||
|
// Configuration for the OpenTelemetry tracer.
|
||||||
|
// [#extension: envoy.tracers.opentelemetry]
|
||||||
|
message OpenTelemetryConfig {
|
||||||
|
// The upstream gRPC cluster that will receive OTLP traces.
|
||||||
|
// Note that the tracer drops traces if the server does not read data fast enough.
|
||||||
|
// This field can be left empty to disable reporting traces to the collector.
|
||||||
|
core.v3.GrpcService grpc_service = 1;
|
||||||
|
|
||||||
|
// The name for the service. This will be populated in the ResourceSpan Resource attributes.
|
||||||
|
// If it is not provided, it will default to "unknown_service:envoy".
|
||||||
|
string service_name = 2;
|
||||||
|
}
|
||||||
|
|
@ -7,6 +7,7 @@ import public "envoy/config/trace/v3/dynamic_ot.proto";
|
||||||
import public "envoy/config/trace/v3/http_tracer.proto";
|
import public "envoy/config/trace/v3/http_tracer.proto";
|
||||||
import public "envoy/config/trace/v3/lightstep.proto";
|
import public "envoy/config/trace/v3/lightstep.proto";
|
||||||
import public "envoy/config/trace/v3/opencensus.proto";
|
import public "envoy/config/trace/v3/opencensus.proto";
|
||||||
|
import public "envoy/config/trace/v3/opentelemetry.proto";
|
||||||
import public "envoy/config/trace/v3/service.proto";
|
import public "envoy/config/trace/v3/service.proto";
|
||||||
import public "envoy/config/trace/v3/zipkin.proto";
|
import public "envoy/config/trace/v3/zipkin.proto";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// Configuration for the Zipkin tracer.
|
// Configuration for the Zipkin tracer.
|
||||||
// [#extension: envoy.tracers.zipkin]
|
// [#extension: envoy.tracers.zipkin]
|
||||||
// [#next-free-field: 7]
|
// [#next-free-field: 8]
|
||||||
message ZipkinConfig {
|
message ZipkinConfig {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.config.trace.v2.ZipkinConfig";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.config.trace.v2.ZipkinConfig";
|
||||||
|
|
||||||
|
|
@ -68,4 +68,19 @@ message ZipkinConfig {
|
||||||
// Optional hostname to use when sending spans to the collector_cluster. Useful for collectors
|
// Optional hostname to use when sending spans to the collector_cluster. Useful for collectors
|
||||||
// that require a specific hostname. Defaults to :ref:`collector_cluster <envoy_v3_api_field_config.trace.v3.ZipkinConfig.collector_cluster>` above.
|
// that require a specific hostname. Defaults to :ref:`collector_cluster <envoy_v3_api_field_config.trace.v3.ZipkinConfig.collector_cluster>` above.
|
||||||
string collector_hostname = 6;
|
string collector_hostname = 6;
|
||||||
|
|
||||||
|
// If this is set to true, then Envoy will be treated as an independent hop in trace chain. A complete span pair will be created for a single
|
||||||
|
// request. Server span will be created for the downstream request and client span will be created for the related upstream request.
|
||||||
|
// This should be set to true in the following cases:
|
||||||
|
//
|
||||||
|
// * The Envoy Proxy is used as gateway or ingress.
|
||||||
|
// * The Envoy Proxy is used as sidecar but inbound traffic capturing or outbound traffic capturing is disabled.
|
||||||
|
// * Any case that the `start_child_span of router <envoy_v3_api_field_extensions.filters.http.router.v3.Router.start_child_span>` is set to true.
|
||||||
|
//
|
||||||
|
// .. attention::
|
||||||
|
//
|
||||||
|
// If this is set to true, then the
|
||||||
|
// :ref:`start_child_span of router <envoy_v3_api_field_extensions.filters.http.router.v3.Router.start_child_span>`
|
||||||
|
// SHOULD be set to true also to ensure the correctness of trace chain.
|
||||||
|
bool split_spans_for_request = 7;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ message HTTPFault {
|
||||||
common.fault.v3.FaultDelay delay = 1;
|
common.fault.v3.FaultDelay delay = 1;
|
||||||
|
|
||||||
// If specified, the filter will abort requests based on the values in
|
// If specified, the filter will abort requests based on the values in
|
||||||
// the object. At least *abort* or *delay* must be specified.
|
// the object. At least ``abort`` or ``delay`` must be specified.
|
||||||
FaultAbort abort = 2;
|
FaultAbort abort = 2;
|
||||||
|
|
||||||
// Specifies the name of the (destination) upstream cluster that the
|
// Specifies the name of the (destination) upstream cluster that the
|
||||||
|
|
@ -81,7 +81,7 @@ message HTTPFault {
|
||||||
// The filter will check the request's headers against all the specified
|
// The filter will check the request's headers against all the specified
|
||||||
// headers in the filter config. A match will happen if all the headers in the
|
// headers in the filter config. A match will happen if all the headers in the
|
||||||
// config are present in the request with the same values (or based on
|
// config are present in the request with the same values (or based on
|
||||||
// presence if the *value* field is not in the config).
|
// presence if the ``value`` field is not in the config).
|
||||||
repeated config.route.v3.HeaderMatcher headers = 4;
|
repeated config.route.v3.HeaderMatcher headers = 4;
|
||||||
|
|
||||||
// Faults are injected for the specified list of downstream hosts. If this
|
// Faults are injected for the specified list of downstream hosts. If this
|
||||||
|
|
@ -96,9 +96,9 @@ message HTTPFault {
|
||||||
// filter. Note that because this setting can be overridden at the route level, it's possible
|
// filter. Note that because this setting can be overridden at the route level, it's possible
|
||||||
// for the number of active faults to be greater than this value (if injected via a different
|
// for the number of active faults to be greater than this value (if injected via a different
|
||||||
// route). If not specified, defaults to unlimited. This setting can be overridden via
|
// route). If not specified, defaults to unlimited. This setting can be overridden via
|
||||||
// `runtime <config_http_filters_fault_injection_runtime>` and any faults that are not injected
|
// ``runtime <config_http_filters_fault_injection_runtime>`` and any faults that are not injected
|
||||||
// due to overflow will be indicated via the `faults_overflow
|
// due to overflow will be indicated via the ``faults_overflow
|
||||||
// <config_http_filters_fault_injection_stats>` stat.
|
// <config_http_filters_fault_injection_stats>`` stat.
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
// Like other :ref:`circuit breakers <arch_overview_circuit_break>` in Envoy, this is a fuzzy
|
// Like other :ref:`circuit breakers <arch_overview_circuit_break>` in Envoy, this is a fuzzy
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,10 @@ package envoy.extensions.filters.http.rbac.v3;
|
||||||
|
|
||||||
import "envoy/config/rbac/v3/rbac.proto";
|
import "envoy/config/rbac/v3/rbac.proto";
|
||||||
|
|
||||||
|
import "xds/annotations/v3/status.proto";
|
||||||
|
import "xds/type/matcher/v3/matcher.proto";
|
||||||
|
|
||||||
|
import "udpa/annotations/migrate.proto";
|
||||||
import "udpa/annotations/status.proto";
|
import "udpa/annotations/status.proto";
|
||||||
import "udpa/annotations/versioning.proto";
|
import "udpa/annotations/versioning.proto";
|
||||||
|
|
||||||
|
|
@ -18,6 +22,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// [#extension: envoy.filters.http.rbac]
|
// [#extension: envoy.filters.http.rbac]
|
||||||
|
|
||||||
// RBAC filter config.
|
// RBAC filter config.
|
||||||
|
// [#next-free-field: 6]
|
||||||
message RBAC {
|
message RBAC {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.config.filter.http.rbac.v2.RBAC";
|
"envoy.config.filter.http.rbac.v2.RBAC";
|
||||||
|
|
@ -25,12 +30,33 @@ message RBAC {
|
||||||
// Specify the RBAC rules to be applied globally.
|
// Specify the RBAC rules to be applied globally.
|
||||||
// If absent, no enforcing RBAC policy will be applied.
|
// If absent, no enforcing RBAC policy will be applied.
|
||||||
// If present and empty, DENY.
|
// If present and empty, DENY.
|
||||||
config.rbac.v3.RBAC rules = 1;
|
// If both rules and matcher are configured, rules will be ignored.
|
||||||
|
config.rbac.v3.RBAC rules = 1
|
||||||
|
[(udpa.annotations.field_migrate).oneof_promotion = "rules_specifier"];
|
||||||
|
|
||||||
|
// The match tree to use when resolving RBAC action for incoming requests. Requests do not
|
||||||
|
// match any matcher will be denied.
|
||||||
|
// If absent, no enforcing RBAC matcher will be applied.
|
||||||
|
// If present and empty, deny all requests.
|
||||||
|
xds.type.matcher.v3.Matcher matcher = 4 [
|
||||||
|
(udpa.annotations.field_migrate).oneof_promotion = "rules_specifier",
|
||||||
|
(xds.annotations.v3.field_status).work_in_progress = true
|
||||||
|
];
|
||||||
|
|
||||||
// Shadow rules are not enforced by the filter (i.e., returning a 403)
|
// Shadow rules are not enforced by the filter (i.e., returning a 403)
|
||||||
// but will emit stats and logs and can be used for rule testing.
|
// but will emit stats and logs and can be used for rule testing.
|
||||||
// If absent, no shadow RBAC policy will be applied.
|
// If absent, no shadow RBAC policy will be applied.
|
||||||
config.rbac.v3.RBAC shadow_rules = 2;
|
// If both shadow rules and shadow matcher are configured, shadow rules will be ignored.
|
||||||
|
config.rbac.v3.RBAC shadow_rules = 2
|
||||||
|
[(udpa.annotations.field_migrate).oneof_promotion = "shadow_rules_specifier"];
|
||||||
|
|
||||||
|
// The match tree to use for emitting stats and logs which can be used for rule testing for
|
||||||
|
// incoming requests.
|
||||||
|
// If absent, no shadow matcher will be applied.
|
||||||
|
xds.type.matcher.v3.Matcher shadow_matcher = 5 [
|
||||||
|
(udpa.annotations.field_migrate).oneof_promotion = "shadow_rules_specifier",
|
||||||
|
(xds.annotations.v3.field_status).work_in_progress = true
|
||||||
|
];
|
||||||
|
|
||||||
// If specified, shadow rules will emit stats with the given prefix.
|
// If specified, shadow rules will emit stats with the given prefix.
|
||||||
// This is useful to distinguish the stat when there are more than 1 RBAC filter configured with
|
// This is useful to distinguish the stat when there are more than 1 RBAC filter configured with
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ syntax = "proto3";
|
||||||
package envoy.extensions.filters.http.router.v3;
|
package envoy.extensions.filters.http.router.v3;
|
||||||
|
|
||||||
import "envoy/config/accesslog/v3/accesslog.proto";
|
import "envoy/config/accesslog/v3/accesslog.proto";
|
||||||
|
import "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto";
|
||||||
|
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
|
@ -20,7 +21,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// Router :ref:`configuration overview <config_http_filters_router>`.
|
// Router :ref:`configuration overview <config_http_filters_router>`.
|
||||||
// [#extension: envoy.filters.http.router]
|
// [#extension: envoy.filters.http.router]
|
||||||
|
|
||||||
// [#next-free-field: 8]
|
// [#next-free-field: 9]
|
||||||
message Router {
|
message Router {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.config.filter.http.router.v2.Router";
|
"envoy.config.filter.http.router.v2.Router";
|
||||||
|
|
@ -41,10 +42,10 @@ message Router {
|
||||||
// requests may be made for each downstream (inbound) request.
|
// requests may be made for each downstream (inbound) request.
|
||||||
repeated config.accesslog.v3.AccessLog upstream_log = 3;
|
repeated config.accesslog.v3.AccessLog upstream_log = 3;
|
||||||
|
|
||||||
// Do not add any additional *x-envoy-* headers to requests or responses. This
|
// Do not add any additional ``x-envoy-`` headers to requests or responses. This
|
||||||
// only affects the :ref:`router filter generated *x-envoy-* headers
|
// only affects the :ref:`router filter generated x-envoy- headers
|
||||||
// <config_http_filters_router_headers_set>`, other Envoy filters and the HTTP
|
// <config_http_filters_router_headers_set>`, other Envoy filters and the HTTP
|
||||||
// connection manager may continue to set *x-envoy-* headers.
|
// connection manager may continue to set ``x-envoy-`` headers.
|
||||||
bool suppress_envoy_headers = 4;
|
bool suppress_envoy_headers = 4;
|
||||||
|
|
||||||
// Specifies a list of HTTP headers to strictly validate. Envoy will reject a
|
// Specifies a list of HTTP headers to strictly validate. Envoy will reject a
|
||||||
|
|
@ -89,4 +90,20 @@ message Router {
|
||||||
// :ref:`gRPC stats filter<config_http_filters_grpc_stats>` documentation
|
// :ref:`gRPC stats filter<config_http_filters_grpc_stats>` documentation
|
||||||
// for more details.
|
// for more details.
|
||||||
bool suppress_grpc_request_failure_code_stats = 7;
|
bool suppress_grpc_request_failure_code_stats = 7;
|
||||||
|
|
||||||
|
// .. note::
|
||||||
|
// Upstream HTTP filters are currently in alpha.
|
||||||
|
//
|
||||||
|
// Optional HTTP filters for the upstream filter chain.
|
||||||
|
//
|
||||||
|
// These filters will be applied for all requests that pass through the router.
|
||||||
|
// They will also be applied to shadowed requests.
|
||||||
|
// Upstream filters cannot change route or cluster.
|
||||||
|
// Upstream filters specified on the cluster will override these filters.
|
||||||
|
//
|
||||||
|
// If using upstream filters, please be aware that local errors sent by
|
||||||
|
// upstream filters will not trigger retries, and local errors sent by
|
||||||
|
// upstream filters will count as a final response if hedging is configured.
|
||||||
|
// [#extension-category: envoy.filters.http.upstream]
|
||||||
|
repeated network.http_connection_manager.v3.HttpFilter upstream_http_filters = 8;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// HTTP connection manager :ref:`configuration overview <config_http_conn_man>`.
|
// HTTP connection manager :ref:`configuration overview <config_http_conn_man>`.
|
||||||
// [#extension: envoy.filters.network.http_connection_manager]
|
// [#extension: envoy.filters.network.http_connection_manager]
|
||||||
|
|
||||||
// [#next-free-field: 50]
|
// [#next-free-field: 53]
|
||||||
message HttpConnectionManager {
|
message HttpConnectionManager {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager";
|
"envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager";
|
||||||
|
|
@ -187,7 +187,7 @@ message HttpConnectionManager {
|
||||||
// If not specified, no tracing will be performed.
|
// If not specified, no tracing will be performed.
|
||||||
//
|
//
|
||||||
// .. attention::
|
// .. attention::
|
||||||
// Please be aware that *envoy.tracers.opencensus* provider can only be configured once
|
// Please be aware that ``envoy.tracers.opencensus`` provider can only be configured once
|
||||||
// in Envoy lifetime.
|
// in Envoy lifetime.
|
||||||
// Any attempts to reconfigure it or to use different configurations for different HCM filters
|
// Any attempts to reconfigure it or to use different configurations for different HCM filters
|
||||||
// will be rejected.
|
// will be rejected.
|
||||||
|
|
@ -280,13 +280,13 @@ message HttpConnectionManager {
|
||||||
// path will be visible internally if a transformation is enabled. Any path rewrites that the
|
// path will be visible internally if a transformation is enabled. Any path rewrites that the
|
||||||
// router performs (e.g. :ref:`regex_rewrite
|
// router performs (e.g. :ref:`regex_rewrite
|
||||||
// <envoy_v3_api_field_config.route.v3.RouteAction.regex_rewrite>` or :ref:`prefix_rewrite
|
// <envoy_v3_api_field_config.route.v3.RouteAction.regex_rewrite>` or :ref:`prefix_rewrite
|
||||||
// <envoy_v3_api_field_config.route.v3.RouteAction.prefix_rewrite>`) will apply to the *:path* header
|
// <envoy_v3_api_field_config.route.v3.RouteAction.prefix_rewrite>`) will apply to the ``:path`` header
|
||||||
// destined for the upstream.
|
// destined for the upstream.
|
||||||
//
|
//
|
||||||
// Note: access logging and tracing will show the original *:path* header.
|
// Note: access logging and tracing will show the original ``:path`` header.
|
||||||
message PathNormalizationOptions {
|
message PathNormalizationOptions {
|
||||||
// [#not-implemented-hide:] Normalization applies internally before any processing of requests by
|
// [#not-implemented-hide:] Normalization applies internally before any processing of requests by
|
||||||
// HTTP filters, routing, and matching *and* will affect the forwarded *:path* header. Defaults
|
// HTTP filters, routing, and matching *and* will affect the forwarded ``:path`` header. Defaults
|
||||||
// to :ref:`NormalizePathRFC3986
|
// to :ref:`NormalizePathRFC3986
|
||||||
// <envoy_v3_api_msg_type.http.v3.PathTransformation.Operation.NormalizePathRFC3986>`. When not
|
// <envoy_v3_api_msg_type.http.v3.PathTransformation.Operation.NormalizePathRFC3986>`. When not
|
||||||
// specified, this value may be overridden by the runtime variable
|
// specified, this value may be overridden by the runtime variable
|
||||||
|
|
@ -297,7 +297,7 @@ message HttpConnectionManager {
|
||||||
|
|
||||||
// [#not-implemented-hide:] Normalization only applies internally before any processing of
|
// [#not-implemented-hide:] Normalization only applies internally before any processing of
|
||||||
// requests by HTTP filters, routing, and matching. These will be applied after full
|
// requests by HTTP filters, routing, and matching. These will be applied after full
|
||||||
// transformation is applied. The *:path* header before this transformation will be restored in
|
// transformation is applied. The ``:path`` header before this transformation will be restored in
|
||||||
// the router filter and sent upstream unless it was mutated by a filter. Defaults to no
|
// the router filter and sent upstream unless it was mutated by a filter. Defaults to no
|
||||||
// transformations.
|
// transformations.
|
||||||
// Multiple actions can be applied in the same Transformation, forming a sequential
|
// Multiple actions can be applied in the same Transformation, forming a sequential
|
||||||
|
|
@ -320,36 +320,36 @@ message HttpConnectionManager {
|
||||||
// [#next-free-field: 7]
|
// [#next-free-field: 7]
|
||||||
message ProxyStatusConfig {
|
message ProxyStatusConfig {
|
||||||
// If true, the details field of the Proxy-Status header is not populated with stream_info.response_code_details.
|
// If true, the details field of the Proxy-Status header is not populated with stream_info.response_code_details.
|
||||||
// This value defaults to `false`, i.e. the `details` field is populated by default.
|
// This value defaults to ``false``, i.e. the ``details`` field is populated by default.
|
||||||
bool remove_details = 1;
|
bool remove_details = 1;
|
||||||
|
|
||||||
// If true, the details field of the Proxy-Status header will not contain
|
// If true, the details field of the Proxy-Status header will not contain
|
||||||
// connection termination details. This value defaults to `false`, i.e. the
|
// connection termination details. This value defaults to ``false``, i.e. the
|
||||||
// `details` field will contain connection termination details by default.
|
// ``details`` field will contain connection termination details by default.
|
||||||
bool remove_connection_termination_details = 2;
|
bool remove_connection_termination_details = 2;
|
||||||
|
|
||||||
// If true, the details field of the Proxy-Status header will not contain an
|
// If true, the details field of the Proxy-Status header will not contain an
|
||||||
// enumeration of the Envoy ResponseFlags. This value defaults to `false`,
|
// enumeration of the Envoy ResponseFlags. This value defaults to ``false``,
|
||||||
// i.e. the `details` field will contain a list of ResponseFlags by default.
|
// i.e. the ``details`` field will contain a list of ResponseFlags by default.
|
||||||
bool remove_response_flags = 3;
|
bool remove_response_flags = 3;
|
||||||
|
|
||||||
// If true, overwrites the existing Status header with the response code
|
// If true, overwrites the existing Status header with the response code
|
||||||
// recommended by the Proxy-Status spec.
|
// recommended by the Proxy-Status spec.
|
||||||
// This value defaults to `false`, i.e. the HTTP response code is not
|
// This value defaults to ``false``, i.e. the HTTP response code is not
|
||||||
// overwritten.
|
// overwritten.
|
||||||
bool set_recommended_response_code = 4;
|
bool set_recommended_response_code = 4;
|
||||||
|
|
||||||
// The name of the proxy as it appears at the start of the Proxy-Status
|
// The name of the proxy as it appears at the start of the Proxy-Status
|
||||||
// header.
|
// header.
|
||||||
//
|
//
|
||||||
// If neither of these values are set, this value defaults to `server_name`,
|
// If neither of these values are set, this value defaults to ``server_name``,
|
||||||
// which itself defaults to "envoy".
|
// which itself defaults to "envoy".
|
||||||
oneof proxy_name {
|
oneof proxy_name {
|
||||||
// If `use_node_id` is set, Proxy-Status headers will use the Envoy's node
|
// If ``use_node_id`` is set, Proxy-Status headers will use the Envoy's node
|
||||||
// ID as the name of the proxy.
|
// ID as the name of the proxy.
|
||||||
bool use_node_id = 5;
|
bool use_node_id = 5;
|
||||||
|
|
||||||
// If `literal_proxy_name` is set, Proxy-Status headers will use this
|
// If ``literal_proxy_name`` is set, Proxy-Status headers will use this
|
||||||
// value as the name of the proxy.
|
// value as the name of the proxy.
|
||||||
string literal_proxy_name = 6;
|
string literal_proxy_name = 6;
|
||||||
}
|
}
|
||||||
|
|
@ -403,6 +403,10 @@ message HttpConnectionManager {
|
||||||
[(udpa.annotations.security).configure_for_untrusted_downstream = true];
|
[(udpa.annotations.security).configure_for_untrusted_downstream = true];
|
||||||
|
|
||||||
// Additional HTTP/1 settings that are passed to the HTTP/1 codec.
|
// Additional HTTP/1 settings that are passed to the HTTP/1 codec.
|
||||||
|
// [#comment:TODO: The following fields are ignored when the
|
||||||
|
// :ref:`header validation configuration <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.typed_header_validation_config>`
|
||||||
|
// is present:
|
||||||
|
// 1. :ref:`allow_chunked_length <envoy_v3_api_field_config.core.v3.Http1ProtocolOptions.allow_chunked_length>`]
|
||||||
config.core.v3.Http1ProtocolOptions http_protocol_options = 8;
|
config.core.v3.Http1ProtocolOptions http_protocol_options = 8;
|
||||||
|
|
||||||
// Additional HTTP/2 settings that are passed directly to the HTTP/2 codec.
|
// Additional HTTP/2 settings that are passed directly to the HTTP/2 codec.
|
||||||
|
|
@ -414,7 +418,7 @@ message HttpConnectionManager {
|
||||||
config.core.v3.Http3ProtocolOptions http3_protocol_options = 44;
|
config.core.v3.Http3ProtocolOptions http3_protocol_options = 44;
|
||||||
|
|
||||||
// An optional override that the connection manager will write to the server
|
// An optional override that the connection manager will write to the server
|
||||||
// header in responses. If not set, the default is *envoy*.
|
// header in responses. If not set, the default is ``envoy``.
|
||||||
string server_name = 10
|
string server_name = 10
|
||||||
[(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
[(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
||||||
|
|
||||||
|
|
@ -575,6 +579,15 @@ message HttpConnectionManager {
|
||||||
// [#extension-category: envoy.http.original_ip_detection]
|
// [#extension-category: envoy.http.original_ip_detection]
|
||||||
repeated config.core.v3.TypedExtensionConfig original_ip_detection_extensions = 46;
|
repeated config.core.v3.TypedExtensionConfig original_ip_detection_extensions = 46;
|
||||||
|
|
||||||
|
// The configuration for the early header mutation extensions.
|
||||||
|
//
|
||||||
|
// When configured the extensions will be called before any routing, tracing, or any filter processing.
|
||||||
|
// Each extension will be applied in the order they are configured.
|
||||||
|
// If the same header is mutated by multiple extensions, then the last extension will win.
|
||||||
|
//
|
||||||
|
// [#extension-category: envoy.http.early_header_mutation]
|
||||||
|
repeated config.core.v3.TypedExtensionConfig early_header_mutation_extensions = 52;
|
||||||
|
|
||||||
// Configures what network addresses are considered internal for stats and header sanitation
|
// Configures what network addresses are considered internal for stats and header sanitation
|
||||||
// purposes. If unspecified, only RFC1918 IP addresses will be considered internal.
|
// purposes. If unspecified, only RFC1918 IP addresses will be considered internal.
|
||||||
// See the documentation for :ref:`config_http_conn_man_headers_x-envoy-internal` for more
|
// See the documentation for :ref:`config_http_conn_man_headers_x-envoy-internal` for more
|
||||||
|
|
@ -587,7 +600,7 @@ message HttpConnectionManager {
|
||||||
// has mutated the request headers. While :ref:`use_remote_address
|
// has mutated the request headers. While :ref:`use_remote_address
|
||||||
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.use_remote_address>`
|
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.use_remote_address>`
|
||||||
// will also suppress XFF addition, it has consequences for logging and other
|
// will also suppress XFF addition, it has consequences for logging and other
|
||||||
// Envoy uses of the remote address, so *skip_xff_append* should be used
|
// Envoy uses of the remote address, so ``skip_xff_append`` should be used
|
||||||
// when only an elision of XFF addition is intended.
|
// when only an elision of XFF addition is intended.
|
||||||
bool skip_xff_append = 21;
|
bool skip_xff_append = 21;
|
||||||
|
|
||||||
|
|
@ -621,8 +634,8 @@ message HttpConnectionManager {
|
||||||
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.forward_client_cert_details>`
|
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.forward_client_cert_details>`
|
||||||
// is APPEND_FORWARD or SANITIZE_SET and the client connection is mTLS. It specifies the fields in
|
// is APPEND_FORWARD or SANITIZE_SET and the client connection is mTLS. It specifies the fields in
|
||||||
// the client certificate to be forwarded. Note that in the
|
// the client certificate to be forwarded. Note that in the
|
||||||
// :ref:`config_http_conn_man_headers_x-forwarded-client-cert` header, *Hash* is always set, and
|
// :ref:`config_http_conn_man_headers_x-forwarded-client-cert` header, ``Hash`` is always set, and
|
||||||
// *By* is always set when the client certificate presents the URI type Subject Alternative Name
|
// ``By`` is always set when the client certificate presents the URI type Subject Alternative Name
|
||||||
// value.
|
// value.
|
||||||
SetCurrentClientCertDetails set_current_client_cert_details = 17;
|
SetCurrentClientCertDetails set_current_client_cert_details = 17;
|
||||||
|
|
||||||
|
|
@ -636,7 +649,7 @@ message HttpConnectionManager {
|
||||||
// :ref:`use_remote_address
|
// :ref:`use_remote_address
|
||||||
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.use_remote_address>`
|
// <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.use_remote_address>`
|
||||||
// is true and represent_ipv4_remote_address_as_ipv4_mapped_ipv6 is true and the remote address is
|
// is true and represent_ipv4_remote_address_as_ipv4_mapped_ipv6 is true and the remote address is
|
||||||
// an IPv4 address, the address will be mapped to IPv6 before it is appended to *x-forwarded-for*.
|
// an IPv4 address, the address will be mapped to IPv6 before it is appended to ``x-forwarded-for``.
|
||||||
// This is useful for testing compatibility of upstream services that parse the header value. For
|
// This is useful for testing compatibility of upstream services that parse the header value. For
|
||||||
// example, 50.0.0.1 is represented as ::FFFF:50.0.0.1. See `IPv4-Mapped IPv6 Addresses
|
// example, 50.0.0.1 is represented as ::FFFF:50.0.0.1. See `IPv4-Mapped IPv6 Addresses
|
||||||
// <https://tools.ietf.org/html/rfc4291#section-2.5.5.2>`_ for details. This will also affect the
|
// <https://tools.ietf.org/html/rfc4291#section-2.5.5.2>`_ for details. This will also affect the
|
||||||
|
|
@ -650,7 +663,7 @@ message HttpConnectionManager {
|
||||||
repeated UpgradeConfig upgrade_configs = 23;
|
repeated UpgradeConfig upgrade_configs = 23;
|
||||||
|
|
||||||
// Should paths be normalized according to RFC 3986 before any processing of
|
// Should paths be normalized according to RFC 3986 before any processing of
|
||||||
// requests by HTTP filters or routing? This affects the upstream *:path* header
|
// requests by HTTP filters or routing? This affects the upstream ``:path`` header
|
||||||
// as well. For paths that fail this check, Envoy will respond with 400 to
|
// as well. For paths that fail this check, Envoy will respond with 400 to
|
||||||
// paths that are malformed. This defaults to false currently but will default
|
// paths that are malformed. This defaults to false currently but will default
|
||||||
// true in the future. When not specified, this value may be overridden by the
|
// true in the future. When not specified, this value may be overridden by the
|
||||||
|
|
@ -660,13 +673,19 @@ message HttpConnectionManager {
|
||||||
// for details of normalization.
|
// for details of normalization.
|
||||||
// Note that Envoy does not perform
|
// Note that Envoy does not perform
|
||||||
// `case normalization <https://tools.ietf.org/html/rfc3986#section-6.2.2.1>`_
|
// `case normalization <https://tools.ietf.org/html/rfc3986#section-6.2.2.1>`_
|
||||||
|
// [#comment:TODO: This field is ignored when the
|
||||||
|
// :ref:`header validation configuration <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.typed_header_validation_config>`
|
||||||
|
// is present.]
|
||||||
google.protobuf.BoolValue normalize_path = 30;
|
google.protobuf.BoolValue normalize_path = 30;
|
||||||
|
|
||||||
// Determines if adjacent slashes in the path are merged into one before any processing of
|
// Determines if adjacent slashes in the path are merged into one before any processing of
|
||||||
// requests by HTTP filters or routing. This affects the upstream *:path* header as well. Without
|
// requests by HTTP filters or routing. This affects the upstream ``:path`` header as well. Without
|
||||||
// setting this option, incoming requests with path `//dir///file` will not match against route
|
// setting this option, incoming requests with path ``//dir///file`` will not match against route
|
||||||
// with `prefix` match set to `/dir`. Defaults to `false`. Note that slash merging is not part of
|
// with ``prefix`` match set to ``/dir``. Defaults to ``false``. Note that slash merging is not part of
|
||||||
// `HTTP spec <https://tools.ietf.org/html/rfc3986>`_ and is provided for convenience.
|
// `HTTP spec <https://tools.ietf.org/html/rfc3986>`_ and is provided for convenience.
|
||||||
|
// [#comment:TODO: This field is ignored when the
|
||||||
|
// :ref:`header validation configuration <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.typed_header_validation_config>`
|
||||||
|
// is present.]
|
||||||
bool merge_slashes = 33;
|
bool merge_slashes = 33;
|
||||||
|
|
||||||
// Action to take when request URL path contains escaped slash sequences (%2F, %2f, %5C and %5c).
|
// Action to take when request URL path contains escaped slash sequences (%2F, %2f, %5C and %5c).
|
||||||
|
|
@ -674,6 +693,9 @@ message HttpConnectionManager {
|
||||||
// runtime variable.
|
// runtime variable.
|
||||||
// The :ref:`http_connection_manager.path_with_escaped_slashes_action_sampling<config_http_conn_man_runtime_path_with_escaped_slashes_action_enabled>` runtime
|
// The :ref:`http_connection_manager.path_with_escaped_slashes_action_sampling<config_http_conn_man_runtime_path_with_escaped_slashes_action_enabled>` runtime
|
||||||
// variable can be used to apply the action to a portion of all requests.
|
// variable can be used to apply the action to a portion of all requests.
|
||||||
|
// [#comment:TODO: This field is ignored when the
|
||||||
|
// :ref:`header validation configuration <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.typed_header_validation_config>`
|
||||||
|
// is present.]
|
||||||
PathWithEscapedSlashesAction path_with_escaped_slashes_action = 45;
|
PathWithEscapedSlashesAction path_with_escaped_slashes_action = 45;
|
||||||
|
|
||||||
// The configuration of the request ID extension. This includes operations such as
|
// The configuration of the request ID extension. This includes operations such as
|
||||||
|
|
@ -704,10 +726,10 @@ message HttpConnectionManager {
|
||||||
// local port. This affects the upstream host header unless the method is
|
// local port. This affects the upstream host header unless the method is
|
||||||
// CONNECT in which case if no filter adds a port the original port will be restored before headers are
|
// CONNECT in which case if no filter adds a port the original port will be restored before headers are
|
||||||
// sent upstream.
|
// sent upstream.
|
||||||
// Without setting this option, incoming requests with host `example:443` will not match against
|
// Without setting this option, incoming requests with host ``example:443`` will not match against
|
||||||
// route with :ref:`domains<envoy_v3_api_field_config.route.v3.VirtualHost.domains>` match set to `example`. Defaults to `false`. Note that port removal is not part
|
// route with :ref:`domains<envoy_v3_api_field_config.route.v3.VirtualHost.domains>` match set to ``example``. Defaults to ``false``. Note that port removal is not part
|
||||||
// of `HTTP spec <https://tools.ietf.org/html/rfc3986>`_ and is provided for convenience.
|
// of `HTTP spec <https://tools.ietf.org/html/rfc3986>`_ and is provided for convenience.
|
||||||
// Only one of `strip_matching_host_port` or `strip_any_host_port` can be set.
|
// Only one of ``strip_matching_host_port`` or ``strip_any_host_port`` can be set.
|
||||||
bool strip_matching_host_port = 39
|
bool strip_matching_host_port = 39
|
||||||
[(udpa.annotations.field_migrate).oneof_promotion = "strip_port_mode"];
|
[(udpa.annotations.field_migrate).oneof_promotion = "strip_port_mode"];
|
||||||
|
|
||||||
|
|
@ -716,10 +738,10 @@ message HttpConnectionManager {
|
||||||
// of request by HTTP filters or routing.
|
// of request by HTTP filters or routing.
|
||||||
// This affects the upstream host header unless the method is CONNECT in
|
// This affects the upstream host header unless the method is CONNECT in
|
||||||
// which case if no filter adds a port the original port will be restored before headers are sent upstream.
|
// which case if no filter adds a port the original port will be restored before headers are sent upstream.
|
||||||
// Without setting this option, incoming requests with host `example:443` will not match against
|
// Without setting this option, incoming requests with host ``example:443`` will not match against
|
||||||
// route with :ref:`domains<envoy_v3_api_field_config.route.v3.VirtualHost.domains>` match set to `example`. Defaults to `false`. Note that port removal is not part
|
// route with :ref:`domains<envoy_v3_api_field_config.route.v3.VirtualHost.domains>` match set to ``example``. Defaults to ``false``. Note that port removal is not part
|
||||||
// of `HTTP spec <https://tools.ietf.org/html/rfc3986>`_ and is provided for convenience.
|
// of `HTTP spec <https://tools.ietf.org/html/rfc3986>`_ and is provided for convenience.
|
||||||
// Only one of `strip_matching_host_port` or `strip_any_host_port` can be set.
|
// Only one of ``strip_matching_host_port`` or ``strip_any_host_port`` can be set.
|
||||||
bool strip_any_host_port = 42;
|
bool strip_any_host_port = 42;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -737,14 +759,14 @@ message HttpConnectionManager {
|
||||||
// <envoy_v3_api_field_config.core.v3.Http1ProtocolOptions.override_stream_error_on_invalid_http_message>` or the new HTTP/2 option
|
// <envoy_v3_api_field_config.core.v3.Http1ProtocolOptions.override_stream_error_on_invalid_http_message>` or the new HTTP/2 option
|
||||||
// :ref:`override_stream_error_on_invalid_http_message
|
// :ref:`override_stream_error_on_invalid_http_message
|
||||||
// <envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.override_stream_error_on_invalid_http_message>`
|
// <envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.override_stream_error_on_invalid_http_message>`
|
||||||
// *not* the deprecated but similarly named :ref:`stream_error_on_invalid_http_messaging
|
// ``not`` the deprecated but similarly named :ref:`stream_error_on_invalid_http_messaging
|
||||||
// <envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.stream_error_on_invalid_http_messaging>`
|
// <envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.stream_error_on_invalid_http_messaging>`
|
||||||
google.protobuf.BoolValue stream_error_on_invalid_http_message = 40;
|
google.protobuf.BoolValue stream_error_on_invalid_http_message = 40;
|
||||||
|
|
||||||
// [#not-implemented-hide:] Path normalization configuration. This includes
|
// [#not-implemented-hide:] Path normalization configuration. This includes
|
||||||
// configurations for transformations (e.g. RFC 3986 normalization or merge
|
// configurations for transformations (e.g. RFC 3986 normalization or merge
|
||||||
// adjacent slashes) and the policy to apply them. The policy determines
|
// adjacent slashes) and the policy to apply them. The policy determines
|
||||||
// whether transformations affect the forwarded *:path* header. RFC 3986 path
|
// whether transformations affect the forwarded ``:path`` header. RFC 3986 path
|
||||||
// normalization is enabled by default and the default policy is that the
|
// normalization is enabled by default and the default policy is that the
|
||||||
// normalized header will be forwarded. See :ref:`PathNormalizationOptions
|
// normalized header will be forwarded. See :ref:`PathNormalizationOptions
|
||||||
// <envoy_v3_api_msg_extensions.filters.network.http_connection_manager.v3.PathNormalizationOptions>`
|
// <envoy_v3_api_msg_extensions.filters.network.http_connection_manager.v3.PathNormalizationOptions>`
|
||||||
|
|
@ -754,17 +776,45 @@ message HttpConnectionManager {
|
||||||
// Determines if trailing dot of the host should be removed from host/authority header before any
|
// Determines if trailing dot of the host should be removed from host/authority header before any
|
||||||
// processing of request by HTTP filters or routing.
|
// processing of request by HTTP filters or routing.
|
||||||
// This affects the upstream host header.
|
// This affects the upstream host header.
|
||||||
// Without setting this option, incoming requests with host `example.com.` will not match against
|
// Without setting this option, incoming requests with host ``example.com.`` will not match against
|
||||||
// route with :ref:`domains<envoy_v3_api_field_config.route.v3.VirtualHost.domains>` match set to `example.com`. Defaults to `false`.
|
// route with :ref:`domains<envoy_v3_api_field_config.route.v3.VirtualHost.domains>` match set to ``example.com``. Defaults to ``false``.
|
||||||
// When the incoming request contains a host/authority header that includes a port number,
|
// When the incoming request contains a host/authority header that includes a port number,
|
||||||
// setting this option will strip a trailing dot, if present, from the host section,
|
// setting this option will strip a trailing dot, if present, from the host section,
|
||||||
// leaving the port as is (e.g. host value `example.com.:443` will be updated to `example.com:443`).
|
// leaving the port as is (e.g. host value ``example.com.:443`` will be updated to ``example.com:443``).
|
||||||
bool strip_trailing_host_dot = 47;
|
bool strip_trailing_host_dot = 47;
|
||||||
|
|
||||||
// Proxy-Status HTTP response header configuration.
|
// Proxy-Status HTTP response header configuration.
|
||||||
// If this config is set, the Proxy-Status HTTP response header field is
|
// If this config is set, the Proxy-Status HTTP response header field is
|
||||||
// populated. By default, it is not.
|
// populated. By default, it is not.
|
||||||
ProxyStatusConfig proxy_status_config = 49;
|
ProxyStatusConfig proxy_status_config = 49;
|
||||||
|
|
||||||
|
// Configuration options for Header Validation (UHV).
|
||||||
|
// UHV is an extensible mechanism for checking validity of HTTP requests as well as providing
|
||||||
|
// normalization for request attributes, such as URI path.
|
||||||
|
// If the typed_header_validation_config is present it overrides the following options:
|
||||||
|
// ``normalize_path``, ``merge_slashes``, ``path_with_escaped_slashes_action``
|
||||||
|
// ``http_protocol_options.allow_chunked_length``, ``common_http_protocol_options.headers_with_underscores_action``.
|
||||||
|
//
|
||||||
|
// The default UHV checks the following:
|
||||||
|
//
|
||||||
|
// #. HTTP/1 header map validity according to `RFC 7230 section 3.2<https://datatracker.ietf.org/doc/html/rfc7230#section-3.2>`_
|
||||||
|
// #. Syntax of HTTP/1 request target URI and response status
|
||||||
|
// #. HTTP/2 header map validity according to `RFC 7540 section 8.1.2<https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2`_
|
||||||
|
// #. Syntax of HTTP/2 pseudo headers
|
||||||
|
// #. HTTP/3 header map validity according to `RFC 9114 section 4.3 <https://www.rfc-editor.org/rfc/rfc9114.html>`_
|
||||||
|
// #. Syntax of HTTP/3 pseudo headers
|
||||||
|
// #. Syntax of ``Content-Length`` and ``Transfer-Encoding``
|
||||||
|
// #. Validation of HTTP/1 requests with both ``Content-Length`` and ``Transfer-Encoding`` headers
|
||||||
|
// #. Normalization of the URI path according to `Normalization and Comparison <https://datatracker.ietf.org/doc/html/rfc3986#section-6>`_
|
||||||
|
// without `case normalization <https://datatracker.ietf.org/doc/html/rfc3986#section-6.2.2.1>`_
|
||||||
|
//
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
// [#extension-category: envoy.http.header_validators]
|
||||||
|
config.core.v3.TypedExtensionConfig typed_header_validation_config = 50;
|
||||||
|
|
||||||
|
// Append the `x-forwarded-port` header with the port value client used to connect to Envoy. It
|
||||||
|
// will be ignored if the `x-forwarded-port` header has been set by any trusted proxy in front of Envoy.
|
||||||
|
bool append_x_forwarded_port = 51;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The configuration to customize local reply returned by Envoy.
|
// The configuration to customize local reply returned by Envoy.
|
||||||
|
|
@ -823,11 +873,11 @@ message ResponseMapper {
|
||||||
// The new response status code if specified.
|
// The new response status code if specified.
|
||||||
google.protobuf.UInt32Value status_code = 2 [(validate.rules).uint32 = {lt: 600 gte: 200}];
|
google.protobuf.UInt32Value status_code = 2 [(validate.rules).uint32 = {lt: 600 gte: 200}];
|
||||||
|
|
||||||
// The new local reply body text if specified. It will be used in the `%LOCAL_REPLY_BODY%`
|
// The new local reply body text if specified. It will be used in the ``%LOCAL_REPLY_BODY%``
|
||||||
// command operator in the `body_format`.
|
// command operator in the ``body_format``.
|
||||||
config.core.v3.DataSource body = 3;
|
config.core.v3.DataSource body = 3;
|
||||||
|
|
||||||
// A per mapper `body_format` to override the :ref:`body_format <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.LocalReplyConfig.body_format>`.
|
// A per mapper ``body_format`` to override the :ref:`body_format <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.LocalReplyConfig.body_format>`.
|
||||||
// It will be used when this mapper is matched.
|
// It will be used when this mapper is matched.
|
||||||
config.core.v3.SubstitutionFormatString body_format_override = 4;
|
config.core.v3.SubstitutionFormatString body_format_override = 4;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package envoy.extensions.load_balancing_policies.client_side_weighted_round_robin.v3;
|
||||||
|
|
||||||
|
import "google/protobuf/duration.proto";
|
||||||
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
import "udpa/annotations/status.proto";
|
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.extensions.load_balancing_policies.client_side_weighted_round_robin.v3";
|
||||||
|
option java_outer_classname = "ClientSideWeightedRoundRobinProto";
|
||||||
|
option java_multiple_files = true;
|
||||||
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3;client_side_weighted_round_robinv3";
|
||||||
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
|
// [#protodoc-title: Client-Side Weighted Round Robin Load Balancing Policy]
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
|
||||||
|
// Configuration for the client_side_weighted_round_robin LB policy.
|
||||||
|
//
|
||||||
|
// This policy differs from the built-in ROUND_ROBIN policy in terms of
|
||||||
|
// how the endpoint weights are determined. In the ROUND_ROBIN policy,
|
||||||
|
// the endpoint weights are sent by the control plane via EDS. However,
|
||||||
|
// in this policy, the endpoint weights are instead determined via
|
||||||
|
// qps and CPU utilization metrics sent by the endpoint using the Open
|
||||||
|
// Request Cost Aggregation (ORCA) protocol. The weight of a given endpoint
|
||||||
|
// is computed as qps / cpu_utilization.
|
||||||
|
//
|
||||||
|
// See the :ref:`load balancing architecture overview<arch_overview_load_balancing_types>` for more information.
|
||||||
|
//
|
||||||
|
// [#next-free-field: 6]
|
||||||
|
message ClientSideWeightedRoundRobin {
|
||||||
|
// Whether to enable out-of-band utilization reporting collection from
|
||||||
|
// the endpoints. By default, per-request utilization reporting is used.
|
||||||
|
google.protobuf.BoolValue enable_oob_load_report = 1;
|
||||||
|
|
||||||
|
// Load reporting interval to request from the server. Note that the
|
||||||
|
// server may not provide reports as frequently as the client requests.
|
||||||
|
// Used only when enable_oob_load_report is true. Default is 10 seconds.
|
||||||
|
google.protobuf.Duration oob_reporting_period = 2;
|
||||||
|
|
||||||
|
// A given endpoint must report load metrics continuously for at least
|
||||||
|
// this long before the endpoint weight will be used. This avoids
|
||||||
|
// churn when the set of endpoint addresses changes. Takes effect
|
||||||
|
// both immediately after we establish a connection to an endpoint and
|
||||||
|
// after weight_expiration_period has caused us to stop using the most
|
||||||
|
// recent load metrics. Default is 10 seconds.
|
||||||
|
google.protobuf.Duration blackout_period = 3;
|
||||||
|
|
||||||
|
// If a given endpoint has not reported load metrics in this long,
|
||||||
|
// then we stop using the reported weight. This ensures that we do
|
||||||
|
// not continue to use very stale weights. Once we stop using a stale
|
||||||
|
// value, if we later start seeing fresh reports again, the
|
||||||
|
// blackout_period applies. Defaults to 3 minutes.
|
||||||
|
google.protobuf.Duration weight_expiration_period = 4;
|
||||||
|
|
||||||
|
// How often endpoint weights are recalculated. Default is 1 second.
|
||||||
|
google.protobuf.Duration weight_update_period = 5;
|
||||||
|
}
|
||||||
114
xds/third_party/envoy/src/main/proto/envoy/extensions/load_balancing_policies/common/v3/common.proto
vendored
Normal file
114
xds/third_party/envoy/src/main/proto/envoy/extensions/load_balancing_policies/common/v3/common.proto
vendored
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package envoy.extensions.load_balancing_policies.common.v3;
|
||||||
|
|
||||||
|
import "envoy/config/core/v3/base.proto";
|
||||||
|
import "envoy/type/v3/percent.proto";
|
||||||
|
|
||||||
|
import "google/protobuf/duration.proto";
|
||||||
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
import "udpa/annotations/status.proto";
|
||||||
|
import "validate/validate.proto";
|
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.extensions.load_balancing_policies.common.v3";
|
||||||
|
option java_outer_classname = "CommonProto";
|
||||||
|
option java_multiple_files = true;
|
||||||
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/common/v3;commonv3";
|
||||||
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
|
// [#protodoc-title: Common configuration for two or more load balancing policy extensions]
|
||||||
|
|
||||||
|
message LocalityLbConfig {
|
||||||
|
// Configuration for :ref:`zone aware routing
|
||||||
|
// <arch_overview_load_balancing_zone_aware_routing>`.
|
||||||
|
message ZoneAwareLbConfig {
|
||||||
|
// Configures percentage of requests that will be considered for zone aware routing
|
||||||
|
// if zone aware routing is configured. If not specified, the default is 100%.
|
||||||
|
// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
|
||||||
|
// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
|
||||||
|
type.v3.Percent routing_enabled = 1;
|
||||||
|
|
||||||
|
// Configures minimum upstream cluster size required for zone aware routing
|
||||||
|
// If upstream cluster size is less than specified, zone aware routing is not performed
|
||||||
|
// even if zone aware routing is configured. If not specified, the default is 6.
|
||||||
|
// * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
|
||||||
|
// * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
|
||||||
|
google.protobuf.UInt64Value min_cluster_size = 2;
|
||||||
|
|
||||||
|
// If set to true, Envoy will not consider any hosts when the cluster is in :ref:`panic
|
||||||
|
// mode<arch_overview_load_balancing_panic_threshold>`. Instead, the cluster will fail all
|
||||||
|
// requests as if all hosts are unhealthy. This can help avoid potentially overwhelming a
|
||||||
|
// failing service.
|
||||||
|
bool fail_traffic_on_panic = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configuration for :ref:`locality weighted load balancing
|
||||||
|
// <arch_overview_load_balancing_locality_weighted_lb>`
|
||||||
|
message LocalityWeightedLbConfig {
|
||||||
|
}
|
||||||
|
|
||||||
|
oneof locality_config_specifier {
|
||||||
|
option (validate.required) = true;
|
||||||
|
|
||||||
|
// Configuration for local zone aware load balancing.
|
||||||
|
ZoneAwareLbConfig zone_aware_lb_config = 1;
|
||||||
|
|
||||||
|
// Enable locality weighted load balancing.
|
||||||
|
LocalityWeightedLbConfig locality_weighted_lb_config = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configuration for :ref:`slow start mode <arch_overview_load_balancing_slow_start>`.
|
||||||
|
message SlowStartConfig {
|
||||||
|
// Represents the size of slow start window.
|
||||||
|
// If set, the newly created host remains in slow start mode starting from its creation time
|
||||||
|
// for the duration of slow start window.
|
||||||
|
google.protobuf.Duration slow_start_window = 1;
|
||||||
|
|
||||||
|
// This parameter controls the speed of traffic increase over the slow start window. Defaults to 1.0,
|
||||||
|
// so that endpoint would get linearly increasing amount of traffic.
|
||||||
|
// When increasing the value for this parameter, the speed of traffic ramp-up increases non-linearly.
|
||||||
|
// The value of aggression parameter should be greater than 0.0.
|
||||||
|
// By tuning the parameter, is possible to achieve polynomial or exponential shape of ramp-up curve.
|
||||||
|
//
|
||||||
|
// During slow start window, effective weight of an endpoint would be scaled with time factor and aggression:
|
||||||
|
// ``new_weight = weight * max(min_weight_percent, time_factor ^ (1 / aggression))``,
|
||||||
|
// where ``time_factor=(time_since_start_seconds / slow_start_time_seconds)``.
|
||||||
|
//
|
||||||
|
// As time progresses, more and more traffic would be sent to endpoint, which is in slow start window.
|
||||||
|
// Once host exits slow start, time_factor and aggression no longer affect its weight.
|
||||||
|
config.core.v3.RuntimeDouble aggression = 2;
|
||||||
|
|
||||||
|
// Configures the minimum percentage of origin weight that avoids too small new weight,
|
||||||
|
// which may cause endpoints in slow start mode receive no traffic in slow start window.
|
||||||
|
// If not specified, the default is 10%.
|
||||||
|
type.v3.Percent min_weight_percent = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Common Configuration for all consistent hashing load balancers (MaglevLb, RingHashLb, etc.)
|
||||||
|
message ConsistentHashingLbConfig {
|
||||||
|
// If set to ``true``, the cluster will use hostname instead of the resolved
|
||||||
|
// 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.
|
||||||
|
bool use_hostname_for_hashing = 1;
|
||||||
|
|
||||||
|
// Configures percentage of average cluster load to bound per upstream host. For example, with a value of 150
|
||||||
|
// no upstream host will get a load more than 1.5 times the average load of all the hosts in the cluster.
|
||||||
|
// If not specified, the load is not bounded for any upstream host. Typical value for this parameter is between 120 and 200.
|
||||||
|
// Minimum is 100.
|
||||||
|
//
|
||||||
|
// Applies to both Ring Hash and Maglev load balancers.
|
||||||
|
//
|
||||||
|
// This is implemented based on the method described in the paper https://arxiv.org/abs/1608.01350. For the specified
|
||||||
|
// ``hash_balance_factor``, requests to any upstream host are capped at ``hash_balance_factor/100`` times the average number of requests
|
||||||
|
// across the cluster. When a request arrives for an upstream host that is currently serving at its max capacity, linear probing
|
||||||
|
// is used to identify an eligible host. Further, the linear probe is implemented using a random jump in hosts ring/table to identify
|
||||||
|
// the eligible host (this technique is as described in the paper https://arxiv.org/abs/1908.08762 - the random jump avoids the
|
||||||
|
// cascading overflow effect when choosing the next host in the ring/table).
|
||||||
|
//
|
||||||
|
// If weights are specified on the hosts, they are respected.
|
||||||
|
//
|
||||||
|
// This is an O(N) algorithm, unlike other load balancers. Using a lower ``hash_balance_factor`` results in more hosts
|
||||||
|
// being probed, so use a higher value if you require better performance.
|
||||||
|
google.protobuf.UInt32Value hash_balance_factor = 2 [(validate.rules).uint32 = {gte: 100}];
|
||||||
|
}
|
||||||
|
|
@ -2,8 +2,8 @@ syntax = "proto3";
|
||||||
|
|
||||||
package envoy.extensions.load_balancing_policies.least_request.v3;
|
package envoy.extensions.load_balancing_policies.least_request.v3;
|
||||||
|
|
||||||
import "envoy/config/cluster/v3/cluster.proto";
|
|
||||||
import "envoy/config/core/v3/base.proto";
|
import "envoy/config/core/v3/base.proto";
|
||||||
|
import "envoy/extensions/load_balancing_policies/common/v3/common.proto";
|
||||||
|
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
|
@ -17,11 +17,11 @@ option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/loa
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Least Request Load Balancing Policy]
|
// [#protodoc-title: Least Request Load Balancing Policy]
|
||||||
|
// [#extension: envoy.load_balancing_policies.least_request]
|
||||||
|
|
||||||
// This configuration allows the built-in LEAST_REQUEST LB policy to be configured via the LB policy
|
// This configuration allows the built-in LEAST_REQUEST LB policy to be configured via the LB policy
|
||||||
// extension point. See the :ref:`load balancing architecture overview
|
// extension point. See the :ref:`load balancing architecture overview
|
||||||
// <arch_overview_load_balancing_types>` for more information.
|
// <arch_overview_load_balancing_types>` for more information.
|
||||||
// [#extension: envoy.clusters.lb_policy]
|
|
||||||
message LeastRequest {
|
message LeastRequest {
|
||||||
// The number of random healthy hosts from which the host with the fewest active requests will
|
// The number of random healthy hosts from which the host with the fewest active requests will
|
||||||
// be chosen. Defaults to 2 so that we perform two-choice selection if the field is not set.
|
// be chosen. Defaults to 2 so that we perform two-choice selection if the field is not set.
|
||||||
|
|
@ -54,5 +54,8 @@ message LeastRequest {
|
||||||
|
|
||||||
// Configuration for slow start mode.
|
// Configuration for slow start mode.
|
||||||
// If this configuration is not set, slow start will not be not enabled.
|
// If this configuration is not set, slow start will not be not enabled.
|
||||||
config.cluster.v3.Cluster.SlowStartConfig slow_start_config = 3;
|
common.v3.SlowStartConfig slow_start_config = 3;
|
||||||
|
|
||||||
|
// Configuration for local zone aware load balancing or locality weighted load balancing.
|
||||||
|
common.v3.LocalityLbConfig locality_lb_config = 4;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,11 @@ syntax = "proto3";
|
||||||
|
|
||||||
package envoy.extensions.load_balancing_policies.ring_hash.v3;
|
package envoy.extensions.load_balancing_policies.ring_hash.v3;
|
||||||
|
|
||||||
|
import "envoy/extensions/load_balancing_policies/common/v3/common.proto";
|
||||||
|
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
import "envoy/annotations/deprecation.proto";
|
||||||
import "udpa/annotations/status.proto";
|
import "udpa/annotations/status.proto";
|
||||||
import "validate/validate.proto";
|
import "validate/validate.proto";
|
||||||
|
|
||||||
|
|
@ -14,12 +17,12 @@ option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/loa
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Ring Hash Load Balancing Policy]
|
// [#protodoc-title: Ring Hash Load Balancing Policy]
|
||||||
|
// [#extension: envoy.load_balancing_policies.ring_hash]
|
||||||
|
|
||||||
// This configuration allows the built-in RING_HASH LB policy to be configured via the LB policy
|
// This configuration allows the built-in RING_HASH LB policy to be configured via the LB policy
|
||||||
// extension point. See the :ref:`load balancing architecture overview
|
// extension point. See the :ref:`load balancing architecture overview
|
||||||
// <arch_overview_load_balancing_types>` for more information.
|
// <arch_overview_load_balancing_types>` for more information.
|
||||||
// [#extension: envoy.clusters.lb_policy]
|
// [#next-free-field: 8]
|
||||||
// [#next-free-field: 6]
|
|
||||||
message RingHash {
|
message RingHash {
|
||||||
// The hash function used to hash hosts onto the ketama ring.
|
// The hash function used to hash hosts onto the ketama ring.
|
||||||
enum HashFunction {
|
enum HashFunction {
|
||||||
|
|
@ -52,7 +55,12 @@ message RingHash {
|
||||||
|
|
||||||
// If set to `true`, the cluster will use hostname instead of the resolved
|
// If set to `true`, the cluster will use hostname instead of the resolved
|
||||||
// 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.
|
// 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.
|
||||||
bool use_hostname_for_hashing = 4;
|
//
|
||||||
|
// ..note::
|
||||||
|
// This is deprecated and please use :ref:`consistent_hashing_lb_config
|
||||||
|
// <envoy_v3_api_field_extensions.load_balancing_policies.ring_hash.v3.RingHash.consistent_hashing_lb_config>` instead.
|
||||||
|
bool use_hostname_for_hashing = 4
|
||||||
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// Configures percentage of average cluster load to bound per upstream host. For example, with a value of 150
|
// Configures percentage of average cluster load to bound per upstream host. For example, with a value of 150
|
||||||
// no upstream host will get a load more than 1.5 times the average load of all the hosts in the cluster.
|
// no upstream host will get a load more than 1.5 times the average load of all the hosts in the cluster.
|
||||||
|
|
@ -70,5 +78,19 @@ message RingHash {
|
||||||
//
|
//
|
||||||
// This is an O(N) algorithm, unlike other load balancers. Using a lower `hash_balance_factor` results in more hosts
|
// This is an O(N) algorithm, unlike other load balancers. Using a lower `hash_balance_factor` results in more hosts
|
||||||
// being probed, so use a higher value if you require better performance.
|
// being probed, so use a higher value if you require better performance.
|
||||||
google.protobuf.UInt32Value hash_balance_factor = 5 [(validate.rules).uint32 = {gte: 100}];
|
//
|
||||||
|
// ..note::
|
||||||
|
// This is deprecated and please use :ref:`consistent_hashing_lb_config
|
||||||
|
// <envoy_v3_api_field_extensions.load_balancing_policies.ring_hash.v3.RingHash.consistent_hashing_lb_config>` instead.
|
||||||
|
google.protobuf.UInt32Value hash_balance_factor = 5 [
|
||||||
|
deprecated = true,
|
||||||
|
(validate.rules).uint32 = {gte: 100},
|
||||||
|
(envoy.annotations.deprecated_at_minor_version) = "3.0"
|
||||||
|
];
|
||||||
|
|
||||||
|
// Common configuration for hashing-based load balancing policies.
|
||||||
|
common.v3.ConsistentHashingLbConfig consistent_hashing_lb_config = 6;
|
||||||
|
|
||||||
|
// Enable locality weighted load balancing for ring hash lb explicitly.
|
||||||
|
common.v3.LocalityLbConfig.LocalityWeightedLbConfig locality_weighted_lb_config = 7;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,9 @@ syntax = "proto3";
|
||||||
|
|
||||||
package envoy.extensions.load_balancing_policies.round_robin.v3;
|
package envoy.extensions.load_balancing_policies.round_robin.v3;
|
||||||
|
|
||||||
import "envoy/config/cluster/v3/cluster.proto";
|
import "envoy/extensions/load_balancing_policies/common/v3/common.proto";
|
||||||
|
|
||||||
import "udpa/annotations/status.proto";
|
import "udpa/annotations/status.proto";
|
||||||
import "validate/validate.proto";
|
|
||||||
|
|
||||||
option java_package = "io.envoyproxy.envoy.extensions.load_balancing_policies.round_robin.v3";
|
option java_package = "io.envoyproxy.envoy.extensions.load_balancing_policies.round_robin.v3";
|
||||||
option java_outer_classname = "RoundRobinProto";
|
option java_outer_classname = "RoundRobinProto";
|
||||||
|
|
@ -14,13 +13,16 @@ option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/loa
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Round Robin Load Balancing Policy]
|
// [#protodoc-title: Round Robin Load Balancing Policy]
|
||||||
|
// [#extension: envoy.load_balancing_policies.round_robin]
|
||||||
|
|
||||||
// This configuration allows the built-in ROUND_ROBIN LB policy to be configured via the LB policy
|
// This configuration allows the built-in ROUND_ROBIN LB policy to be configured via the LB policy
|
||||||
// extension point. See the :ref:`load balancing architecture overview
|
// extension point. See the :ref:`load balancing architecture overview
|
||||||
// <arch_overview_load_balancing_types>` for more information.
|
// <arch_overview_load_balancing_types>` for more information.
|
||||||
// [#extension: envoy.clusters.lb_policy]
|
|
||||||
message RoundRobin {
|
message RoundRobin {
|
||||||
// Configuration for slow start mode.
|
// Configuration for slow start mode.
|
||||||
// If this configuration is not set, slow start will not be not enabled.
|
// If this configuration is not set, slow start will not be not enabled.
|
||||||
config.cluster.v3.Cluster.SlowStartConfig slow_start_config = 1;
|
common.v3.SlowStartConfig slow_start_config = 1;
|
||||||
|
|
||||||
|
// Configuration for local zone aware load balancing or locality weighted load balancing.
|
||||||
|
common.v3.LocalityLbConfig locality_lb_config = 2;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,10 @@ option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/loa
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Weighted Round Robin Locality-Picking Load Balancing Policy]
|
// [#protodoc-title: Weighted Round Robin Locality-Picking Load Balancing Policy]
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
|
||||||
// Configuration for the wrr_locality LB policy. See the :ref:`load balancing architecture overview
|
// Configuration for the wrr_locality LB policy. See the :ref:`load balancing architecture overview
|
||||||
// <arch_overview_load_balancing_types>` for more information.
|
// <arch_overview_load_balancing_types>` for more information.
|
||||||
// [#extension: envoy.clusters.lb_policy]
|
|
||||||
message WrrLocality {
|
message WrrLocality {
|
||||||
// The child LB policy to create for endpoint-picking within the chosen locality.
|
// The child LB policy to create for endpoint-picking within the chosen locality.
|
||||||
config.cluster.v3.LoadBalancingPolicy endpoint_picking_policy = 1
|
config.cluster.v3.LoadBalancingPolicy endpoint_picking_policy = 1
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,13 @@ message TlsParameters {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Minimum TLS protocol version. By default, it's ``TLSv1_2`` for both clients and servers.
|
// Minimum TLS protocol version. By default, it's ``TLSv1_2`` for both clients and servers.
|
||||||
|
//
|
||||||
|
// TLS protocol versions below TLSv1_2 require setting compatible ciphers with the
|
||||||
|
// ``cipher_suites`` setting as the default ciphers no longer include compatible ciphers.
|
||||||
|
//
|
||||||
|
// .. attention::
|
||||||
|
//
|
||||||
|
// Using TLS protocol versions below TLSv1_2 has serious security considerations and risks.
|
||||||
TlsProtocol tls_minimum_protocol_version = 1 [(validate.rules).enum = {defined_only: true}];
|
TlsProtocol tls_minimum_protocol_version = 1 [(validate.rules).enum = {defined_only: true}];
|
||||||
|
|
||||||
// Maximum TLS protocol version. By default, it's ``TLSv1_2`` for clients and ``TLSv1_3`` for
|
// Maximum TLS protocol version. By default, it's ``TLSv1_2`` for clients and ``TLSv1_3`` for
|
||||||
|
|
@ -142,24 +149,24 @@ message TlsCertificate {
|
||||||
|
|
||||||
// The TLS certificate chain.
|
// The TLS certificate chain.
|
||||||
//
|
//
|
||||||
// If *certificate_chain* is a filesystem path, a watch will be added to the
|
// If ``certificate_chain`` is a filesystem path, a watch will be added to the
|
||||||
// parent directory for any file moves to support rotation. This currently
|
// parent directory for any file moves to support rotation. This currently
|
||||||
// only applies to dynamic secrets, when the *TlsCertificate* is delivered via
|
// only applies to dynamic secrets, when the ``TlsCertificate`` is delivered via
|
||||||
// SDS.
|
// SDS.
|
||||||
config.core.v3.DataSource certificate_chain = 1;
|
config.core.v3.DataSource certificate_chain = 1;
|
||||||
|
|
||||||
// The TLS private key.
|
// The TLS private key.
|
||||||
//
|
//
|
||||||
// If *private_key* is a filesystem path, a watch will be added to the parent
|
// If ``private_key`` is a filesystem path, a watch will be added to the parent
|
||||||
// directory for any file moves to support rotation. This currently only
|
// directory for any file moves to support rotation. This currently only
|
||||||
// applies to dynamic secrets, when the *TlsCertificate* is delivered via SDS.
|
// applies to dynamic secrets, when the ``TlsCertificate`` is delivered via SDS.
|
||||||
config.core.v3.DataSource private_key = 2 [(udpa.annotations.sensitive) = true];
|
config.core.v3.DataSource private_key = 2 [(udpa.annotations.sensitive) = true];
|
||||||
|
|
||||||
// `Pkcs12` data containing TLS certificate, chain, and private key.
|
// ``Pkcs12`` data containing TLS certificate, chain, and private key.
|
||||||
//
|
//
|
||||||
// If *pkcs12* is a filesystem path, the file will be read, but no watch will
|
// If ``pkcs12`` is a filesystem path, the file will be read, but no watch will
|
||||||
// be added to the parent directory, since *pkcs12* isn't used by SDS.
|
// be added to the parent directory, since ``pkcs12`` isn't used by SDS.
|
||||||
// This field is mutually exclusive with *certificate_chain*, *private_key* and *private_key_provider*.
|
// This field is mutually exclusive with ``certificate_chain``, ``private_key`` and ``private_key_provider``.
|
||||||
// This can't be marked as ``oneof`` due to API compatibility reasons. Setting
|
// This can't be marked as ``oneof`` due to API compatibility reasons. Setting
|
||||||
// both :ref:`private_key <envoy_v3_api_field_extensions.transport_sockets.tls.v3.TlsCertificate.private_key>`,
|
// both :ref:`private_key <envoy_v3_api_field_extensions.transport_sockets.tls.v3.TlsCertificate.private_key>`,
|
||||||
// :ref:`certificate_chain <envoy_v3_api_field_extensions.transport_sockets.tls.v3.TlsCertificate.certificate_chain>`,
|
// :ref:`certificate_chain <envoy_v3_api_field_extensions.transport_sockets.tls.v3.TlsCertificate.certificate_chain>`,
|
||||||
|
|
@ -167,17 +174,17 @@ message TlsCertificate {
|
||||||
// and :ref:`pkcs12 <envoy_v3_api_field_extensions.transport_sockets.tls.v3.TlsCertificate.pkcs12>`
|
// and :ref:`pkcs12 <envoy_v3_api_field_extensions.transport_sockets.tls.v3.TlsCertificate.pkcs12>`
|
||||||
// fields will result in an error. Use :ref:`password
|
// fields will result in an error. Use :ref:`password
|
||||||
// <envoy_v3_api_field_extensions.transport_sockets.tls.v3.TlsCertificate.password>`
|
// <envoy_v3_api_field_extensions.transport_sockets.tls.v3.TlsCertificate.password>`
|
||||||
// to specify the password to unprotect the `PKCS12` data, if necessary.
|
// to specify the password to unprotect the ``PKCS12`` data, if necessary.
|
||||||
config.core.v3.DataSource pkcs12 = 8 [(udpa.annotations.sensitive) = true];
|
config.core.v3.DataSource pkcs12 = 8 [(udpa.annotations.sensitive) = true];
|
||||||
|
|
||||||
// If specified, updates of file-based *certificate_chain* and *private_key*
|
// If specified, updates of file-based ``certificate_chain`` and ``private_key``
|
||||||
// sources will be triggered by this watch. The certificate/key pair will be
|
// sources will be triggered by this watch. The certificate/key pair will be
|
||||||
// read together and validated for atomic read consistency (i.e. no
|
// read together and validated for atomic read consistency (i.e. no
|
||||||
// intervening modification occurred between cert/key read, verified by file
|
// intervening modification occurred between cert/key read, verified by file
|
||||||
// hash comparisons). This allows explicit control over the path watched, by
|
// hash comparisons). This allows explicit control over the path watched, by
|
||||||
// default the parent directories of the filesystem paths in
|
// default the parent directories of the filesystem paths in
|
||||||
// *certificate_chain* and *private_key* are watched if this field is not
|
// ``certificate_chain`` and ``private_key`` are watched if this field is not
|
||||||
// specified. This only applies when a *TlsCertificate* is delivered by SDS
|
// specified. This only applies when a ``TlsCertificate`` is delivered by SDS
|
||||||
// with references to filesystem paths. See the :ref:`SDS key rotation
|
// with references to filesystem paths. See the :ref:`SDS key rotation
|
||||||
// <sds_key_rotation>` documentation for further details.
|
// <sds_key_rotation>` documentation for further details.
|
||||||
config.core.v3.WatchedDirectory watched_directory = 7;
|
config.core.v3.WatchedDirectory watched_directory = 7;
|
||||||
|
|
@ -320,12 +327,16 @@ message CertificateValidationContext {
|
||||||
// See :ref:`the TLS overview <arch_overview_ssl_enabling_verification>` for a list of common
|
// See :ref:`the TLS overview <arch_overview_ssl_enabling_verification>` for a list of common
|
||||||
// system CA locations.
|
// system CA locations.
|
||||||
//
|
//
|
||||||
// If *trusted_ca* is a filesystem path, a watch will be added to the parent
|
// If ``trusted_ca`` is a filesystem path, a watch will be added to the parent
|
||||||
// directory for any file moves to support rotation. This currently only
|
// directory for any file moves to support rotation. This currently only
|
||||||
// applies to dynamic secrets, when the *CertificateValidationContext* is
|
// applies to dynamic secrets, when the ``CertificateValidationContext`` is
|
||||||
// delivered via SDS.
|
// delivered via SDS.
|
||||||
//
|
//
|
||||||
// Only one of *trusted_ca* and *ca_certificate_provider_instance* may be specified.
|
// X509_V_FLAG_PARTIAL_CHAIN is set by default, so non-root/intermediate ca certificate in ``trusted_ca``
|
||||||
|
// can be treated as trust anchor as well. It allows verification with building valid partial chain instead
|
||||||
|
// of a full chain.
|
||||||
|
//
|
||||||
|
// Only one of ``trusted_ca`` and ``ca_certificate_provider_instance`` may be specified.
|
||||||
//
|
//
|
||||||
// [#next-major-version: This field and watched_directory below should ideally be moved into a
|
// [#next-major-version: This field and watched_directory below should ideally be moved into a
|
||||||
// separate sub-message, since there's no point in specifying the latter field without this one.]
|
// separate sub-message, since there's no point in specifying the latter field without this one.]
|
||||||
|
|
@ -334,16 +345,16 @@ message CertificateValidationContext {
|
||||||
|
|
||||||
// Certificate provider instance for fetching TLS certificates.
|
// Certificate provider instance for fetching TLS certificates.
|
||||||
//
|
//
|
||||||
// Only one of *trusted_ca* and *ca_certificate_provider_instance* may be specified.
|
// Only one of ``trusted_ca`` and ``ca_certificate_provider_instance`` may be specified.
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
CertificateProviderPluginInstance ca_certificate_provider_instance = 13
|
CertificateProviderPluginInstance ca_certificate_provider_instance = 13
|
||||||
[(udpa.annotations.field_migrate).oneof_promotion = "ca_cert_source"];
|
[(udpa.annotations.field_migrate).oneof_promotion = "ca_cert_source"];
|
||||||
|
|
||||||
// If specified, updates of a file-based *trusted_ca* source will be triggered
|
// If specified, updates of a file-based ``trusted_ca`` source will be triggered
|
||||||
// by this watch. This allows explicit control over the path watched, by
|
// by this watch. This allows explicit control over the path watched, by
|
||||||
// default the parent directory of the filesystem path in *trusted_ca* is
|
// default the parent directory of the filesystem path in ``trusted_ca`` is
|
||||||
// watched if this field is not specified. This only applies when a
|
// watched if this field is not specified. This only applies when a
|
||||||
// *CertificateValidationContext* is delivered by SDS with references to
|
// ``CertificateValidationContext`` is delivered by SDS with references to
|
||||||
// filesystem paths. See the :ref:`SDS key rotation <sds_key_rotation>`
|
// filesystem paths. See the :ref:`SDS key rotation <sds_key_rotation>`
|
||||||
// documentation for further details.
|
// documentation for further details.
|
||||||
config.core.v3.WatchedDirectory watched_directory = 11;
|
config.core.v3.WatchedDirectory watched_directory = 11;
|
||||||
|
|
@ -477,10 +488,13 @@ message CertificateValidationContext {
|
||||||
// certificate chain will be subject to validation by :ref:`CRL <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CertificateValidationContext.crl>`.
|
// certificate chain will be subject to validation by :ref:`CRL <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CertificateValidationContext.crl>`.
|
||||||
bool only_verify_leaf_cert_crl = 14;
|
bool only_verify_leaf_cert_crl = 14;
|
||||||
|
|
||||||
// Config for the max number of intermediate certificates in chain that are parsed during verification.
|
// Defines maximum depth of a certificate chain accepted in verification, the default limit is 100, though this can be system-dependent.
|
||||||
// This does not include the leaf certificate. If configured, and the certificate chain is longer than allowed, the certificates
|
// This number does not include the leaf, so a depth of 1 allows the leaf and one CA certificate. If a trusted issuer appears in the chain,
|
||||||
// above the limit are ignored, and certificate validation will fail. The default limit is 100,
|
// but in a depth larger than configured, the certificate validation will fail.
|
||||||
// though this can be system-dependent.
|
// See `BoringSSL SSL_CTX_set_verify_depth <https://commondatastorage.googleapis.com/chromium-boringssl-docs/ssl.h.html#SSL_CTX_set_verify_depth>`
|
||||||
// https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_verify_depth.html
|
// If you use OpenSSL, its behavior is different from BoringSSL, this will define a limit on the number of certificates between the end-entity and trust-anchor certificates.
|
||||||
|
// Neither the end-entity nor the trust-anchor certificates count against depth.
|
||||||
|
// See `OpenSSL SSL set_verify_depth <https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_verify_depth.html>`_.
|
||||||
|
// Trusted issues are specified by setting :ref:`trusted_ca <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CertificateValidationContext.trusted_ca>`
|
||||||
google.protobuf.UInt32Value max_verify_depth = 16 [(validate.rules).uint32 = {lte: 100}];
|
google.protobuf.UInt32Value max_verify_depth = 16 [(validate.rules).uint32 = {lte: 100}];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ message UpstreamTlsContext {
|
||||||
google.protobuf.UInt32Value max_session_keys = 4;
|
google.protobuf.UInt32Value max_session_keys = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 9]
|
// [#next-free-field: 10]
|
||||||
message DownstreamTlsContext {
|
message DownstreamTlsContext {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.auth.DownstreamTlsContext";
|
"envoy.api.v2.auth.DownstreamTlsContext";
|
||||||
|
|
@ -123,6 +123,11 @@ message DownstreamTlsContext {
|
||||||
// an accompanying OCSP response or if the response expires at runtime.
|
// an accompanying OCSP response or if the response expires at runtime.
|
||||||
// Defaults to LENIENT_STAPLING
|
// Defaults to LENIENT_STAPLING
|
||||||
OcspStaplePolicy ocsp_staple_policy = 8 [(validate.rules).enum = {defined_only: true}];
|
OcspStaplePolicy ocsp_staple_policy = 8 [(validate.rules).enum = {defined_only: true}];
|
||||||
|
|
||||||
|
// Multiple certificates are allowed in Downstream transport socket to serve different SNI.
|
||||||
|
// If the client provides SNI but no such cert matched, it will decide to full scan certificates or not based on this config.
|
||||||
|
// Defaults to false. See more details in :ref:`Multiple TLS certificates <arch_overview_ssl_cert_select>`.
|
||||||
|
google.protobuf.BoolValue full_scan_certs_on_sni_mismatch = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TLS key log configuration.
|
// TLS key log configuration.
|
||||||
|
|
@ -210,13 +215,13 @@ message CommonTlsContext {
|
||||||
[(validate.rules).message = {required: true}];
|
[(validate.rules).message = {required: true}];
|
||||||
|
|
||||||
// Certificate provider for fetching CA certs. This will populate the
|
// Certificate provider for fetching CA certs. This will populate the
|
||||||
// *default_validation_context.trusted_ca* field.
|
// ``default_validation_context.trusted_ca`` field.
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
CertificateProvider validation_context_certificate_provider = 3
|
CertificateProvider validation_context_certificate_provider = 3
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
// Certificate provider instance for fetching CA certs. This will populate the
|
// Certificate provider instance for fetching CA certs. This will populate the
|
||||||
// *default_validation_context.trusted_ca* field.
|
// ``default_validation_context.trusted_ca`` field.
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
CertificateProviderInstance validation_context_certificate_provider_instance = 4
|
CertificateProviderInstance validation_context_certificate_provider_instance = 4
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
@ -227,15 +232,12 @@ message CommonTlsContext {
|
||||||
// TLS protocol versions, cipher suites etc.
|
// TLS protocol versions, cipher suites etc.
|
||||||
TlsParameters tls_params = 1;
|
TlsParameters tls_params = 1;
|
||||||
|
|
||||||
|
// Only a single TLS certificate is supported in client contexts. In server contexts,
|
||||||
// :ref:`Multiple TLS certificates <arch_overview_ssl_cert_select>` can be associated with the
|
// :ref:`Multiple TLS certificates <arch_overview_ssl_cert_select>` can be associated with the
|
||||||
// same context to allow both RSA and ECDSA certificates.
|
// same context to allow both RSA and ECDSA certificates and support SNI-based selection.
|
||||||
//
|
//
|
||||||
// Only a single TLS certificate is supported in client contexts. In server contexts, the first
|
// Only one of ``tls_certificates``, ``tls_certificate_sds_secret_configs``,
|
||||||
// RSA certificate is used for clients that only support RSA and the first ECDSA certificate is
|
// and ``tls_certificate_provider_instance`` may be used.
|
||||||
// used for clients that support ECDSA.
|
|
||||||
//
|
|
||||||
// Only one of *tls_certificates*, *tls_certificate_sds_secret_configs*,
|
|
||||||
// and *tls_certificate_provider_instance* may be used.
|
|
||||||
// [#next-major-version: These mutually exclusive fields should ideally be in a oneof, but it's
|
// [#next-major-version: These mutually exclusive fields should ideally be in a oneof, but it's
|
||||||
// not legal to put a repeated field in a oneof. In the next major version, we should rework
|
// not legal to put a repeated field in a oneof. In the next major version, we should rework
|
||||||
// this to avoid this problem.]
|
// this to avoid this problem.]
|
||||||
|
|
@ -247,18 +249,17 @@ message CommonTlsContext {
|
||||||
// The same number and types of certificates as :ref:`tls_certificates <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CommonTlsContext.tls_certificates>`
|
// The same number and types of certificates as :ref:`tls_certificates <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CommonTlsContext.tls_certificates>`
|
||||||
// are valid in the the certificates fetched through this setting.
|
// are valid in the the certificates fetched through this setting.
|
||||||
//
|
//
|
||||||
// Only one of *tls_certificates*, *tls_certificate_sds_secret_configs*,
|
// Only one of ``tls_certificates``, ``tls_certificate_sds_secret_configs``,
|
||||||
// and *tls_certificate_provider_instance* may be used.
|
// and ``tls_certificate_provider_instance`` may be used.
|
||||||
// [#next-major-version: These mutually exclusive fields should ideally be in a oneof, but it's
|
// [#next-major-version: These mutually exclusive fields should ideally be in a oneof, but it's
|
||||||
// not legal to put a repeated field in a oneof. In the next major version, we should rework
|
// not legal to put a repeated field in a oneof. In the next major version, we should rework
|
||||||
// this to avoid this problem.]
|
// this to avoid this problem.]
|
||||||
repeated SdsSecretConfig tls_certificate_sds_secret_configs = 6
|
repeated SdsSecretConfig tls_certificate_sds_secret_configs = 6;
|
||||||
[(validate.rules).repeated = {max_items: 2}];
|
|
||||||
|
|
||||||
// Certificate provider instance for fetching TLS certs.
|
// Certificate provider instance for fetching TLS certs.
|
||||||
//
|
//
|
||||||
// Only one of *tls_certificates*, *tls_certificate_sds_secret_configs*,
|
// Only one of ``tls_certificates``, ``tls_certificate_sds_secret_configs``,
|
||||||
// and *tls_certificate_provider_instance* may be used.
|
// and ``tls_certificate_provider_instance`` may be used.
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
CertificateProviderPluginInstance tls_certificate_provider_instance = 14;
|
CertificateProviderPluginInstance tls_certificate_provider_instance = 14;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,12 +68,12 @@ message DiscoveryRequest {
|
||||||
repeated string resource_names = 3;
|
repeated string resource_names = 3;
|
||||||
|
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
// Alternative to *resource_names* field that allows specifying dynamic
|
// Alternative to ``resource_names`` field that allows specifying dynamic
|
||||||
// parameters along with each resource name. Clients that populate this
|
// parameters along with each resource name. Clients that populate this
|
||||||
// field must be able to handle responses from the server where resources
|
// field must be able to handle responses from the server where resources
|
||||||
// are wrapped in a Resource message.
|
// are wrapped in a Resource message.
|
||||||
// Note that it is legal for a request to have some resources listed
|
// Note that it is legal for a request to have some resources listed
|
||||||
// in *resource_names* and others in *resource_locators*.
|
// in ``resource_names`` and others in ``resource_locators``.
|
||||||
repeated ResourceLocator resource_locators = 7;
|
repeated ResourceLocator resource_locators = 7;
|
||||||
|
|
||||||
// Type of the resource that is being requested, e.g.
|
// Type of the resource that is being requested, e.g.
|
||||||
|
|
@ -90,7 +90,7 @@ message DiscoveryRequest {
|
||||||
string response_nonce = 5;
|
string response_nonce = 5;
|
||||||
|
|
||||||
// This is populated when the previous :ref:`DiscoveryResponse <envoy_v3_api_msg_service.discovery.v3.DiscoveryResponse>`
|
// This is populated when the previous :ref:`DiscoveryResponse <envoy_v3_api_msg_service.discovery.v3.DiscoveryResponse>`
|
||||||
// failed to update configuration. The *message* field in *error_details* provides the Envoy
|
// failed to update configuration. The ``message`` field in ``error_details`` provides the Envoy
|
||||||
// internal exception related to the failure. It is only intended for consumption during manual
|
// internal exception related to the failure. It is only intended for consumption during manual
|
||||||
// debugging, the string provided is not guaranteed to be stable across Envoy versions.
|
// debugging, the string provided is not guaranteed to be stable across Envoy versions.
|
||||||
google.rpc.Status error_detail = 6;
|
google.rpc.Status error_detail = 6;
|
||||||
|
|
@ -180,9 +180,9 @@ message DeltaDiscoveryRequest {
|
||||||
config.core.v3.Node node = 1;
|
config.core.v3.Node node = 1;
|
||||||
|
|
||||||
// Type of the resource that is being requested, e.g.
|
// Type of the resource that is being requested, e.g.
|
||||||
// "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment". This does not need to be set if
|
// ``type.googleapis.com/envoy.api.v2.ClusterLoadAssignment``. This does not need to be set if
|
||||||
// resources are only referenced via *xds_resource_subscribe* and
|
// resources are only referenced via ``xds_resource_subscribe`` and
|
||||||
// *xds_resources_unsubscribe*.
|
// ``xds_resources_unsubscribe``.
|
||||||
string type_url = 2;
|
string type_url = 2;
|
||||||
|
|
||||||
// DeltaDiscoveryRequests allow the client to add or remove individual
|
// DeltaDiscoveryRequests allow the client to add or remove individual
|
||||||
|
|
@ -212,17 +212,17 @@ message DeltaDiscoveryRequest {
|
||||||
repeated string resource_names_unsubscribe = 4;
|
repeated string resource_names_unsubscribe = 4;
|
||||||
|
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
// Alternative to *resource_names_subscribe* field that allows specifying dynamic parameters
|
// Alternative to ``resource_names_subscribe`` field that allows specifying dynamic parameters
|
||||||
// along with each resource name.
|
// along with each resource name.
|
||||||
// Note that it is legal for a request to have some resources listed
|
// Note that it is legal for a request to have some resources listed
|
||||||
// in *resource_names_subscribe* and others in *resource_locators_subscribe*.
|
// in ``resource_names_subscribe`` and others in ``resource_locators_subscribe``.
|
||||||
repeated ResourceLocator resource_locators_subscribe = 8;
|
repeated ResourceLocator resource_locators_subscribe = 8;
|
||||||
|
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
// Alternative to *resource_names_unsubscribe* field that allows specifying dynamic parameters
|
// Alternative to ``resource_names_unsubscribe`` field that allows specifying dynamic parameters
|
||||||
// along with each resource name.
|
// along with each resource name.
|
||||||
// Note that it is legal for a request to have some resources listed
|
// Note that it is legal for a request to have some resources listed
|
||||||
// in *resource_names_unsubscribe* and others in *resource_locators_unsubscribe*.
|
// in ``resource_names_unsubscribe`` and others in ``resource_locators_unsubscribe``.
|
||||||
repeated ResourceLocator resource_locators_unsubscribe = 9;
|
repeated ResourceLocator resource_locators_unsubscribe = 9;
|
||||||
|
|
||||||
// Informs the server of the versions of the resources the xDS client knows of, to enable the
|
// Informs the server of the versions of the resources the xDS client knows of, to enable the
|
||||||
|
|
@ -242,7 +242,7 @@ message DeltaDiscoveryRequest {
|
||||||
string response_nonce = 6;
|
string response_nonce = 6;
|
||||||
|
|
||||||
// This is populated when the previous :ref:`DiscoveryResponse <envoy_v3_api_msg_service.discovery.v3.DiscoveryResponse>`
|
// This is populated when the previous :ref:`DiscoveryResponse <envoy_v3_api_msg_service.discovery.v3.DiscoveryResponse>`
|
||||||
// failed to update configuration. The *message* field in *error_details*
|
// failed to update configuration. The ``message`` field in ``error_details``
|
||||||
// provides the Envoy internal exception related to the failure.
|
// provides the Envoy internal exception related to the failure.
|
||||||
google.rpc.Status error_detail = 7;
|
google.rpc.Status error_detail = 7;
|
||||||
}
|
}
|
||||||
|
|
@ -332,7 +332,7 @@ message DynamicParameterConstraints {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 9]
|
// [#next-free-field: 10]
|
||||||
message Resource {
|
message Resource {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Resource";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Resource";
|
||||||
|
|
||||||
|
|
@ -346,13 +346,13 @@ message Resource {
|
||||||
}
|
}
|
||||||
|
|
||||||
// The resource's name, to distinguish it from others of the same type of resource.
|
// The resource's name, to distinguish it from others of the same type of resource.
|
||||||
// Only one of *name* or *resource_name* may be set.
|
// Only one of ``name`` or ``resource_name`` may be set.
|
||||||
string name = 3;
|
string name = 3;
|
||||||
|
|
||||||
// Alternative to the *name* field, to be used when the server supports
|
// Alternative to the ``name`` field, to be used when the server supports
|
||||||
// multiple variants of the named resource that are differentiated by
|
// multiple variants of the named resource that are differentiated by
|
||||||
// dynamic parameter constraints.
|
// dynamic parameter constraints.
|
||||||
// Only one of *name* or *resource_name* may be set.
|
// Only one of ``name`` or ``resource_name`` may be set.
|
||||||
ResourceName resource_name = 8;
|
ResourceName resource_name = 8;
|
||||||
|
|
||||||
// The aliases are a list of other names that this resource can go by.
|
// The aliases are a list of other names that this resource can go by.
|
||||||
|
|
@ -383,4 +383,8 @@ message Resource {
|
||||||
// Cache control properties for the resource.
|
// Cache control properties for the resource.
|
||||||
// [#not-implemented-hide:]
|
// [#not-implemented-hide:]
|
||||||
CacheControl cache_control = 7;
|
CacheControl cache_control = 7;
|
||||||
|
|
||||||
|
// The Metadata field can be used to provide additional information for the resource.
|
||||||
|
// E.g. the trace data for debugging.
|
||||||
|
config.core.v3.Metadata metadata = 9;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ option go_package = "github.com/envoyproxy/go-control-plane/envoy/service/load_s
|
||||||
option java_generic_services = true;
|
option java_generic_services = true;
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Load Reporting service (LRS)]
|
// [#protodoc-title: Load reporting service (LRS)]
|
||||||
|
|
||||||
// Load Reporting Service is an Envoy API to emit load reports. Envoy will initiate a bi-directional
|
// Load Reporting Service is an Envoy API to emit load reports. Envoy will initiate a bi-directional
|
||||||
// stream with a management server. Upon connecting, the management server can send a
|
// stream with a management server. Upon connecting, the management server can send a
|
||||||
|
|
@ -79,7 +79,7 @@ message LoadStatsResponse {
|
||||||
"envoy.service.load_stats.v2.LoadStatsResponse";
|
"envoy.service.load_stats.v2.LoadStatsResponse";
|
||||||
|
|
||||||
// Clusters to report stats for.
|
// Clusters to report stats for.
|
||||||
// Not populated if *send_all_clusters* is true.
|
// Not populated if ``send_all_clusters`` is true.
|
||||||
repeated string clusters = 1;
|
repeated string clusters = 1;
|
||||||
|
|
||||||
// If true, the client should send all clusters it knows about.
|
// If true, the client should send all clusters it knows about.
|
||||||
|
|
@ -90,14 +90,14 @@ message LoadStatsResponse {
|
||||||
// The minimum interval of time to collect stats over. This is only a minimum for two reasons:
|
// The minimum interval of time to collect stats over. This is only a minimum for two reasons:
|
||||||
//
|
//
|
||||||
// 1. There may be some delay from when the timer fires until stats sampling occurs.
|
// 1. There may be some delay from when the timer fires until stats sampling occurs.
|
||||||
// 2. For clusters that were already feature in the previous *LoadStatsResponse*, any traffic
|
// 2. For clusters that were already feature in the previous ``LoadStatsResponse``, any traffic
|
||||||
// that is observed in between the corresponding previous *LoadStatsRequest* and this
|
// that is observed in between the corresponding previous ``LoadStatsRequest`` and this
|
||||||
// *LoadStatsResponse* will also be accumulated and billed to the cluster. This avoids a period
|
// ``LoadStatsResponse`` will also be accumulated and billed to the cluster. This avoids a period
|
||||||
// of inobservability that might otherwise exists between the messages. New clusters are not
|
// of inobservability that might otherwise exists between the messages. New clusters are not
|
||||||
// subject to this consideration.
|
// subject to this consideration.
|
||||||
google.protobuf.Duration load_reporting_interval = 2;
|
google.protobuf.Duration load_reporting_interval = 2;
|
||||||
|
|
||||||
// Set to *true* if the management server supports endpoint granularity
|
// Set to ``true`` if the management server supports endpoint granularity
|
||||||
// report.
|
// report.
|
||||||
bool report_endpoint_granularity = 3;
|
bool report_endpoint_granularity = 3;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ syntax = "proto3";
|
||||||
|
|
||||||
package envoy.service.status.v3;
|
package envoy.service.status.v3;
|
||||||
|
|
||||||
import "envoy/admin/v3/config_dump.proto";
|
import "envoy/admin/v3/config_dump_shared.proto";
|
||||||
import "envoy/config/core/v3/base.proto";
|
import "envoy/config/core/v3/base.proto";
|
||||||
import "envoy/type/matcher/v3/node.proto";
|
import "envoy/type/matcher/v3/node.proto";
|
||||||
|
|
||||||
|
|
@ -21,7 +21,7 @@ option go_package = "github.com/envoyproxy/go-control-plane/envoy/service/status
|
||||||
option java_generic_services = true;
|
option java_generic_services = true;
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Client Status Discovery Service (CSDS)]
|
// [#protodoc-title: Client status discovery service (CSDS)]
|
||||||
|
|
||||||
// CSDS is Client Status Discovery Service. It can be used to get the status of
|
// CSDS is Client Status Discovery Service. It can be used to get the status of
|
||||||
// an xDS-compliant client from the management server's point of view. It can
|
// an xDS-compliant client from the management server's point of view. It can
|
||||||
|
|
|
||||||
|
|
@ -34,10 +34,10 @@ message PathTransformation {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determines if adjacent slashes are merged into one. A common use case is for a request path
|
// Determines if adjacent slashes are merged into one. A common use case is for a request path
|
||||||
// header. Using this option in `:ref: PathNormalizationOptions
|
// header. Using this option in ``:ref: PathNormalizationOptions
|
||||||
// <envoy_v3_api_msg_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.PathNormalizationOptions>`
|
// <envoy_v3_api_msg_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.PathNormalizationOptions>``
|
||||||
// will allow incoming requests with path `//dir///file` to match against route with `prefix`
|
// will allow incoming requests with path ``//dir///file`` to match against route with ``prefix``
|
||||||
// match set to `/dir`. When using for header transformations, note that slash merging is not
|
// match set to ``/dir``. When using for header transformations, note that slash merging is not
|
||||||
// part of `HTTP spec <https://tools.ietf.org/html/rfc3986>`_ and is provided for convenience.
|
// part of `HTTP spec <https://tools.ietf.org/html/rfc3986>`_ and is provided for convenience.
|
||||||
message MergeSlashes {
|
message MergeSlashes {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,11 @@ message RegexMatcher {
|
||||||
// the documented `syntax <https://github.com/google/re2/wiki/Syntax>`_. The engine is designed
|
// the documented `syntax <https://github.com/google/re2/wiki/Syntax>`_. The engine is designed
|
||||||
// to complete execution in linear time as well as limit the amount of memory used.
|
// to complete execution in linear time as well as limit the amount of memory used.
|
||||||
//
|
//
|
||||||
// Envoy supports program size checking via runtime. The runtime keys `re2.max_program_size.error_level`
|
// Envoy supports program size checking via runtime. The runtime keys ``re2.max_program_size.error_level``
|
||||||
// and `re2.max_program_size.warn_level` can be set to integers as the maximum program size or
|
// and ``re2.max_program_size.warn_level`` can be set to integers as the maximum program size or
|
||||||
// complexity that a compiled regex can have before an exception is thrown or a warning is
|
// complexity that a compiled regex can have before an exception is thrown or a warning is
|
||||||
// logged, respectively. `re2.max_program_size.error_level` defaults to 100, and
|
// logged, respectively. ``re2.max_program_size.error_level`` defaults to 100, and
|
||||||
// `re2.max_program_size.warn_level` has no default if unset (will not check/log a warning).
|
// ``re2.max_program_size.warn_level`` has no default if unset (will not check/log a warning).
|
||||||
//
|
//
|
||||||
// Envoy emits two stats for tracking the program size of regexes: the histogram `re2.program_size`,
|
// Envoy emits two stats for tracking the program size of regexes: the histogram `re2.program_size`,
|
||||||
// which records the program size, and the counter `re2.exceeded_warn_level`, which is incremented
|
// which records the program size, and the counter `re2.exceeded_warn_level`, which is incremented
|
||||||
|
|
|
||||||
29
xds/third_party/envoy/src/main/proto/envoy/type/matcher/v3/filter_state.proto
vendored
Normal file
29
xds/third_party/envoy/src/main/proto/envoy/type/matcher/v3/filter_state.proto
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package envoy.type.matcher.v3;
|
||||||
|
|
||||||
|
import "envoy/type/matcher/v3/string.proto";
|
||||||
|
|
||||||
|
import "udpa/annotations/status.proto";
|
||||||
|
import "validate/validate.proto";
|
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.type.matcher.v3";
|
||||||
|
option java_outer_classname = "FilterStateProto";
|
||||||
|
option java_multiple_files = true;
|
||||||
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/type/matcher/v3;matcherv3";
|
||||||
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
|
// [#protodoc-title: Filter state matcher]
|
||||||
|
|
||||||
|
// FilterStateMatcher provides a general interface for matching the filter state objects.
|
||||||
|
message FilterStateMatcher {
|
||||||
|
// The filter state key to retrieve the object.
|
||||||
|
string key = 1 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
|
oneof matcher {
|
||||||
|
option (validate.required) = true;
|
||||||
|
|
||||||
|
// Matches the filter state object as a string value.
|
||||||
|
StringMatcher string_match = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -23,9 +23,9 @@ message PathMatcher {
|
||||||
oneof rule {
|
oneof rule {
|
||||||
option (validate.required) = true;
|
option (validate.required) = true;
|
||||||
|
|
||||||
// The `path` must match the URL path portion of the :path header. The query and fragment
|
// The ``path`` must match the URL path portion of the :path header. The query and fragment
|
||||||
// string (if present) are removed in the URL path portion.
|
// string (if present) are removed in the URL path portion.
|
||||||
// For example, the path */data* will match the *:path* header */data#fragment?param=value*.
|
// For example, the path ``/data`` will match the ``:path`` header ``/data#fragment?param=value``.
|
||||||
StringMatcher path = 1 [(validate.rules).message = {required: true}];
|
StringMatcher path = 1 [(validate.rules).message = {required: true}];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,14 +25,14 @@ message RegexMatcher {
|
||||||
// the documented `syntax <https://github.com/google/re2/wiki/Syntax>`_. The engine is designed
|
// the documented `syntax <https://github.com/google/re2/wiki/Syntax>`_. The engine is designed
|
||||||
// to complete execution in linear time as well as limit the amount of memory used.
|
// to complete execution in linear time as well as limit the amount of memory used.
|
||||||
//
|
//
|
||||||
// Envoy supports program size checking via runtime. The runtime keys `re2.max_program_size.error_level`
|
// Envoy supports program size checking via runtime. The runtime keys ``re2.max_program_size.error_level``
|
||||||
// and `re2.max_program_size.warn_level` can be set to integers as the maximum program size or
|
// and ``re2.max_program_size.warn_level`` can be set to integers as the maximum program size or
|
||||||
// complexity that a compiled regex can have before an exception is thrown or a warning is
|
// complexity that a compiled regex can have before an exception is thrown or a warning is
|
||||||
// logged, respectively. `re2.max_program_size.error_level` defaults to 100, and
|
// logged, respectively. ``re2.max_program_size.error_level`` defaults to 100, and
|
||||||
// `re2.max_program_size.warn_level` has no default if unset (will not check/log a warning).
|
// ``re2.max_program_size.warn_level`` has no default if unset (will not check/log a warning).
|
||||||
//
|
//
|
||||||
// Envoy emits two stats for tracking the program size of regexes: the histogram `re2.program_size`,
|
// Envoy emits two stats for tracking the program size of regexes: the histogram ``re2.program_size``,
|
||||||
// which records the program size, and the counter `re2.exceeded_warn_level`, which is incremented
|
// which records the program size, and the counter ``re2.exceeded_warn_level``, which is incremented
|
||||||
// each time the program size exceeds the warn level threshold.
|
// each time the program size exceeds the warn level threshold.
|
||||||
message GoogleRE2 {
|
message GoogleRE2 {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
|
@ -56,10 +56,12 @@ message RegexMatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
oneof engine_type {
|
oneof engine_type {
|
||||||
option (validate.required) = true;
|
|
||||||
|
|
||||||
// Google's RE2 regex engine.
|
// Google's RE2 regex engine.
|
||||||
GoogleRE2 google_re2 = 1 [(validate.rules).message = {required: true}];
|
GoogleRE2 google_re2 = 1 [
|
||||||
|
deprecated = true,
|
||||||
|
(validate.rules).message = {required: true},
|
||||||
|
(envoy.annotations.deprecated_at_minor_version) = "3.0"
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// The regex match string. The string must be supported by the configured engine. The regex is matched
|
// The regex match string. The string must be supported by the configured engine. The regex is matched
|
||||||
|
|
@ -93,5 +95,6 @@ message RegexMatchAndSubstitute {
|
||||||
// backslash followed by the capture group number to denote a numbered
|
// backslash followed by the capture group number to denote a numbered
|
||||||
// capture group. E.g., ``\1`` refers to capture group 1, and ``\2`` refers
|
// capture group. E.g., ``\1`` refers to capture group 1, and ``\2`` refers
|
||||||
// to capture group 2.
|
// to capture group 2.
|
||||||
string substitution = 2;
|
string substitution = 2
|
||||||
|
[(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ message StringMatcher {
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
//
|
//
|
||||||
// * *abc* only matches the value *abc*.
|
// * ``abc`` only matches the value ``abc``.
|
||||||
string exact = 1;
|
string exact = 1;
|
||||||
|
|
||||||
// The input string must have the prefix specified here.
|
// The input string must have the prefix specified here.
|
||||||
|
|
@ -40,7 +40,7 @@ message StringMatcher {
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
//
|
//
|
||||||
// * *abc* matches the value *abc.xyz*
|
// * ``abc`` matches the value ``abc.xyz``
|
||||||
string prefix = 2 [(validate.rules).string = {min_len: 1}];
|
string prefix = 2 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
// The input string must have the suffix specified here.
|
// The input string must have the suffix specified here.
|
||||||
|
|
@ -48,7 +48,7 @@ message StringMatcher {
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
//
|
//
|
||||||
// * *abc* matches the value *xyz.abc*
|
// * ``abc`` matches the value ``xyz.abc``
|
||||||
string suffix = 3 [(validate.rules).string = {min_len: 1}];
|
string suffix = 3 [(validate.rules).string = {min_len: 1}];
|
||||||
|
|
||||||
// The input string must match the regular expression specified here.
|
// The input string must match the regular expression specified here.
|
||||||
|
|
@ -59,13 +59,13 @@ message StringMatcher {
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
//
|
//
|
||||||
// * *abc* matches the value *xyz.abc.def*
|
// * ``abc`` matches the value ``xyz.abc.def``
|
||||||
string contains = 7 [(validate.rules).string = {min_len: 1}];
|
string contains = 7 [(validate.rules).string = {min_len: 1}];
|
||||||
}
|
}
|
||||||
|
|
||||||
// If true, indicates the exact/prefix/suffix/contains matching should be case insensitive. This
|
// If true, indicates the exact/prefix/suffix/contains matching should be case insensitive. This
|
||||||
// has no effect for the safe_regex match.
|
// has no effect for the safe_regex match.
|
||||||
// For example, the matcher *data* will match both input string *Data* and *data* if set to true.
|
// For example, the matcher ``data`` will match both input string ``Data`` and ``data`` if set to true.
|
||||||
bool ignore_case = 6;
|
bool ignore_case = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// [#protodoc-title: Struct matcher]
|
// [#protodoc-title: Struct matcher]
|
||||||
|
|
||||||
// StructMatcher provides a general interface to check if a given value is matched in
|
// StructMatcher provides a general interface to check if a given value is matched in
|
||||||
// google.protobuf.Struct. It uses `path` to retrieve the value
|
// google.protobuf.Struct. It uses ``path`` to retrieve the value
|
||||||
// from the struct and then check if it's matched to the specified value.
|
// from the struct and then check if it's matched to the specified value.
|
||||||
//
|
//
|
||||||
// For example, for the following Struct:
|
// For example, for the following Struct:
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Metadata]
|
// [#protodoc-title: Metadata]
|
||||||
|
|
||||||
// MetadataKey provides a general interface using `key` and `path` to retrieve value from
|
// MetadataKey provides a general interface using ``key`` and ``path`` to retrieve value from
|
||||||
// :ref:`Metadata <envoy_v3_api_msg_config.core.v3.Metadata>`.
|
// :ref:`Metadata <envoy_v3_api_msg_config.core.v3.Metadata>`.
|
||||||
//
|
//
|
||||||
// For example, for the following Metadata:
|
// For example, for the following Metadata:
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ option java_multiple_files = true;
|
||||||
option go_package = "github.com/envoyproxy/go-control-plane/envoy/type/v3;typev3";
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/type/v3;typev3";
|
||||||
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Semantic Version]
|
// [#protodoc-title: Semantic version]
|
||||||
|
|
||||||
// Envoy uses SemVer (https://semver.org/). Major/minor versions indicate
|
// Envoy uses SemVer (https://semver.org/). Major/minor versions indicate
|
||||||
// expected behaviors and APIs, the patch version field is used only
|
// expected behaviors and APIs, the patch version field is used only
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue