123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616 |
- // Copyright 2022 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- syntax = "proto3";
- package google.cloud.networkservices.v1;
- import "google/api/field_behavior.proto";
- import "google/api/resource.proto";
- import "google/protobuf/duration.proto";
- import "google/protobuf/field_mask.proto";
- import "google/protobuf/timestamp.proto";
- option csharp_namespace = "Google.Cloud.NetworkServices.V1";
- option go_package = "google.golang.org/genproto/googleapis/cloud/networkservices/v1;networkservices";
- option java_multiple_files = true;
- option java_outer_classname = "HttpRouteProto";
- option java_package = "com.google.cloud.networkservices.v1";
- option php_namespace = "Google\\Cloud\\NetworkServices\\V1";
- option ruby_package = "Google::Cloud::NetworkServices::V1";
- // HttpRoute is the resource defining how HTTP traffic should be routed by a
- // Mesh or Gateway resource.
- message HttpRoute {
- option (google.api.resource) = {
- type: "networkservices.googleapis.com/HttpRoute"
- pattern: "projects/{project}/locations/{location}/httpRoutes/{http_route}"
- };
- // Specifies how to select a route rule based on HTTP request headers.
- message HeaderMatch {
- // Represents an integer value range.
- message IntegerRange {
- // Start of the range (inclusive)
- int32 start = 1;
- // End of the range (exclusive)
- int32 end = 2;
- }
- oneof MatchType {
- // The value of the header should match exactly the content of
- // exact_match.
- string exact_match = 2;
- // The value of the header must match the regular expression specified in
- // regex_match. For regular expression grammar, please see:
- // https://github.com/google/re2/wiki/Syntax
- string regex_match = 3;
- // The value of the header must start with the contents of prefix_match.
- string prefix_match = 4;
- // A header with header_name must exist. The match takes place whether or
- // not the header has a value.
- bool present_match = 5;
- // The value of the header must end with the contents of suffix_match.
- string suffix_match = 6;
- // If specified, the rule will match if the request header value is within
- // the range.
- IntegerRange range_match = 7;
- }
- // The name of the HTTP header to match against.
- string header = 1;
- // If specified, the match result will be inverted before checking. Default
- // value is set to false.
- bool invert_match = 8;
- }
- // Specifications to match a query parameter in the request.
- message QueryParameterMatch {
- oneof MatchType {
- // The value of the query parameter must exactly match the contents of
- // exact_match.
- //
- // Only one of exact_match, regex_match, or present_match must be set.
- string exact_match = 2;
- // The value of the query parameter must match the regular expression
- // specified by regex_match. For regular expression grammar, please see
- // https://github.com/google/re2/wiki/Syntax
- //
- // Only one of exact_match, regex_match, or present_match must be set.
- string regex_match = 3;
- // Specifies that the QueryParameterMatcher matches if request contains
- // query parameter, irrespective of whether the parameter has a value or
- // not.
- //
- // Only one of exact_match, regex_match, or present_match must be set.
- bool present_match = 4;
- }
- // The name of the query parameter to match.
- string query_parameter = 1;
- }
- // RouteMatch defines specifications used to match requests. If multiple match
- // types are set, this RouteMatch will match if ALL type of matches are
- // matched.
- message RouteMatch {
- oneof PathMatch {
- // The HTTP request path value should exactly match this value.
- //
- // Only one of full_path_match, prefix_match, or regex_match should be
- // used.
- string full_path_match = 1;
- // The HTTP request path value must begin with specified prefix_match.
- // prefix_match must begin with a /.
- //
- // Only one of full_path_match, prefix_match, or regex_match should be
- // used.
- string prefix_match = 2;
- // The HTTP request path value must satisfy the regular expression
- // specified by regex_match after removing any query parameters and anchor
- // supplied with the original URL. For regular expression grammar, please
- // see https://github.com/google/re2/wiki/Syntax
- //
- // Only one of full_path_match, prefix_match, or regex_match should be
- // used.
- string regex_match = 3;
- }
- // Specifies if prefix_match and full_path_match matches are case sensitive.
- // The default value is false.
- bool ignore_case = 4;
- // Specifies a list of HTTP request headers to match against. ALL of the
- // supplied headers must be matched.
- repeated HeaderMatch headers = 5;
- // Specifies a list of query parameters to match against. ALL of the query
- // parameters must be matched.
- repeated QueryParameterMatch query_parameters = 6;
- }
- // Specifications of a destination to which the request should be routed to.
- message Destination {
- // The URL of a BackendService to route traffic to.
- string service_name = 1 [(google.api.resource_reference) = {
- type: "compute.googleapis.com/BackendService"
- }];
- // Specifies the proportion of requests forwarded to the backend referenced
- // by the serviceName field. This is computed as:
- // weight/Sum(weights in this destination list).
- // For non-zero values, there may be some epsilon from the exact proportion
- // defined here depending on the precision an implementation supports.
- //
- // If only one serviceName is specified and it has a weight greater than 0,
- // 100% of the traffic is forwarded to that backend.
- //
- // If weights are specified for any one service name, they need to be
- // specified for all of them.
- //
- // If weights are unspecified for all services, then, traffic is distributed
- // in equal proportions to all of them.
- int32 weight = 2;
- }
- // The specification for redirecting traffic.
- message Redirect {
- // Supported HTTP response code.
- enum ResponseCode {
- // Default value
- RESPONSE_CODE_UNSPECIFIED = 0;
- // Corresponds to 301.
- MOVED_PERMANENTLY_DEFAULT = 1;
- // Corresponds to 302.
- FOUND = 2;
- // Corresponds to 303.
- SEE_OTHER = 3;
- // Corresponds to 307. In this case, the request method will be retained.
- TEMPORARY_REDIRECT = 4;
- // Corresponds to 308. In this case, the request method will be retained.
- PERMANENT_REDIRECT = 5;
- }
- // The host that will be used in the redirect response instead of the one
- // that was supplied in the request.
- string host_redirect = 1;
- // The path that will be used in the redirect response instead of the one
- // that was supplied in the request.
- // path_redirect can not be supplied together with prefix_redirect. Supply
- // one alone or neither. If neither is supplied, the path of the original
- // request will be used for the redirect.
- string path_redirect = 2;
- // Indicates that during redirection, the matched prefix (or path) should be
- // swapped with this value. This option allows URLs be dynamically created
- // based on the request.
- string prefix_rewrite = 3;
- // The HTTP Status code to use for the redirect.
- ResponseCode response_code = 4;
- // If set to true, the URL scheme in the redirected request is set to https.
- // If set to false, the URL scheme of the redirected request will remain the
- // same as that of the request.
- //
- // The default is set to false.
- bool https_redirect = 5;
- // if set to true, any accompanying query portion of the original URL is
- // removed prior to redirecting the request. If set to false, the query
- // portion of the original URL is retained.
- //
- // The default is set to false.
- bool strip_query = 6;
- // The port that will be used in the redirected request instead of the one
- // that was supplied in the request.
- int32 port_redirect = 7;
- }
- // The specification for fault injection introduced into traffic to test the
- // resiliency of clients to destination service failure. As part of fault
- // injection, when clients send requests to a destination, delays can be
- // introduced by client proxy on a percentage of requests before sending those
- // requests to the destination service. Similarly requests can be aborted by
- // client proxy for a percentage of requests.
- message FaultInjectionPolicy {
- // Specification of how client requests are delayed as part of fault
- // injection before being sent to a destination.
- message Delay {
- // Specify a fixed delay before forwarding the request.
- google.protobuf.Duration fixed_delay = 1;
- // The percentage of traffic on which delay will be injected.
- //
- // The value must be between [0, 100]
- int32 percentage = 2;
- }
- // Specification of how client requests are aborted as part of fault
- // injection before being sent to a destination.
- message Abort {
- // The HTTP status code used to abort the request.
- //
- // The value must be between 200 and 599 inclusive.
- int32 http_status = 1;
- // The percentage of traffic which will be aborted.
- //
- // The value must be between [0, 100]
- int32 percentage = 2;
- }
- // The specification for injecting delay to client requests.
- Delay delay = 1;
- // The specification for aborting to client requests.
- Abort abort = 2;
- }
- // The specification for modifying HTTP header in HTTP request and HTTP
- // response.
- message HeaderModifier {
- // Completely overwrite/replace the headers with given map where key is the
- // name of the header, value is the value of the header.
- map<string, string> set = 1;
- // Add the headers with given map where key is the name of the header, value
- // is the value of the header.
- map<string, string> add = 2;
- // Remove headers (matching by header names) specified in the list.
- repeated string remove = 3;
- }
- // The specification for modifying the URL of the request, prior to forwarding
- // the request to the destination.
- message URLRewrite {
- // Prior to forwarding the request to the selected destination, the matching
- // portion of the requests path is replaced by this value.
- string path_prefix_rewrite = 1;
- // Prior to forwarding the request to the selected destination, the requests
- // host header is replaced by this value.
- string host_rewrite = 2;
- }
- // The specifications for retries.
- message RetryPolicy {
- // Specifies one or more conditions when this retry policy applies. Valid
- // values are:
- // 5xx: Proxy will attempt a retry if the destination service responds
- // with any 5xx response code, of if the destination service does not
- // respond at all, example: disconnect, reset, read timeout, connection
- // failure and refused streams.
- //
- // gateway-error: Similar to 5xx, but only applies to response codes 502,
- // 503, 504.
- //
- // reset: Proxy will attempt a retry if the destination service does not
- // respond at all (disconnect/reset/read timeout)
- //
- // connect-failure: Proxy will retry on failures connecting to destination
- // for example due to connection timeouts.
- //
- // retriable-4xx: Proxy will retry fro retriable 4xx response codes.
- // Currently the only retriable error supported is 409.
- //
- // refused-stream: Proxy will retry if the destination resets the stream
- // with a REFUSED_STREAM error code. This reset type indicates that it
- // is safe to retry.
- repeated string retry_conditions = 1;
- // Specifies the allowed number of retries. This number must be > 0. If not
- // specified, default to 1.
- int32 num_retries = 2;
- // Specifies a non-zero timeout per retry attempt.
- google.protobuf.Duration per_try_timeout = 3;
- }
- // Specifies the policy on how requests are shadowed to a separate mirrored
- // destination service. The proxy does not wait for responses from the
- // shadow service. Prior to sending traffic to the shadow service, the
- // host/authority header is suffixed with -shadow.
- message RequestMirrorPolicy {
- // The destination the requests will be mirrored to. The weight of the
- // destination will be ignored.
- Destination destination = 1;
- }
- // The Specification for allowing client side cross-origin requests.
- message CorsPolicy {
- // Specifies the list of origins that will be allowed to do CORS requests.
- // An origin is allowed if it matches either an item in allow_origins or
- // an item in allow_origin_regexes.
- repeated string allow_origins = 1;
- // Specifies the regular expression patterns that match allowed origins. For
- // regular expression grammar, please see
- // https://github.com/google/re2/wiki/Syntax.
- repeated string allow_origin_regexes = 2;
- // Specifies the content for Access-Control-Allow-Methods header.
- repeated string allow_methods = 3;
- // Specifies the content for Access-Control-Allow-Headers header.
- repeated string allow_headers = 4;
- // Specifies the content for Access-Control-Expose-Headers header.
- repeated string expose_headers = 5;
- // Specifies how long result of a preflight request can be cached in
- // seconds. This translates to the Access-Control-Max-Age header.
- string max_age = 6;
- // In response to a preflight request, setting this to true indicates that
- // the actual request can include user credentials. This translates to the
- // Access-Control-Allow-Credentials header.
- //
- // Default value is false.
- bool allow_credentials = 7;
- // If true, the CORS policy is disabled. The default value is false, which
- // indicates that the CORS policy is in effect.
- bool disabled = 8;
- }
- // The specifications for routing traffic and applying associated policies.
- message RouteAction {
- // The destination to which traffic should be forwarded.
- repeated Destination destinations = 1;
- // If set, the request is directed as configured by this field.
- Redirect redirect = 2;
- // The specification for fault injection introduced into traffic to test the
- // resiliency of clients to backend service failure. As part of fault
- // injection, when clients send requests to a backend service, delays can be
- // introduced on a percentage of requests before sending those requests to
- // the backend service. Similarly requests from clients can be aborted for a
- // percentage of requests.
- //
- // timeout and retry_policy will be ignored by clients that are configured
- // with a fault_injection_policy
- FaultInjectionPolicy fault_injection_policy = 4;
- // The specification for modifying the headers of a matching request prior
- // to delivery of the request to the destination.
- HeaderModifier request_header_modifier = 5;
- // The specification for modifying the headers of a response prior to
- // sending the response back to the client.
- HeaderModifier response_header_modifier = 6;
- // The specification for rewrite URL before forwarding requests to the
- // destination.
- URLRewrite url_rewrite = 7;
- // Specifies the timeout for selected route. Timeout is computed from the
- // time the request has been fully processed (i.e. end of stream) up until
- // the response has been completely processed. Timeout includes all retries.
- google.protobuf.Duration timeout = 8;
- // Specifies the retry policy associated with this route.
- RetryPolicy retry_policy = 9;
- // Specifies the policy on how requests intended for the routes destination
- // are shadowed to a separate mirrored destination. Proxy will not wait for
- // the shadow destination to respond before returning the response. Prior to
- // sending traffic to the shadow service, the host/authority header is
- // suffixed with -shadow.
- RequestMirrorPolicy request_mirror_policy = 10;
- // The specification for allowing client side cross-origin requests.
- CorsPolicy cors_policy = 11;
- }
- // Specifies how to match traffic and how to route traffic when traffic is
- // matched.
- message RouteRule {
- // A list of matches define conditions used for matching the rule against
- // incoming HTTP requests. Each match is independent, i.e. this rule will be
- // matched if ANY one of the matches is satisfied.
- //
- // If no matches field is specified, this rule will unconditionally match
- // traffic.
- //
- // If a default rule is desired to be configured, add a rule with no matches
- // specified to the end of the rules list.
- repeated RouteMatch matches = 1;
- // The detailed rule defining how to route matched traffic.
- RouteAction action = 2;
- }
- // Required. Name of the HttpRoute resource. It matches pattern
- // `projects/*/locations/global/httpRoutes/http_route_name>`.
- string name = 1 [(google.api.field_behavior) = REQUIRED];
- // Output only. Server-defined URL of this resource
- string self_link = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
- // Optional. A free-text description of the resource. Max length 1024 characters.
- string description = 2 [(google.api.field_behavior) = OPTIONAL];
- // Output only. The timestamp when the resource was created.
- google.protobuf.Timestamp create_time = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
- // Output only. The timestamp when the resource was updated.
- google.protobuf.Timestamp update_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
- // Required. Hostnames define a set of hosts that should match against the HTTP host
- // header to select a HttpRoute to process the request. Hostname is the fully
- // qualified domain name of a network host, as defined by RFC 1123 with the
- // exception that:
- // - IPs are not allowed.
- // - A hostname may be prefixed with a wildcard label (*.). The wildcard
- // label must appear by itself as the first label.
- //
- // Hostname can be "precise" which is a domain name without the terminating
- // dot of a network host (e.g. "foo.example.com") or "wildcard", which is a
- // domain name prefixed with a single wildcard label (e.g. *.example.com).
- //
- // Note that as per RFC1035 and RFC1123, a label must consist of lower case
- // alphanumeric characters or '-', and must start and end with an alphanumeric
- // character. No other punctuation is allowed.
- //
- // The routes associated with a Mesh or Gateways must have unique hostnames.
- // If you attempt to attach multiple routes with conflicting hostnames,
- // the configuration will be rejected.
- //
- // For example, while it is acceptable for routes for the hostnames
- // "*.foo.bar.com" and "*.bar.com" to be associated with the same Mesh (or
- // Gateways under the same scope), it is not possible to associate two routes
- // both with "*.bar.com" or both with "bar.com".
- repeated string hostnames = 5 [(google.api.field_behavior) = REQUIRED];
- // Optional. Meshes defines a list of meshes this HttpRoute is attached to, as one of
- // the routing rules to route the requests served by the mesh.
- //
- // Each mesh reference should match the pattern:
- // `projects/*/locations/global/meshes/<mesh_name>`
- //
- // The attached Mesh should be of a type SIDECAR
- repeated string meshes = 8 [
- (google.api.field_behavior) = OPTIONAL,
- (google.api.resource_reference) = {
- type: "networkservices.googleapis.com/Mesh"
- }
- ];
- // Optional. Gateways defines a list of gateways this HttpRoute is attached to, as one
- // of the routing rules to route the requests served by the gateway.
- //
- // Each gateway reference should match the pattern:
- // `projects/*/locations/global/gateways/<gateway_name>`
- repeated string gateways = 9 [
- (google.api.field_behavior) = OPTIONAL,
- (google.api.resource_reference) = {
- type: "networkservices.googleapis.com/Gateway"
- }
- ];
- // Optional. Set of label tags associated with the HttpRoute resource.
- map<string, string> labels = 10 [(google.api.field_behavior) = OPTIONAL];
- // Required. Rules that define how traffic is routed and handled.
- // Rules will be matched sequentially based on the RouteMatch specified for
- // the rule.
- repeated RouteRule rules = 6 [(google.api.field_behavior) = REQUIRED];
- }
- // Request used with the ListHttpRoutes method.
- message ListHttpRoutesRequest {
- // Required. The project and location from which the HttpRoutes should be
- // listed, specified in the format `projects/*/locations/global`.
- string parent = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- child_type: "networkservices.googleapis.com/HttpRoute"
- }
- ];
- // Maximum number of HttpRoutes to return per call.
- int32 page_size = 2;
- // The value returned by the last `ListHttpRoutesResponse`
- // Indicates that this is a continuation of a prior `ListHttpRoutes` call,
- // and that the system should return the next page of data.
- string page_token = 3;
- }
- // Response returned by the ListHttpRoutes method.
- message ListHttpRoutesResponse {
- // List of HttpRoute resources.
- repeated HttpRoute http_routes = 1;
- // If there might be more results than those appearing in this response, then
- // `next_page_token` is included. To get the next set of results, call this
- // method again using the value of `next_page_token` as `page_token`.
- string next_page_token = 2;
- }
- // Request used by the GetHttpRoute method.
- message GetHttpRouteRequest {
- // Required. A name of the HttpRoute to get. Must be in the format
- // `projects/*/locations/global/httpRoutes/*`.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "networkservices.googleapis.com/HttpRoute"
- }
- ];
- }
- // Request used by the HttpRoute method.
- message CreateHttpRouteRequest {
- // Required. The parent resource of the HttpRoute. Must be in the
- // format `projects/*/locations/global`.
- string parent = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- child_type: "networkservices.googleapis.com/HttpRoute"
- }
- ];
- // Required. Short name of the HttpRoute resource to be created.
- string http_route_id = 2 [(google.api.field_behavior) = REQUIRED];
- // Required. HttpRoute resource to be created.
- HttpRoute http_route = 3 [(google.api.field_behavior) = REQUIRED];
- }
- // Request used by the UpdateHttpRoute method.
- message UpdateHttpRouteRequest {
- // Optional. Field mask is used to specify the fields to be overwritten in the
- // HttpRoute resource by the update.
- // The fields specified in the update_mask are relative to the resource, not
- // the full request. A field will be overwritten if it is in the mask. If the
- // user does not provide a mask then all fields will be overwritten.
- google.protobuf.FieldMask update_mask = 1 [(google.api.field_behavior) = OPTIONAL];
- // Required. Updated HttpRoute resource.
- HttpRoute http_route = 2 [(google.api.field_behavior) = REQUIRED];
- }
- // Request used by the DeleteHttpRoute method.
- message DeleteHttpRouteRequest {
- // Required. A name of the HttpRoute to delete. Must be in the format
- // `projects/*/locations/global/httpRoutes/*`.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "networkservices.googleapis.com/HttpRoute"
- }
- ];
- }
|