2023-08-03 18:42:04 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
2023-08-21 17:31:54 +00:00
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
2023-08-03 18:42:04 +00:00
|
|
|
|
|
|
|
syntax = "proto3";
|
|
|
|
|
2023-09-22 16:51:15 +00:00
|
|
|
package hashicorp.consul.mesh.v2beta1;
|
2023-08-03 18:42:04 +00:00
|
|
|
|
|
|
|
import "google/protobuf/duration.proto";
|
2023-09-21 21:18:47 +00:00
|
|
|
import "pbresource/annotations.proto";
|
2023-08-03 18:42:04 +00:00
|
|
|
|
|
|
|
// DestinationPolicy is the destination-controlled set of defaults that
|
2024-01-29 18:43:41 +00:00
|
|
|
// are used when similar controls defined in an DestinationsConfiguration are
|
|
|
|
// left unspecified.
|
2023-08-03 18:42:04 +00:00
|
|
|
//
|
|
|
|
// Users may wish to share commonly configured settings for communicating with
|
|
|
|
// a service in one place, but yet retain the ability to tweak those on a
|
|
|
|
// client-by-client basis, which is why there are separate resources to control
|
|
|
|
// the definition of these values from either end of the connection.
|
|
|
|
//
|
|
|
|
// This is a Resource type.
|
|
|
|
message DestinationPolicy {
|
2023-09-21 21:18:47 +00:00
|
|
|
option (hashicorp.consul.resource.spec) = {scope: SCOPE_NAMESPACE};
|
|
|
|
|
2024-01-29 18:43:41 +00:00
|
|
|
// PortConfigs defines the destination policy for a specific port on a service.
|
|
|
|
//
|
|
|
|
// For more details on potential values of the service port identifier key,
|
|
|
|
// see documentation for Service.ServicePort.
|
2023-08-03 18:42:04 +00:00
|
|
|
map<string, DestinationConfig> port_configs = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message DestinationConfig {
|
|
|
|
// ConnectTimeout is the timeout for establishing new network connections
|
|
|
|
// to this service.
|
2023-10-13 14:55:58 +00:00
|
|
|
// +kubebuilder:validation:Format=duration
|
2023-08-03 18:42:04 +00:00
|
|
|
google.protobuf.Duration connect_timeout = 1;
|
|
|
|
|
|
|
|
// RequestTimeout is the timeout for an HTTP request to complete before the
|
|
|
|
// connection is automatically terminated. If unspecified, defaults to 15
|
|
|
|
// seconds.
|
2023-10-13 14:55:58 +00:00
|
|
|
// +kubebuilder:validation:Format=duration
|
2023-08-03 18:42:04 +00:00
|
|
|
google.protobuf.Duration request_timeout = 2;
|
|
|
|
|
|
|
|
// LoadBalancer determines the load balancing policy and configuration for
|
|
|
|
// services issuing requests to this upstream service.
|
|
|
|
LoadBalancer load_balancer = 3;
|
|
|
|
|
|
|
|
// LocalityPrioritization controls whether the locality of services within the
|
|
|
|
// local partition will be used to prioritize connectivity.
|
|
|
|
LocalityPrioritization locality_prioritization = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
message LocalityPrioritization {
|
|
|
|
// Mode specifies the type of prioritization that will be performed
|
|
|
|
// when selecting nodes in the local partition.
|
|
|
|
// Valid values are: "" (default "none"), "none", and "failover".
|
|
|
|
LocalityPrioritizationMode mode = 1;
|
|
|
|
}
|
|
|
|
|
2023-10-13 14:55:58 +00:00
|
|
|
// +kubebuilder:validation:Enum=LOCALITY_PRIORITIZATION_MODE_UNSPECIFIED;LOCALITY_PRIORITIZATION_MODE_NONE;LOCALITY_PRIORITIZATION_MODE_FAILOVER
|
|
|
|
// +kubebuilder:validation:Type=string
|
2023-08-03 18:42:04 +00:00
|
|
|
enum LocalityPrioritizationMode {
|
|
|
|
LOCALITY_PRIORITIZATION_MODE_UNSPECIFIED = 0;
|
|
|
|
LOCALITY_PRIORITIZATION_MODE_NONE = 1;
|
|
|
|
LOCALITY_PRIORITIZATION_MODE_FAILOVER = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// LoadBalancer determines the load balancing policy and configuration
|
|
|
|
// for services issuing requests to this upstream service.
|
|
|
|
//
|
|
|
|
message LoadBalancer {
|
|
|
|
// Policy is the load balancing policy used to select a host
|
|
|
|
LoadBalancerPolicy policy = 1;
|
|
|
|
|
|
|
|
// HashPolicies is a list of hash policies to use for hashing load balancing
|
|
|
|
// algorithms. Hash policies are evaluated individually and combined such
|
|
|
|
// that identical lists result in the same hash.
|
|
|
|
//
|
|
|
|
// If no hash policies are present, or none are successfully evaluated,
|
|
|
|
// then a random backend host will be selected.
|
|
|
|
repeated HashPolicy hash_policies = 2;
|
|
|
|
|
|
|
|
oneof config {
|
|
|
|
// RingHashConfig contains configuration for the "ring_hash" policy type
|
|
|
|
RingHashConfig ring_hash_config = 3;
|
|
|
|
|
|
|
|
// LeastRequestConfig contains configuration for the "least_request" policy type
|
|
|
|
LeastRequestConfig least_request_config = 4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-10-13 14:55:58 +00:00
|
|
|
// +kubebuilder:validation:Enum=LOAD_BALANCER_POLICY_UNSPECIFIED;LOAD_BALANCER_POLICY_RANDOM;LOAD_BALANCER_POLICY_ROUND_ROBIN;LOAD_BALANCER_POLICY_LEAST_REQUEST;LOAD_BALANCER_POLICY_MAGLEV;LOAD_BALANCER_POLICY_RING_HASH
|
|
|
|
// +kubebuilder:validation:Type=string
|
2023-08-03 18:42:04 +00:00
|
|
|
enum LoadBalancerPolicy {
|
|
|
|
LOAD_BALANCER_POLICY_UNSPECIFIED = 0;
|
|
|
|
LOAD_BALANCER_POLICY_RANDOM = 1;
|
|
|
|
LOAD_BALANCER_POLICY_ROUND_ROBIN = 2;
|
|
|
|
LOAD_BALANCER_POLICY_LEAST_REQUEST = 3;
|
|
|
|
LOAD_BALANCER_POLICY_MAGLEV = 4;
|
|
|
|
LOAD_BALANCER_POLICY_RING_HASH = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
// RingHashConfig contains configuration for the "ring_hash" policy type
|
|
|
|
message RingHashConfig {
|
|
|
|
// MinimumRingSize determines the minimum number of entries in the hash ring
|
|
|
|
uint64 minimum_ring_size = 1;
|
|
|
|
|
|
|
|
// MaximumRingSize determines the maximum number of entries in the hash ring
|
|
|
|
uint64 maximum_ring_size = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// LeastRequestConfig contains configuration for the "least_request" policy type
|
|
|
|
message LeastRequestConfig {
|
|
|
|
// ChoiceCount determines the number of random healthy hosts from which to select the one with the least requests.
|
|
|
|
uint32 choice_count = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// HashPolicy defines which attributes will be hashed by hash-based LB algorithms
|
|
|
|
message HashPolicy {
|
|
|
|
// Field is the attribute type to hash on.
|
|
|
|
// Must be one of "header","cookie", or "query_parameter".
|
|
|
|
// Cannot be specified along with SourceIP.
|
|
|
|
HashPolicyField field = 1;
|
|
|
|
|
|
|
|
// FieldValue is the value to hash.
|
|
|
|
// ie. header name, cookie name, URL query parameter name
|
|
|
|
// Cannot be specified along with SourceIP.
|
|
|
|
string field_value = 2;
|
|
|
|
|
|
|
|
// CookieConfig contains configuration for the "cookie" hash policy type.
|
|
|
|
CookieConfig cookie_config = 3;
|
|
|
|
|
|
|
|
// SourceIP determines whether the hash should be of the source IP rather than of a field and field value.
|
|
|
|
// Cannot be specified along with Field or FieldValue.
|
|
|
|
bool source_ip = 4;
|
|
|
|
|
|
|
|
// Terminal will short circuit the computation of the hash when multiple hash policies are present.
|
|
|
|
// If a hash is computed when a Terminal policy is evaluated,
|
|
|
|
// then that hash will be used and subsequent hash policies will be ignored.
|
|
|
|
bool terminal = 5;
|
|
|
|
}
|
|
|
|
|
2023-10-13 14:55:58 +00:00
|
|
|
// +kubebuilder:validation:Enum=HASH_POLICY_FIELD_UNSPECIFIED;HASH_POLICY_FIELD_HEADER;HASH_POLICY_FIELD_COOKIE;HASH_POLICY_FIELD_QUERY_PARAMETER
|
|
|
|
// +kubebuilder:validation:Type=string
|
2023-08-03 18:42:04 +00:00
|
|
|
enum HashPolicyField {
|
|
|
|
HASH_POLICY_FIELD_UNSPECIFIED = 0;
|
|
|
|
HASH_POLICY_FIELD_HEADER = 1;
|
|
|
|
HASH_POLICY_FIELD_COOKIE = 2;
|
|
|
|
HASH_POLICY_FIELD_QUERY_PARAMETER = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
// CookieConfig contains configuration for the "cookie" hash policy type.
|
|
|
|
// This is specified to have Envoy generate a cookie for a client on its first request.
|
|
|
|
message CookieConfig {
|
|
|
|
// Generates a session cookie with no expiration.
|
|
|
|
bool session = 1;
|
|
|
|
|
|
|
|
// TTL for generated cookies. Cannot be specified for session cookies.
|
2023-10-13 14:55:58 +00:00
|
|
|
// +kubebuilder:validation:Format=duration
|
2023-08-03 18:42:04 +00:00
|
|
|
google.protobuf.Duration ttl = 2;
|
|
|
|
|
|
|
|
// The path to set for the cookie
|
|
|
|
string path = 3;
|
|
|
|
}
|