linkerd2-proxy-api 0.18.0

Linkerd Proxy API gRPC bindings and utilities
Documentation
syntax = "proto3";

package io.linkerd.proxy.http_route;
option go_package = "github.com/linkerd/linkerd2-proxy-api/go/http_route";

import "http_types.proto";
import "google/protobuf/duration.proto";

// Describes how to match an `:authority` or `host` header.
message HostMatch {
    oneof match {
        // Match an exact hostname, e.g. www.example.com.
        string exact = 1;

        // Match a hostname as a wildcard suffix, e.g. *.example.com.
        Suffix suffix = 2;
    }

    // A match like `*.example.com` is encoded as [com, example].
    message Suffix { repeated string reverse_labels = 1; }
}

// Describes a set of matches, ALL of which must apply.
message HttpRouteMatch {
  // Matches requests by path.
  PathMatch path = 1;

  // A set of header value matches that must be satisified. This match is not
  // comprehensive, so requests may include headers that are not covered by this
  // match.
  repeated HeaderMatch headers = 2;

  // A set of query parmaeter value matches that must be satisified. This match
  // is not comprehensive, so requests may include query parameters that are not
  // covered by this match.
  repeated QueryParamMatch query_params = 3;

  // If specified, restricts the match to a single HTTP method.
  io.linkerd.proxy.http_types.HttpMethod method  = 4;
}

// Describes how to match a path.
message PathMatch {
  oneof kind {
    string exact = 1;
    string prefix = 2;
    string regex = 3;
  }
}

// Describes how to match a header by name and value.
message HeaderMatch {
  string name = 1;

  oneof value {
    bytes exact = 2;
    string regex = 3;
  }
}

// Describes how to match a query parameter by name and value.
message QueryParamMatch {
  string name = 1;

  oneof value {
    string exact = 2;
    string regex = 3;
  }
}

// Configures a route to modify a request's headers.
//
// Modifications are to be applied in the order they are described here:
// additions apply first, then sets, and then removals.
message RequestHeaderModifier {
    // A list of headers name-value pairs to set on requests, augmenting any
    // existing values for the header.
    io.linkerd.proxy.http_types.Headers add = 1;

    // A list of headers name-value pairs to set on requests, replacing any
    // existing values for the header.
    io.linkerd.proxy.http_types.Headers set = 2;

    // A list of headers names to be removed from requests.
    repeated string remove = 3;
}

// Configures a route to modify a response's headers.
//
// Modifications are to be applied in the order they are described here:
// additions apply first, then sets, and then removals.
message ResponseHeaderModifier {
    // A list of headers name-value pairs to set on responses, augmenting any
    // existing values for the header.
    io.linkerd.proxy.http_types.Headers add = 1;

    // A list of headers name-value pairs to set on responses, replacing any
    // existing values for the header.
    io.linkerd.proxy.http_types.Headers set = 2;

    // A list of headers names to be removed from responses.
    repeated string remove = 3;
}


// Configures a route to respond with a redirect response. The `location` header
// is set with the given URL parameters.
message RequestRedirect {
    // The scheme value to be used in the `location` header. If not specified,
    // the original request's scheme is used.
    io.linkerd.proxy.http_types.Scheme scheme = 1;

    // The host value to be used in the `location` header. If not specified, the
    // original request's host is used.
    string host = 2;

    // If set, configures how the request's path should be modified for use in
    // the `location` header. If not specified, the original request's path is
    // used.
    PathModifier path = 3;

    // If set, specifies the port to use in the `location` header.
    uint32 port = 4;

    // The status code to use in the HTTP response. If not specified, 301 is
    // used.
    uint32 status = 5;
}

// Describes how a path value may be rewritten in a route.
message PathModifier {
    oneof replace {
        // Indicates that the path should be replaced with the given value.
        string full = 1;

        // Indicates that the path prefix should be replaced with the given
        // value. When used, the route MUST match the request with PathMatch
        // prefix match. Server implementations SHOULD prevent the useof prefix
        // modifiers on routes that do use a PathMatch prefix match. Proxyies
        // MUST not process requests for routes where this condition is not
        // satisfied.
        string prefix = 2;
    }
}

// Configures a route to respond with a fixed response.
message HttpFailureInjector {
  // The status code to use in the HTTP response. Must be specified.
  uint32 status = 1;

  // An error message to log and include in the `l5d-proxy-err` header.
  string message = 2;

  // If specified, the rate of requests that should be failed. If not specified,
  // ALL requests are failed.
  Ratio ratio = 3;
}

// A ratio (i.e., of requests) to which an filter should be applied.
//
// Represents fractional values on [0, 1].
message Ratio {
  uint32 numerator = 1;

  // MUST not be zero.
  uint32 denominator = 2;
}

message Timeouts {
  // Limits the the time a stream may be active after all request frames have
  // been processed.
  google.protobuf.Duration response = 1;

  // Limits the total duration of the stream from the request being initiated
  // until all frames have been processed.
  google.protobuf.Duration request = 2;

  // Limits the amount of time a stream may be idle (i.e. with no frames being
  // processed).
  google.protobuf.Duration idle = 3;
}