envoy.extensions.clusters.dynamic_forward_proxy.v3.cluster.proto Maven / Gradle / Ivy
syntax = "proto3";
package envoy.extensions.clusters.dynamic_forward_proxy.v3;
import "envoy/config/cluster/v3/cluster.proto";
import "envoy/config/core/v3/address.proto";
import "envoy/extensions/common/dynamic_forward_proxy/v3/dns_cache.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/wrappers.proto";
import "udpa/annotations/status.proto";
import "udpa/annotations/versioning.proto";
import "validate/validate.proto";
option java_package = "io.envoyproxy.envoy.extensions.clusters.dynamic_forward_proxy.v3";
option java_outer_classname = "ClusterProto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/clusters/dynamic_forward_proxy/v3;dynamic_forward_proxyv3";
option (udpa.annotations.file_status).package_version_status = ACTIVE;
// [#protodoc-title: Dynamic forward proxy cluster configuration]
// Configuration for the dynamic forward proxy cluster. See the :ref:`architecture overview
// ` for more information.
// [#extension: envoy.clusters.dynamic_forward_proxy]
message ClusterConfig {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.cluster.dynamic_forward_proxy.v2alpha.ClusterConfig";
oneof cluster_implementation_specifier {
// The DNS cache configuration that the cluster will attach to. Note this configuration must
// match that of associated :ref:`dynamic forward proxy HTTP filter configuration
// `.
common.dynamic_forward_proxy.v3.DnsCacheConfig dns_cache_config = 1;
// Configuration for sub clusters, when this configuration is enabled,
// Envoy will create an independent sub cluster dynamically for each host:port.
// Most of the configuration of a sub cluster is inherited from the current cluster,
// i.e. health_checks, dns_resolvers and etc.
// And the load_assignment will be set to the only one endpoint, host:port.
//
// Compared to the dns_cache_config, it has the following advantages:
//
// 1. sub clusters will be created with the STRICT_DNS DiscoveryType,
// so that Envoy will use all of the IPs resolved from the host.
//
// 2. each sub cluster is full featured cluster, with lb_policy and health check and etc enabled.
//
SubClustersConfig sub_clusters_config = 4;
}
// If true allow the cluster configuration to disable the auto_sni and auto_san_validation options
// in the :ref:`cluster's upstream_http_protocol_options
// `
bool allow_insecure_cluster_options = 2;
// If true allow HTTP/2 and HTTP/3 connections to be reused for requests to different
// origins than the connection was initially created for. This will only happen when the
// resolved address for the new connection matches the peer address of the connection and
// the TLS certificate is also valid for the new hostname. For example, if a connection
// has previously been established to foo.example.com at IP 1.2.3.4 with a certificate
// that is valid for ``*.example.com``, then this connection could be used for requests to
// bar.example.com if that also resolved to 1.2.3.4.
//
// .. note::
// By design, this feature will maximize reuse of connections. This means that instead
// opening a new connection when an existing connection reaches the maximum number of
// concurrent streams, requests will instead be sent to the existing connection.
//
// .. note::
// The coalesced connections might be to upstreams that would not be otherwise
// selected by Envoy. See the section `Connection Reuse in RFC 7540
// `_
//
bool allow_coalesced_connections = 3;
}
// Configuration for sub clusters. Hard code STRICT_DNS cluster type now.
message SubClustersConfig {
// The :ref:`load balancer type ` to use
// when picking a host in a sub cluster. Note that CLUSTER_PROVIDED is not allowed here.
config.cluster.v3.Cluster.LbPolicy lb_policy = 1 [(validate.rules).enum = {defined_only: true}];
// The maximum number of sub clusters that the DFP cluster will hold. If not specified defaults to 1024.
google.protobuf.UInt32Value max_sub_clusters = 2 [(validate.rules).uint32 = {gt: 0}];
// The TTL for sub clusters that are unused. Sub clusters that have not been used in the configured time
// interval will be purged. If not specified defaults to 5m.
google.protobuf.Duration sub_cluster_ttl = 3 [(validate.rules).duration = {gt {}}];
// Sub clusters that should be created & warmed upon creation. This might provide a
// performance improvement, in the form of cache hits, for sub clusters that are going to be
// warmed during steady state and are known at config load time.
repeated config.core.v3.SocketAddress preresolve_clusters = 4;
}