diff --git a/Gopkg.lock b/Gopkg.lock index 7b2903bd1fa..96f3709b10e 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -1664,15 +1664,14 @@ revision = "fbb02b2291d28baffd63558aa44b4b56f178d650" [[projects]] - branch = "master" - digest = "1:c44a77760372a998be8d4656e8d3c865f68735ec4cad1743a245903a58f64249" + digest = "1:7b5ce208ea2ca1f96322e6a5b616839fe49ea798648a013039f300475a1aadfc" name = "golang.org/x/xerrors" packages = [ ".", "internal", ] pruneopts = "UT" - revision = "3ee3066db522c6628d440a3a91c4abdd7f5ef22f" + revision = "a985d3407aa71f30cf86696ee0a2f409709f22e1" [[projects]] digest = "1:d2a8db567a76203e3b41c1f632d86485ffd57f8e650a0d1b19d240671c2fddd7" @@ -1705,7 +1704,7 @@ revision = "02b4e95473316948020af0b7a4f0f22c73929b0e" [[projects]] - digest = "1:d51efa1a467f426c6c490a450f9e064ef27ca3181fc9cc960996664be3c1b80a" + digest = "1:50e6297746c3c45c16be8855886890382796b6941db6b7b6fbcd62fe75109a51" name = "google.golang.org/grpc" packages = [ ".", @@ -1718,6 +1717,8 @@ "encoding", "encoding/proto", "grpclog", + "health", + "health/grpc_health_v1", "internal", "internal/backoff", "internal/channelz", @@ -2624,6 +2625,8 @@ "google.golang.org/genproto/googleapis/api/annotations", "google.golang.org/grpc", "google.golang.org/grpc/codes", + "google.golang.org/grpc/health", + "google.golang.org/grpc/health/grpc_health_v1", "google.golang.org/grpc/reflection", "google.golang.org/grpc/reflection/grpc_reflection_v1alpha", "google.golang.org/grpc/status", diff --git a/Gopkg.toml b/Gopkg.toml index 04b3e910d4f..cf5809c2df0 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -90,6 +90,11 @@ name = "golang.org/x/net" revision = "aaf60122140d3fcf75376d319f0554393160eb50" +# added to support knative v0.8.0 +[[override]] + name = "golang.org/x/xerrors" + revision = "a985d3407aa71f30cf86696ee0a2f409709f22e1" + [[override]] name = "k8s.io/klog" revision = "9cbb78b20423182f9e5b2a214dd255f5e117d2d1" diff --git a/changelog/v0.18.36/health-checks.yaml b/changelog/v0.18.36/health-checks.yaml new file mode 100644 index 00000000000..68fa2b91506 --- /dev/null +++ b/changelog/v0.18.36/health-checks.yaml @@ -0,0 +1,4 @@ +changelog: +- type: NEW_FEATURE + description: Add support for envoy health checks + issueLink: https://github.com/solo-io/gloo/issues/1113 diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto.sk.md new file mode 100644 index 00000000000..787d897b849 --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto.sk.md @@ -0,0 +1,75 @@ + +--- +title: "outlier_detection.proto" +weight: 5 +--- + + + + +### Package: `envoy.api.v2.cluster` +#### Types: + + +- [OutlierDetection](#outlierdetection) + + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto) + + + + + +--- +### OutlierDetection + + +See the :ref:`architecture overview ` for +more information on outlier detection. + +```yaml +"consecutive5xx": .google.protobuf.UInt32Value +"interval": .google.protobuf.Duration +"baseEjectionTime": .google.protobuf.Duration +"maxEjectionPercent": .google.protobuf.UInt32Value +"enforcingConsecutive5xx": .google.protobuf.UInt32Value +"enforcingSuccessRate": .google.protobuf.UInt32Value +"successRateMinimumHosts": .google.protobuf.UInt32Value +"successRateRequestVolume": .google.protobuf.UInt32Value +"successRateStdevFactor": .google.protobuf.UInt32Value +"consecutiveGatewayFailure": .google.protobuf.UInt32Value +"enforcingConsecutiveGatewayFailure": .google.protobuf.UInt32Value +"splitExternalLocalOriginErrors": bool +"consecutiveLocalOriginFailure": .google.protobuf.UInt32Value +"enforcingConsecutiveLocalOriginFailure": .google.protobuf.UInt32Value +"enforcingLocalOriginSuccessRate": .google.protobuf.UInt32Value + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `consecutive5xx` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of consecutive 5xx responses or local origin errors that are mapped to 5xx error codes before a consecutive 5xx ejection occurs. Defaults to 5. | | +| `interval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 10000ms or 10s. | | +| `baseEjectionTime` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The base time that a host is ejected for. The real time is equal to the base time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s. | | +| `maxEjectionPercent` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% but will eject at least one host regardless of the value. | | +| `enforcingConsecutive5xx` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. | | +| `enforcingSuccessRate` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. | | +| `successRateMinimumHosts` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5. | | +| `successRateRequestVolume` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100. | | +| `successRateStdevFactor` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900. | | +| `consecutiveGatewayFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of consecutive gateway failures (502, 503, 504 status codes) before a consecutive gateway failure ejection occurs. Defaults to 5. | | +| `enforcingConsecutiveGatewayFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0. | | +| `splitExternalLocalOriginErrors` | `bool` | Determines whether to distinguish local origin failures from external errors. If set to true the following configuration parameters are taken into account: :ref:`consecutive_local_origin_failure`, :ref:`enforcing_consecutive_local_origin_failure` and :ref:`enforcing_local_origin_success_rate`. Defaults to false. | | +| `consecutiveLocalOriginFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of consecutive locally originated failures before ejection occurs. Defaults to 5. Parameter takes effect only when :ref:`split_external_local_origin_errors` is set to true. | | +| `enforcingConsecutiveLocalOriginFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through consecutive locally originated failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. Parameter takes effect only when :ref:`split_external_local_origin_errors` is set to true. | | +| `enforcingLocalOriginSuccessRate` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through success rate statistics for locally originated errors. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. Parameter takes effect only when :ref:`split_external_local_origin_errors` is set to true. | | + + + + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/core/health_check.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/core/health_check.proto.sk.md new file mode 100644 index 00000000000..3ea84c38711 --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/core/health_check.proto.sk.md @@ -0,0 +1,234 @@ + +--- +title: "health_check.proto" +weight: 5 +--- + + + + +### Package: `envoy.api.v2.core` +#### Types: + + +- [HealthCheck](#healthcheck) +- [Payload](#payload) +- [HttpHealthCheck](#httphealthcheck) +- [TcpHealthCheck](#tcphealthcheck) +- [RedisHealthCheck](#redishealthcheck) +- [GrpcHealthCheck](#grpchealthcheck) +- [CustomHealthCheck](#customhealthcheck) + + + + +##### Enums: + + + - [HealthStatus](#healthstatus) + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/core/health_check.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/external/envoy/api/v2/core/health_check.proto) + + + + + +--- +### HealthCheck + + + +```yaml +"timeout": .google.protobuf.Duration +"interval": .google.protobuf.Duration +"initialJitter": .google.protobuf.Duration +"intervalJitter": .google.protobuf.Duration +"intervalJitterPercent": int +"unhealthyThreshold": .google.protobuf.UInt32Value +"healthyThreshold": .google.protobuf.UInt32Value +"reuseConnection": .google.protobuf.BoolValue +"httpHealthCheck": .envoy.api.v2.core.HealthCheck.HttpHealthCheck +"tcpHealthCheck": .envoy.api.v2.core.HealthCheck.TcpHealthCheck +"grpcHealthCheck": .envoy.api.v2.core.HealthCheck.GrpcHealthCheck +"customHealthCheck": .envoy.api.v2.core.HealthCheck.CustomHealthCheck +"noTrafficInterval": .google.protobuf.Duration +"unhealthyInterval": .google.protobuf.Duration +"unhealthyEdgeInterval": .google.protobuf.Duration +"healthyEdgeInterval": .google.protobuf.Duration +"eventLogPath": string +"alwaysLogHealthCheckFailures": bool + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `timeout` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The time to wait for a health check response. If the timeout is reached the health check attempt will be considered a failure. | | +| `interval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The interval between health checks. | | +| `initialJitter` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | An optional jitter amount in milliseconds. If specified, Envoy will start health checking after for a random time in ms between 0 and initial_jitter. This only applies to the first health check. | | +| `intervalJitter` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | An optional jitter amount in milliseconds. If specified, during every interval Envoy will add interval_jitter to the wait time. | | +| `intervalJitterPercent` | `int` | An optional jitter amount as a percentage of interval_ms. If specified, during every interval Envoy will add interval_ms * interval_jitter_percent / 100 to the wait time. If interval_jitter_ms and interval_jitter_percent are both set, both of them will be used to increase the wait time. | | +| `unhealthyThreshold` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of unhealthy health checks required before a host is marked unhealthy. Note that for *http* health checking if a host responds with 503 this threshold is ignored and the host is considered unhealthy immediately. | | +| `healthyThreshold` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of healthy health checks required before a host is marked healthy. Note that during startup, only a single successful health check is required to mark a host healthy. | | +| `reuseConnection` | [.google.protobuf.BoolValue](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/bool-value) | Reuse health check connection between health checks. Default is true. | | +| `httpHealthCheck` | [.envoy.api.v2.core.HealthCheck.HttpHealthCheck](../health_check.proto.sk#httphealthcheck) | HTTP health check. | | +| `tcpHealthCheck` | [.envoy.api.v2.core.HealthCheck.TcpHealthCheck](../health_check.proto.sk#tcphealthcheck) | TCP health check. | | +| `grpcHealthCheck` | [.envoy.api.v2.core.HealthCheck.GrpcHealthCheck](../health_check.proto.sk#grpchealthcheck) | gRPC health check. | | +| `customHealthCheck` | [.envoy.api.v2.core.HealthCheck.CustomHealthCheck](../health_check.proto.sk#customhealthcheck) | Custom health check. | | +| `noTrafficInterval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The "no traffic interval" is a special health check interval that is used when a cluster has never had traffic routed to it. This lower interval allows cluster information to be kept up to date, without sending a potentially large amount of active health checking traffic for no reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the standard health check interval that is defined. Note that this interval takes precedence over any other. The default value for "no traffic interval" is 60 seconds. | | +| `unhealthyInterval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The "unhealthy interval" is a health check interval that is used for hosts that are marked as unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the standard health check interval that is defined. The default value for "unhealthy interval" is the same as "interval". | | +| `unhealthyEdgeInterval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The "unhealthy edge interval" is a special health check interval that is used for the first health check right after a host is marked as unhealthy. For subsequent health checks Envoy will shift back to using either "unhealthy interval" if present or the standard health check interval that is defined. The default value for "unhealthy edge interval" is the same as "unhealthy interval". | | +| `healthyEdgeInterval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The "healthy edge interval" is a special health check interval that is used for the first health check right after a host is marked as healthy. For subsequent health checks Envoy will shift back to using the standard health check interval that is defined. The default value for "healthy edge interval" is the same as the default interval. | | +| `eventLogPath` | `string` | Specifies the path to the :ref:`health check event log `. If empty, no event log will be written. | | +| `alwaysLogHealthCheckFailures` | `bool` | If set to true, health check failure events will always be logged. If set to false, only the initial health check failure event will be logged. The default value is false. | | + + + + +--- +### Payload + + +Describes the encoding of the payload bytes in the payload. + +```yaml +"text": string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `text` | `string` | Hex encoded payload. E.g., "000000FF". | | + + + + +--- +### HttpHealthCheck + + +[#comment:next free field: 10] + +```yaml +"host": string +"path": string +"serviceName": string +"requestHeadersToAdd": []envoy.api.v2.core.HeaderValueOption +"requestHeadersToRemove": []string +"useHttp2": bool +"expectedStatuses": []envoy.type.Int64Range + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `host` | `string` | The value of the host header in the HTTP health check request. If left empty (default value), the name of the cluster this health check is associated with will be used. | | +| `path` | `string` | Specifies the HTTP path that will be requested during health checking. For example */healthcheck*. | | +| `serviceName` | `string` | An optional service name parameter which is used to validate the identity of the health checked cluster. See the :ref:`architecture overview ` for more information. | | +| `requestHeadersToAdd` | [[]envoy.api.v2.core.HeaderValueOption](../../../../../../../../../../../../envoy/api/v2/core/base.proto.sk#headervalueoption) | 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 the documentation on :ref:`custom request headers `. | | +| `requestHeadersToRemove` | `[]string` | Specifies a list of HTTP headers that should be removed from each request that is sent to the health checked cluster. | | +| `useHttp2` | `bool` | If set, health checks will be made using http/2. | | +| `expectedStatuses` | [[]envoy.type.Int64Range](../../../../type/range.proto.sk#int64range) | Specifies a list of HTTP response statuses considered healthy. If provided, replaces default 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open semantics of :ref:`Int64Range `. | | + + + + +--- +### TcpHealthCheck + + + +```yaml +"send": .envoy.api.v2.core.HealthCheck.Payload +"receive": []envoy.api.v2.core.HealthCheck.Payload + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `send` | [.envoy.api.v2.core.HealthCheck.Payload](../health_check.proto.sk#payload) | Empty payloads imply a connect-only health check. | | +| `receive` | [[]envoy.api.v2.core.HealthCheck.Payload](../health_check.proto.sk#payload) | When checking the response, “fuzzy” matching is performed such that each binary block must be found, and in the order specified, but not necessarily contiguous. | | + + + + +--- +### RedisHealthCheck + + + +```yaml +"key": string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `key` | `string` | If set, optionally perform ``EXISTS `` instead of ``PING``. A return value from Redis of 0 (does not exist) is considered a passing healthcheck. A return value other than 0 is considered a failure. This allows the user to mark a Redis instance for maintenance by setting the specified key to any value and waiting for traffic to drain. | | + + + + +--- +### GrpcHealthCheck + + +`grpc.health.v1.Health +`_-based +healthcheck. See `gRPC doc `_ +for details. + +```yaml +"serviceName": string +"authority": string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `serviceName` | `string` | An optional service name parameter which will be sent to gRPC service in `grpc.health.v1.HealthCheckRequest `_. message. See `gRPC health-checking overview `_ for more information. | | +| `authority` | `string` | The value of the :authority header in the gRPC health check request. If left empty (default value), the name of the cluster this health check is associated with will be used. | | + + + + +--- +### CustomHealthCheck + + +Custom health check. + +```yaml +"name": string +"config": .google.protobuf.Struct +"typedConfig": .google.protobuf.Any + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `name` | `string` | The registered name of the custom health checker. | | +| `config` | [.google.protobuf.Struct](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/struct) | | | +| `typedConfig` | [.google.protobuf.Any](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/any) | | | + + + + +### HealthStatus + +Description: Endpoint health status. + +| Name | Description | +| ----- | ----------- | +| UNKNOWN | The health status is not known. This is interpreted by Envoy as *HEALTHY*. | +| HEALTHY | Healthy. | +| UNHEALTHY | Unhealthy. | +| DRAINING | Connection draining in progress. E.g., ``_ or ``_. This is interpreted by Envoy as *UNHEALTHY*. | +| TIMEOUT | Health check timed out. This is part of HDS and is interpreted by Envoy as *UNHEALTHY*. | +| DEGRADED | Degraded. | + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extauth/health_check.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extauth/health_check.proto.sk.md new file mode 100644 index 00000000000..c842afe29f7 --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extauth/health_check.proto.sk.md @@ -0,0 +1,157 @@ + +--- +title: "health_check.proto" +weight: 5 +--- + + + + +### Package: `gloo.solo.io` +#### Types: + + +- [HealthCheckConfig](#healthcheckconfig) +- [HttpHealthCheck](#httphealthcheck) +- [GrpcHealthCheck](#grpchealthcheck) +- [OutlierDetection](#outlierdetection) + + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/v1/health_check.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/v1/health_check.proto) + + + + + +--- +### HealthCheckConfig + + +Envoy cluster health check configuration + +See [envoy docs](https://www.envoyproxy.io/docs/envoy/v1.11.0/intro/arch_overview/upstream/health_checking#arch-overview-health-checking) for more information on how health checks work in envoy +Or examine the [config definition](https://www.envoyproxy.io/docs/envoy/v1.11.0/api-v2/api/v2/core/health_check.proto#envoy-api-msg-core-healthcheck). + +```yaml +"timeout": .google.protobuf.Duration +"interval": .google.protobuf.Duration +"unhealthyThreshold": .google.protobuf.UInt32Value +"healthyThreshold": .google.protobuf.UInt32Value +"httpHealthCheck": .gloo.solo.io.HealthCheckConfig.HttpHealthCheck +"grpcHealthCheck": .gloo.solo.io.HealthCheckConfig.GrpcHealthCheck + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `timeout` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | | | +| `interval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | | | +| `unhealthyThreshold` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of unhealthy health checks required before a host is marked unhealthy. Note that for *http* health checking if a host responds with 503 this threshold is ignored and the host is considered unhealthy immediately. | | +| `healthyThreshold` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of healthy health checks required before a host is marked healthy. Note that during startup, only a single successful health check is required to mark a host healthy. | | +| `httpHealthCheck` | [.gloo.solo.io.HealthCheckConfig.HttpHealthCheck](../health_check.proto.sk#httphealthcheck) | HTTP health check. | | +| `grpcHealthCheck` | [.gloo.solo.io.HealthCheckConfig.GrpcHealthCheck](../health_check.proto.sk#grpchealthcheck) | gRPC health check. | | + + + + +--- +### HttpHealthCheck + + + +```yaml +"host": string +"path": string +"serviceName": string +"useHttp2": bool + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `host` | `string` | The value of the host header in the HTTP health check request. If left empty (default value), the name of the cluster this health check is associated with will be used. | | +| `path` | `string` | Specifies the HTTP path that will be requested during health checking. For example */healthcheck*. | | +| `serviceName` | `string` | An optional service name parameter which is used to validate the identity of the health checked cluster. See the :ref:`architecture overview ` for more information. | | +| `useHttp2` | `bool` | If set, health checks will be made using http/2. | | + + + + +--- +### GrpcHealthCheck + + +`grpc.health.v1.Health +`_-based +healthcheck. See `gRPC doc `_ +for details. + +```yaml +"serviceName": string +"authority": string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `serviceName` | `string` | An optional service name parameter which will be sent to gRPC service in `grpc.health.v1.HealthCheckRequest `_. message. See `gRPC health-checking overview `_ for more information. | | +| `authority` | `string` | The value of the :authority header in the gRPC health check request. If left empty (default value), the name of the cluster this health check is associated with will be used. | | + + + + +--- +### OutlierDetection + + +Envoy cluster health check configuration + +See [envoy docs](https://www.envoyproxy.io/docs/envoy/v1.11.0/intro/arch_overview/upstream/outlier#arch-overview-outlier-detection) for more information on how health checks work in envoy +Or examine the [config definition](https://github.com/envoyproxy/envoy/blob/v1.11.0/api/envoy/api/v2/cluster/outlier_detection.proto#L22). + +```yaml +"consecutive5xx": .google.protobuf.UInt32Value +"interval": .google.protobuf.Duration +"baseEjectionTime": .google.protobuf.Duration +"maxEjectionPercent": .google.protobuf.UInt32Value +"enforcingConsecutive5xx": .google.protobuf.UInt32Value +"enforcingSuccessRate": .google.protobuf.UInt32Value +"successRateMinimumHosts": .google.protobuf.UInt32Value +"successRateRequestVolume": .google.protobuf.UInt32Value +"successRateStdevFactor": .google.protobuf.UInt32Value +"consecutiveGatewayFailure": .google.protobuf.UInt32Value +"enforcingConsecutiveGatewayFailure": .google.protobuf.UInt32Value +"splitExternalLocalOriginErrors": bool +"consecutiveLocalOriginFailure": .google.protobuf.UInt32Value +"enforcingConsecutiveLocalOriginFailure": .google.protobuf.UInt32Value +"enforcingLocalOriginSuccessRate": .google.protobuf.UInt32Value + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `consecutive5xx` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of consecutive 5xx responses or local origin errors that are mapped to 5xx error codes before a consecutive 5xx ejection occurs. Defaults to 5. | | +| `interval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 10000ms or 10s. | | +| `baseEjectionTime` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The base time that a host is ejected for. The real time is equal to the base time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s. | | +| `maxEjectionPercent` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% but will eject at least one host regardless of the value. | | +| `enforcingConsecutive5xx` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. | | +| `enforcingSuccessRate` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. | | +| `successRateMinimumHosts` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5. | | +| `successRateRequestVolume` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100. | | +| `successRateStdevFactor` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900. | | +| `consecutiveGatewayFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of consecutive gateway failures (502, 503, 504 status codes) before a consecutive gateway failure ejection occurs. Defaults to 5. | | +| `enforcingConsecutiveGatewayFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0. | | +| `splitExternalLocalOriginErrors` | `bool` | Determines whether to distinguish local origin failures from external errors. If set to true the following configuration parameters are taken into account: :ref:`consecutive_local_origin_failure`, :ref:`enforcing_consecutive_local_origin_failure` and :ref:`enforcing_local_origin_success_rate`. Defaults to false. | | +| `consecutiveLocalOriginFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of consecutive locally originated failures before ejection occurs. Defaults to 5. Parameter takes effect only when :ref:`split_external_local_origin_errors` is set to true. | | +| `enforcingConsecutiveLocalOriginFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through consecutive locally originated failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. Parameter takes effect only when :ref:`split_external_local_origin_errors` is set to true. | | +| `enforcingLocalOriginSuccessRate` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through success rate statistics for locally originated errors. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. Parameter takes effect only when :ref:`split_external_local_origin_errors` is set to true. | | + + + + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/aws/filter.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/aws/filter.proto.sk.md new file mode 100644 index 00000000000..fa2d2398478 --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/aws/filter.proto.sk.md @@ -0,0 +1,75 @@ + +--- +title: "filter.proto" +weight: 5 +--- + + + + +### Package: `envoy.config.filter.http.aws.v2` +#### Types: + + +- [LambdaPerRoute](#lambdaperroute) +- [LambdaProtocolExtension](#lambdaprotocolextension) + + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/aws/filter.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/external/envoy/extensions/aws/filter.proto) + + + + + +--- +### LambdaPerRoute + + +AWS Lambda contains the configuration necessary to perform transform regular http calls to +AWS Lambda invocations. + +```yaml +"name": string +"qualifier": string +"async": bool + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `name` | `string` | The name of the function | | +| `qualifier` | `string` | The qualifier of the function (defaults to $LATEST if not specified) | | +| `async` | `bool` | Invocation type - async or regular. | | + + + + +--- +### LambdaProtocolExtension + + + +```yaml +"host": string +"region": string +"accessKey": string +"secretKey": string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `host` | `string` | The host header for AWS this cluster | | +| `region` | `string` | The region for this cluster | | +| `accessKey` | `string` | The access_key for AWS this cluster | | +| `secretKey` | `string` | The secret_key for AWS this cluster | | + + + + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto.sk.md new file mode 100644 index 00000000000..83fc2d27c22 --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto.sk.md @@ -0,0 +1,45 @@ + +--- +title: "sanitize.proto" +weight: 5 +--- + + + + +### Package: `envoy.config.filter.http.sanitize.v2` +#### Types: + + +- [Sanitize](#sanitize) + + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto) + + + + + +--- +### Sanitize + + + +```yaml +"headersToRemove": []string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `headersToRemove` | `[]string` | | | + + + + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto.sk.md new file mode 100644 index 00000000000..24c8eca9a6d --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto.sk.md @@ -0,0 +1,93 @@ + +--- +title: "solo_jwt_authn.proto" +weight: 5 +--- + + + + +### Package: `envoy.config.filter.http.solo_jwt_authn.v2` +#### Types: + + +- [SoloJwtAuthnPerRoute](#solojwtauthnperroute) +- [ClaimToHeader](#claimtoheader) +- [ClaimToHeaders](#claimtoheaders) + + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto) + + + + + +--- +### SoloJwtAuthnPerRoute + + + +```yaml +"requirement": string +"claimsToHeaders": map +"clearRouteCache": bool +"payloadInMetadata": string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `requirement` | `string` | | | +| `claimsToHeaders` | `map` | | | +| `clearRouteCache` | `bool` | clear the route cache if claims were added to the header | | +| `payloadInMetadata` | `string` | | | + + + + +--- +### ClaimToHeader + + +If this is specified, one of the claims will be copied to a header +and the route cache will be cleared. + +```yaml +"claim": string +"header": string +"append": bool + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `claim` | `string` | | | +| `header` | `string` | | | +| `append` | `bool` | | | + + + + +--- +### ClaimToHeaders + + + +```yaml +"claims": []envoy.config.filter.http.solo_jwt_authn.v2.SoloJwtAuthnPerRoute.ClaimToHeader + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `claims` | [[]envoy.config.filter.http.solo_jwt_authn.v2.SoloJwtAuthnPerRoute.ClaimToHeader](../solo_jwt_authn.proto.sk#claimtoheader) | | | + + + + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/waf/waf.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/waf/waf.proto.sk.md new file mode 100644 index 00000000000..bca64cb2587 --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/waf/waf.proto.sk.md @@ -0,0 +1,91 @@ + +--- +title: "waf.proto" +weight: 5 +--- + + + + +### Package: `envoy.config.filter.http.modsecurity.v2` +#### Types: + + +- [ModSecurity](#modsecurity) +- [RuleSet](#ruleset) +- [ModSecurityPerRoute](#modsecurityperroute) + + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/waf/waf.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/external/envoy/extensions/waf/waf.proto) + + + + + +--- +### ModSecurity + + + +```yaml +"disabled": bool +"ruleSets": []envoy.config.filter.http.modsecurity.v2.RuleSet + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `disabled` | `bool` | Disable all rules on the current route | | +| `ruleSets` | [[]envoy.config.filter.http.modsecurity.v2.RuleSet](../waf.proto.sk#ruleset) | Global rule sets for the current http connection manager | | + + + + +--- +### RuleSet + + +String options are not recommended unless they are relatively short as they will be sent over the wire quite often. + +Any files referenced by this proto should be mounted into the relevant envoy pod prior to use or +the filter will fail to initialize and the configuration will be rejected + +```yaml +"ruleStr": string +"files": []string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `ruleStr` | `string` | string of rules which are added directly | | +| `files` | `[]string` | array of files to include | | + + + + +--- +### ModSecurityPerRoute + + + +```yaml +"disabled": bool +"ruleSets": []envoy.config.filter.http.modsecurity.v2.RuleSet + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `disabled` | `bool` | Disable all rules on the current route | | +| `ruleSets` | [[]envoy.config.filter.http.modsecurity.v2.RuleSet](../waf.proto.sk#ruleset) | Overwite the global rules on this route | | + + + + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/range.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/range.proto.sk.md new file mode 100644 index 00000000000..90b4420fa77 --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/range.proto.sk.md @@ -0,0 +1,71 @@ + +--- +title: "range.proto" +weight: 5 +--- + + + + +### Package: `envoy.type` +#### Types: + + +- [Int64Range](#int64range) +- [DoubleRange](#doublerange) + + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/range.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/external/envoy/type/range.proto) + + + + + +--- +### Int64Range + + +Specifies the int64 start and end of the range using half-open interval semantics [start, +end). + +```yaml +"start": int +"end": int + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `start` | `int` | start of the range (inclusive) | | +| `end` | `int` | end of the range (exclusive) | | + + + + +--- +### DoubleRange + + +Specifies the double start and end of the range using half-open interval semantics [start, +end). + +```yaml +"start": float +"end": float + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `start` | `float` | start of the range (inclusive) | | +| `end` | `float` | end of the range (exclusive) | | + + + + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/v2/core/health_check.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/v2/core/health_check.proto.sk.md new file mode 100644 index 00000000000..3a02b181075 --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/external/envoy/v2/core/health_check.proto.sk.md @@ -0,0 +1,242 @@ + +--- +title: "health_check.proto" +weight: 5 +--- + + + + +### Package: `envoy.api.v2.core` +#### Types: + + +- [HealthCheck](#healthcheck) +- [Payload](#payload) +- [HttpHealthCheck](#httphealthcheck) +- [TcpHealthCheck](#tcphealthcheck) +- [RedisHealthCheck](#redishealthcheck) +- [GrpcHealthCheck](#grpchealthcheck) +- [CustomHealthCheck](#customhealthcheck) + + + + +##### Enums: + + + - [HealthStatus](#healthstatus) + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/external/envoy/v2/core/health_check.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/external/envoy/v2/core/health_check.proto) + + + + + +--- +### HealthCheck + + + +```yaml +"timeout": .google.protobuf.Duration +"interval": .google.protobuf.Duration +"initialJitter": .google.protobuf.Duration +"intervalJitter": .google.protobuf.Duration +"intervalJitterPercent": int +"unhealthyThreshold": .google.protobuf.UInt32Value +"healthyThreshold": .google.protobuf.UInt32Value +"altPort": .google.protobuf.UInt32Value +"reuseConnection": .google.protobuf.BoolValue +"httpHealthCheck": .envoy.api.v2.core.HealthCheck.HttpHealthCheck +"tcpHealthCheck": .envoy.api.v2.core.HealthCheck.TcpHealthCheck +"grpcHealthCheck": .envoy.api.v2.core.HealthCheck.GrpcHealthCheck +"customHealthCheck": .envoy.api.v2.core.HealthCheck.CustomHealthCheck +"noTrafficInterval": .google.protobuf.Duration +"unhealthyInterval": .google.protobuf.Duration +"unhealthyEdgeInterval": .google.protobuf.Duration +"healthyEdgeInterval": .google.protobuf.Duration +"eventLogPath": string +"alwaysLogHealthCheckFailures": bool + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `timeout` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The time to wait for a health check response. If the timeout is reached the health check attempt will be considered a failure. | | +| `interval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The interval between health checks. | | +| `initialJitter` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | An optional jitter amount in milliseconds. If specified, Envoy will start health checking after for a random time in ms between 0 and initial_jitter. This only applies to the first health check. | | +| `intervalJitter` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | An optional jitter amount in milliseconds. If specified, during every interval Envoy will add interval_jitter to the wait time. | | +| `intervalJitterPercent` | `int` | An optional jitter amount as a percentage of interval_ms. If specified, during every interval Envoy will add interval_ms * interval_jitter_percent / 100 to the wait time. If interval_jitter_ms and interval_jitter_percent are both set, both of them will be used to increase the wait time. | | +| `unhealthyThreshold` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of unhealthy health checks required before a host is marked unhealthy. Note that for *http* health checking if a host responds with 503 this threshold is ignored and the host is considered unhealthy immediately. | | +| `healthyThreshold` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of healthy health checks required before a host is marked healthy. Note that during startup, only a single successful health check is required to mark a host healthy. | | +| `altPort` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | [#not-implemented-hide:] Non-serving port for health checking. | | +| `reuseConnection` | [.google.protobuf.BoolValue](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/bool-value) | Reuse health check connection between health checks. Default is true. | | +| `httpHealthCheck` | [.envoy.api.v2.core.HealthCheck.HttpHealthCheck](../health_check.proto.sk#httphealthcheck) | HTTP health check. | | +| `tcpHealthCheck` | [.envoy.api.v2.core.HealthCheck.TcpHealthCheck](../health_check.proto.sk#tcphealthcheck) | TCP health check. | | +| `grpcHealthCheck` | [.envoy.api.v2.core.HealthCheck.GrpcHealthCheck](../health_check.proto.sk#grpchealthcheck) | gRPC health check. | | +| `customHealthCheck` | [.envoy.api.v2.core.HealthCheck.CustomHealthCheck](../health_check.proto.sk#customhealthcheck) | Custom health check. | | +| `noTrafficInterval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The "no traffic interval" is a special health check interval that is used when a cluster has never had traffic routed to it. This lower interval allows cluster information to be kept up to date, without sending a potentially large amount of active health checking traffic for no reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the standard health check interval that is defined. Note that this interval takes precedence over any other. The default value for "no traffic interval" is 60 seconds. | | +| `unhealthyInterval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The "unhealthy interval" is a health check interval that is used for hosts that are marked as unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the standard health check interval that is defined. The default value for "unhealthy interval" is the same as "interval". | | +| `unhealthyEdgeInterval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The "unhealthy edge interval" is a special health check interval that is used for the first health check right after a host is marked as unhealthy. For subsequent health checks Envoy will shift back to using either "unhealthy interval" if present or the standard health check interval that is defined. The default value for "unhealthy edge interval" is the same as "unhealthy interval". | | +| `healthyEdgeInterval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The "healthy edge interval" is a special health check interval that is used for the first health check right after a host is marked as healthy. For subsequent health checks Envoy will shift back to using the standard health check interval that is defined. The default value for "healthy edge interval" is the same as the default interval. | | +| `eventLogPath` | `string` | Specifies the path to the :ref:`health check event log `. If empty, no event log will be written. | | +| `alwaysLogHealthCheckFailures` | `bool` | If set to true, health check failure events will always be logged. If set to false, only the initial health check failure event will be logged. The default value is false. | | + + + + +--- +### Payload + + +Describes the encoding of the payload bytes in the payload. + +```yaml +"text": string +"binary": bytes + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `text` | `string` | Hex encoded payload. E.g., "000000FF". | | +| `binary` | `bytes` | [#not-implemented-hide:] Binary payload. | | + + + + +--- +### HttpHealthCheck + + +[#comment:next free field: 10] + +```yaml +"host": string +"path": string +"send": .envoy.api.v2.core.HealthCheck.Payload +"receive": .envoy.api.v2.core.HealthCheck.Payload +"serviceName": string +"requestHeadersToAdd": []envoy.api.v2.core.HeaderValueOption +"requestHeadersToRemove": []string +"useHttp2": bool +"expectedStatuses": []envoy.type.Int64Range + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `host` | `string` | The value of the host header in the HTTP health check request. If left empty (default value), the name of the cluster this health check is associated with will be used. | | +| `path` | `string` | Specifies the HTTP path that will be requested during health checking. For example */healthcheck*. | | +| `send` | [.envoy.api.v2.core.HealthCheck.Payload](../health_check.proto.sk#payload) | [#not-implemented-hide:] HTTP specific payload. | | +| `receive` | [.envoy.api.v2.core.HealthCheck.Payload](../health_check.proto.sk#payload) | [#not-implemented-hide:] HTTP specific response. | | +| `serviceName` | `string` | An optional service name parameter which is used to validate the identity of the health checked cluster. See the :ref:`architecture overview ` for more information. | | +| `requestHeadersToAdd` | [[]envoy.api.v2.core.HeaderValueOption](../../../../../../../../../../../envoy/api/v2/core/base.proto.sk#headervalueoption) | 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 the documentation on :ref:`custom request headers `. | | +| `requestHeadersToRemove` | `[]string` | Specifies a list of HTTP headers that should be removed from each request that is sent to the health checked cluster. | | +| `useHttp2` | `bool` | If set, health checks will be made using http/2. | | +| `expectedStatuses` | [[]envoy.type.Int64Range](../../../type/range.proto.sk#int64range) | Specifies a list of HTTP response statuses considered healthy. If provided, replaces default 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open semantics of :ref:`Int64Range `. | | + + + + +--- +### TcpHealthCheck + + + +```yaml +"send": .envoy.api.v2.core.HealthCheck.Payload +"receive": []envoy.api.v2.core.HealthCheck.Payload + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `send` | [.envoy.api.v2.core.HealthCheck.Payload](../health_check.proto.sk#payload) | Empty payloads imply a connect-only health check. | | +| `receive` | [[]envoy.api.v2.core.HealthCheck.Payload](../health_check.proto.sk#payload) | When checking the response, “fuzzy” matching is performed such that each binary block must be found, and in the order specified, but not necessarily contiguous. | | + + + + +--- +### RedisHealthCheck + + + +```yaml +"key": string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `key` | `string` | If set, optionally perform ``EXISTS `` instead of ``PING``. A return value from Redis of 0 (does not exist) is considered a passing healthcheck. A return value other than 0 is considered a failure. This allows the user to mark a Redis instance for maintenance by setting the specified key to any value and waiting for traffic to drain. | | + + + + +--- +### GrpcHealthCheck + + +`grpc.health.v1.Health +`_-based +healthcheck. See `gRPC doc `_ +for details. + +```yaml +"serviceName": string +"authority": string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `serviceName` | `string` | An optional service name parameter which will be sent to gRPC service in `grpc.health.v1.HealthCheckRequest `_. message. See `gRPC health-checking overview `_ for more information. | | +| `authority` | `string` | The value of the :authority header in the gRPC health check request. If left empty (default value), the name of the cluster this health check is associated with will be used. | | + + + + +--- +### CustomHealthCheck + + +Custom health check. + +```yaml +"name": string +"config": .google.protobuf.Struct +"typedConfig": .google.protobuf.Any + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `name` | `string` | The registered name of the custom health checker. | | +| `config` | [.google.protobuf.Struct](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/struct) | | | +| `typedConfig` | [.google.protobuf.Any](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/any) | | | + + + + +### HealthStatus + +Description: Endpoint health status. + +| Name | Description | +| ----- | ----------- | +| UNKNOWN | The health status is not known. This is interpreted by Envoy as *HEALTHY*. | +| HEALTHY | Healthy. | +| UNHEALTHY | Unhealthy. | +| DRAINING | Connection draining in progress. E.g., ``_ or ``_. This is interpreted by Envoy as *UNHEALTHY*. | +| TIMEOUT | Health check timed out. This is part of HDS and is interpreted by Envoy as *UNHEALTHY*. | +| DEGRADED | Degraded. | + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/plugins/waf/waf.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/plugins/waf/waf.proto.sk.md index b91ceda582a..385841ec1cb 100644 --- a/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/plugins/waf/waf.proto.sk.md +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/plugins/waf/waf.proto.sk.md @@ -41,7 +41,7 @@ weight: 5 | ----- | ---- | ----------- |----------- | | `disabled` | `bool` | disable waf on this listener | | | `coreRuleSet` | [.waf.plugins.gloo.solo.io.CoreRuleSet](../waf.proto.sk#coreruleset) | Add owasp core rule set if nil will not be added | | -| `ruleSets` | [[]envoy.config.filter.http.modsecurity.v2.RuleSet](../../../../../external/envoy/waf/waf.proto.sk#ruleset) | custom rule sets rules to add | | +| `ruleSets` | [[]envoy.config.filter.http.modsecurity.v2.RuleSet](../../../../../external/envoy/extensions/waf/waf.proto.sk#ruleset) | custom rule sets rules to add | | diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/health_check.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/health_check.proto.sk.md new file mode 100644 index 00000000000..c842afe29f7 --- /dev/null +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/health_check.proto.sk.md @@ -0,0 +1,157 @@ + +--- +title: "health_check.proto" +weight: 5 +--- + + + + +### Package: `gloo.solo.io` +#### Types: + + +- [HealthCheckConfig](#healthcheckconfig) +- [HttpHealthCheck](#httphealthcheck) +- [GrpcHealthCheck](#grpchealthcheck) +- [OutlierDetection](#outlierdetection) + + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/v1/health_check.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/v1/health_check.proto) + + + + + +--- +### HealthCheckConfig + + +Envoy cluster health check configuration + +See [envoy docs](https://www.envoyproxy.io/docs/envoy/v1.11.0/intro/arch_overview/upstream/health_checking#arch-overview-health-checking) for more information on how health checks work in envoy +Or examine the [config definition](https://www.envoyproxy.io/docs/envoy/v1.11.0/api-v2/api/v2/core/health_check.proto#envoy-api-msg-core-healthcheck). + +```yaml +"timeout": .google.protobuf.Duration +"interval": .google.protobuf.Duration +"unhealthyThreshold": .google.protobuf.UInt32Value +"healthyThreshold": .google.protobuf.UInt32Value +"httpHealthCheck": .gloo.solo.io.HealthCheckConfig.HttpHealthCheck +"grpcHealthCheck": .gloo.solo.io.HealthCheckConfig.GrpcHealthCheck + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `timeout` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | | | +| `interval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | | | +| `unhealthyThreshold` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of unhealthy health checks required before a host is marked unhealthy. Note that for *http* health checking if a host responds with 503 this threshold is ignored and the host is considered unhealthy immediately. | | +| `healthyThreshold` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of healthy health checks required before a host is marked healthy. Note that during startup, only a single successful health check is required to mark a host healthy. | | +| `httpHealthCheck` | [.gloo.solo.io.HealthCheckConfig.HttpHealthCheck](../health_check.proto.sk#httphealthcheck) | HTTP health check. | | +| `grpcHealthCheck` | [.gloo.solo.io.HealthCheckConfig.GrpcHealthCheck](../health_check.proto.sk#grpchealthcheck) | gRPC health check. | | + + + + +--- +### HttpHealthCheck + + + +```yaml +"host": string +"path": string +"serviceName": string +"useHttp2": bool + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `host` | `string` | The value of the host header in the HTTP health check request. If left empty (default value), the name of the cluster this health check is associated with will be used. | | +| `path` | `string` | Specifies the HTTP path that will be requested during health checking. For example */healthcheck*. | | +| `serviceName` | `string` | An optional service name parameter which is used to validate the identity of the health checked cluster. See the :ref:`architecture overview ` for more information. | | +| `useHttp2` | `bool` | If set, health checks will be made using http/2. | | + + + + +--- +### GrpcHealthCheck + + +`grpc.health.v1.Health +`_-based +healthcheck. See `gRPC doc `_ +for details. + +```yaml +"serviceName": string +"authority": string + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `serviceName` | `string` | An optional service name parameter which will be sent to gRPC service in `grpc.health.v1.HealthCheckRequest `_. message. See `gRPC health-checking overview `_ for more information. | | +| `authority` | `string` | The value of the :authority header in the gRPC health check request. If left empty (default value), the name of the cluster this health check is associated with will be used. | | + + + + +--- +### OutlierDetection + + +Envoy cluster health check configuration + +See [envoy docs](https://www.envoyproxy.io/docs/envoy/v1.11.0/intro/arch_overview/upstream/outlier#arch-overview-outlier-detection) for more information on how health checks work in envoy +Or examine the [config definition](https://github.com/envoyproxy/envoy/blob/v1.11.0/api/envoy/api/v2/cluster/outlier_detection.proto#L22). + +```yaml +"consecutive5xx": .google.protobuf.UInt32Value +"interval": .google.protobuf.Duration +"baseEjectionTime": .google.protobuf.Duration +"maxEjectionPercent": .google.protobuf.UInt32Value +"enforcingConsecutive5xx": .google.protobuf.UInt32Value +"enforcingSuccessRate": .google.protobuf.UInt32Value +"successRateMinimumHosts": .google.protobuf.UInt32Value +"successRateRequestVolume": .google.protobuf.UInt32Value +"successRateStdevFactor": .google.protobuf.UInt32Value +"consecutiveGatewayFailure": .google.protobuf.UInt32Value +"enforcingConsecutiveGatewayFailure": .google.protobuf.UInt32Value +"splitExternalLocalOriginErrors": bool +"consecutiveLocalOriginFailure": .google.protobuf.UInt32Value +"enforcingConsecutiveLocalOriginFailure": .google.protobuf.UInt32Value +"enforcingLocalOriginSuccessRate": .google.protobuf.UInt32Value + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `consecutive5xx` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of consecutive 5xx responses or local origin errors that are mapped to 5xx error codes before a consecutive 5xx ejection occurs. Defaults to 5. | | +| `interval` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 10000ms or 10s. | | +| `baseEjectionTime` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | The base time that a host is ejected for. The real time is equal to the base time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s. | | +| `maxEjectionPercent` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% but will eject at least one host regardless of the value. | | +| `enforcingConsecutive5xx` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. | | +| `enforcingSuccessRate` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. | | +| `successRateMinimumHosts` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5. | | +| `successRateRequestVolume` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100. | | +| `successRateStdevFactor` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success rate, and the product of this factor and the standard deviation of the mean success rate: mean - (stdev * success_rate_stdev_factor). This factor is divided by a thousand to get a double. That is, if the desired factor is 1.9, the runtime value should be 1900. Defaults to 1900. | | +| `consecutiveGatewayFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of consecutive gateway failures (502, 503, 504 status codes) before a consecutive gateway failure ejection occurs. Defaults to 5. | | +| `enforcingConsecutiveGatewayFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0. | | +| `splitExternalLocalOriginErrors` | `bool` | Determines whether to distinguish local origin failures from external errors. If set to true the following configuration parameters are taken into account: :ref:`consecutive_local_origin_failure`, :ref:`enforcing_consecutive_local_origin_failure` and :ref:`enforcing_local_origin_success_rate`. Defaults to false. | | +| `consecutiveLocalOriginFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The number of consecutive locally originated failures before ejection occurs. Defaults to 5. Parameter takes effect only when :ref:`split_external_local_origin_errors` is set to true. | | +| `enforcingConsecutiveLocalOriginFailure` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through consecutive locally originated failures. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. Parameter takes effect only when :ref:`split_external_local_origin_errors` is set to true. | | +| `enforcingLocalOriginSuccessRate` | [.google.protobuf.UInt32Value](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/u-int-32-value) | The % chance that a host will be actually ejected when an outlier status is detected through success rate statistics for locally originated errors. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. Parameter takes effect only when :ref:`split_external_local_origin_errors` is set to true. | | + + + + + + + + diff --git a/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/plugins.proto.sk.md b/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/plugins.proto.sk.md index a516afcf4d2..2803a6905ef 100644 --- a/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/plugins.proto.sk.md +++ b/docs/api/github.com/solo-io/gloo/projects/gloo/api/v1/plugins.proto.sk.md @@ -223,6 +223,8 @@ Each upstream type is handled by a corresponding Gloo plugin. "circuitBreakers": .gloo.solo.io.CircuitBreakerConfig "loadBalancerConfig": .gloo.solo.io.LoadBalancerConfig "connectionConfig": .gloo.solo.io.ConnectionConfig +"healthChecks": []envoy.api.v2.core.HealthCheck +"outlierDetection": .envoy.api.v2.cluster.OutlierDetection "useHttp2": bool "kube": .kubernetes.plugins.gloo.solo.io.UpstreamSpec "static": .static.plugins.gloo.solo.io.UpstreamSpec @@ -240,6 +242,8 @@ Each upstream type is handled by a corresponding Gloo plugin. | `circuitBreakers` | [.gloo.solo.io.CircuitBreakerConfig](../circuit_breaker.proto.sk#circuitbreakerconfig) | Circuit breakers for this upstream. if not set, the defaults ones from the Gloo settings will be used. if those are not set, [envoy's defaults](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/cluster/circuit_breaker.proto#envoy-api-msg-cluster-circuitbreakers) will be used. | | | `loadBalancerConfig` | [.gloo.solo.io.LoadBalancerConfig](../load_balancer.proto.sk#loadbalancerconfig) | | | | `connectionConfig` | [.gloo.solo.io.ConnectionConfig](../connection.proto.sk#connectionconfig) | | | +| `healthChecks` | [[]envoy.api.v2.core.HealthCheck](../../external/envoy/api/v2/core/health_check.proto.sk#healthcheck) | | | +| `outlierDetection` | [.envoy.api.v2.cluster.OutlierDetection](../../external/envoy/api/v2/cluster/outlier_detection.proto.sk#outlierdetection) | | | | `useHttp2` | `bool` | Use http2 when communicating with this upstream this field is evaluated `true` for upstreams with a grpc service spec | | | `kube` | [.kubernetes.plugins.gloo.solo.io.UpstreamSpec](../plugins/kubernetes/kubernetes.proto.sk#upstreamspec) | | | | `static` | [.static.plugins.gloo.solo.io.UpstreamSpec](../plugins/static/static.proto.sk#upstreamspec) | | | diff --git a/docs/v2/github.com/solo-io/gloo/projects/gloo/api/v1/plugins.proto.sk.md b/docs/v2/github.com/solo-io/gloo/projects/gloo/api/v1/plugins.proto.sk.md new file mode 100644 index 00000000000..6b9471ffbc7 --- /dev/null +++ b/docs/v2/github.com/solo-io/gloo/projects/gloo/api/v1/plugins.proto.sk.md @@ -0,0 +1,262 @@ + +--- +title: "plugins.proto" +weight: 5 +--- + + + + +### Package: `gloo.solo.io` +#### Types: + + +- [ListenerPlugins](#listenerplugins) +- [HttpListenerPlugins](#httplistenerplugins) +- [TcpListenerPlugins](#tcplistenerplugins) +- [VirtualHostPlugins](#virtualhostplugins) +- [RoutePlugins](#routeplugins) +- [DestinationSpec](#destinationspec) +- [WeightedDestinationPlugins](#weighteddestinationplugins) +- [UpstreamSpec](#upstreamspec) + + + + +##### Source File: [github.com/solo-io/gloo/projects/gloo/api/v1/plugins.proto](https://github.com/solo-io/gloo/blob/master/projects/gloo/api/v1/plugins.proto) + + + + + +--- +### ListenerPlugins + + +Plugin-specific configuration that lives on gateways +Each ListenerPlugin object contains configuration for a specific plugin +Note to developers: new Listener Plugins must be added to this struct +to be usable by Gloo. + +```yaml +"accessLoggingService": .als.plugins.gloo.solo.io.AccessLoggingService +"extensions": .gloo.solo.io.Extensions + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `accessLoggingService` | [.als.plugins.gloo.solo.io.AccessLoggingService](../plugins/als/als.proto.sk#accessloggingservice) | | | +| `extensions` | [.gloo.solo.io.Extensions](../extensions.proto.sk#extensions) | | | + + + + +--- +### HttpListenerPlugins + + +Plugin-specific configuration that lives on http listeners + +```yaml +"grpcWeb": .grpc_web.plugins.gloo.solo.io.GrpcWeb +"httpConnectionManagerSettings": .hcm.plugins.gloo.solo.io.HttpConnectionManagerSettings +"extensions": .gloo.solo.io.Extensions + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `grpcWeb` | [.grpc_web.plugins.gloo.solo.io.GrpcWeb](../plugins/grpc_web/grpc_web.proto.sk#grpcweb) | | | +| `httpConnectionManagerSettings` | [.hcm.plugins.gloo.solo.io.HttpConnectionManagerSettings](../plugins/hcm/hcm.proto.sk#httpconnectionmanagersettings) | | | +| `extensions` | [.gloo.solo.io.Extensions](../extensions.proto.sk#extensions) | | | + + + + +--- +### TcpListenerPlugins + + +Plugin-specific configuration that lives on tcp listeners + +```yaml +"tcpProxySettings": .tcp.plugins.gloo.solo.io.TcpProxySettings + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `tcpProxySettings` | [.tcp.plugins.gloo.solo.io.TcpProxySettings](../plugins/tcp/tcp.proto.sk#tcpproxysettings) | | | + + + + +--- +### VirtualHostPlugins + + +Plugin-specific configuration that lives on virtual hosts +Each VirtualHostPlugin object contains configuration for a specific plugin +Note to developers: new Virtual Host Plugins must be added to this struct +to be usable by Gloo. + +```yaml +"extensions": .gloo.solo.io.Extensions +"retries": .retries.plugins.gloo.solo.io.RetryPolicy +"stats": .stats.plugins.gloo.solo.io.Stats +"headerManipulation": .headers.plugins.gloo.solo.io.HeaderManipulation +"cors": .cors.plugins.gloo.solo.io.CorsPolicy +"transformations": .envoy.api.v2.filter.http.RouteTransformations + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `extensions` | [.gloo.solo.io.Extensions](../extensions.proto.sk#extensions) | | | +| `retries` | [.retries.plugins.gloo.solo.io.RetryPolicy](../plugins/retries/retries.proto.sk#retrypolicy) | | | +| `stats` | [.stats.plugins.gloo.solo.io.Stats](../plugins/stats/stats.proto.sk#stats) | | | +| `headerManipulation` | [.headers.plugins.gloo.solo.io.HeaderManipulation](../plugins/headers/headers.proto.sk#headermanipulation) | Append/Remove headers on Requests or Responses on all routes contained in this Virtual Host | | +| `cors` | [.cors.plugins.gloo.solo.io.CorsPolicy](../plugins/cors/cors.proto.sk#corspolicy) | Defines a CORS policy for the virtual host If a CORS policy is also defined on the route matched by the request, the policies are merged. | | +| `transformations` | [.envoy.api.v2.filter.http.RouteTransformations](../plugins/transformation/transformation.proto.sk#routetransformations) | Transformations to apply | | + + + + +--- +### RoutePlugins + + +Plugin-specific configuration that lives on routes +Each RoutePlugin object contains configuration for a specific plugin +Note to developers: new Route Plugins must be added to this struct +to be usable by Gloo. + +```yaml +"transformations": .envoy.api.v2.filter.http.RouteTransformations +"faults": .fault.plugins.gloo.solo.io.RouteFaults +"prefixRewrite": .transformation.plugins.gloo.solo.io.PrefixRewrite +"timeout": .google.protobuf.Duration +"retries": .retries.plugins.gloo.solo.io.RetryPolicy +"extensions": .gloo.solo.io.Extensions +"tracing": .tracing.plugins.gloo.solo.io.RouteTracingSettings +"shadowing": .shadowing.plugins.gloo.solo.io.RouteShadowing +"headerManipulation": .headers.plugins.gloo.solo.io.HeaderManipulation +"hostRewrite": .hostrewrite.plugins.gloo.solo.io.HostRewrite +"cors": .cors.plugins.gloo.solo.io.CorsPolicy +"lbHash": .lbhash.plugins.gloo.solo.io.RouteActionHashConfig + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `transformations` | [.envoy.api.v2.filter.http.RouteTransformations](../plugins/transformation/transformation.proto.sk#routetransformations) | Transformations to apply | | +| `faults` | [.fault.plugins.gloo.solo.io.RouteFaults](../plugins/faultinjection/fault.proto.sk#routefaults) | | | +| `prefixRewrite` | [.transformation.plugins.gloo.solo.io.PrefixRewrite](../plugins/transformation/prefix_rewrite.proto.sk#prefixrewrite) | | | +| `timeout` | [.google.protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/duration) | | | +| `retries` | [.retries.plugins.gloo.solo.io.RetryPolicy](../plugins/retries/retries.proto.sk#retrypolicy) | | | +| `extensions` | [.gloo.solo.io.Extensions](../extensions.proto.sk#extensions) | | | +| `tracing` | [.tracing.plugins.gloo.solo.io.RouteTracingSettings](../plugins/tracing/tracing.proto.sk#routetracingsettings) | Defines route-specific tracing configuration. See here for additional information on Envoy's tracing capabilities: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/observability/tracing.html See here for additional information about configuring tracing with Gloo: https://gloo.solo.io/user_guides/setup_options/observability/#tracing | | +| `shadowing` | [.shadowing.plugins.gloo.solo.io.RouteShadowing](../plugins/shadowing/shadowing.proto.sk#routeshadowing) | Specifies traffic shadowing configuration for the route. See here for additional information on Envoy's shadowing capabilities: https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/route/route.proto#envoy-api-msg-route-routeaction-requestmirrorpolicy | | +| `headerManipulation` | [.headers.plugins.gloo.solo.io.HeaderManipulation](../plugins/headers/headers.proto.sk#headermanipulation) | Append/Remove headers on Requests or Responses on this Route | | +| `hostRewrite` | [.hostrewrite.plugins.gloo.solo.io.HostRewrite](../plugins/hostrewrite/hostrewrite.proto.sk#hostrewrite) | Rewrite the Host header for requests matched on this route | | +| `cors` | [.cors.plugins.gloo.solo.io.CorsPolicy](../plugins/cors/cors.proto.sk#corspolicy) | Defines a CORS policy for the route If a CORS policy is also defined on the route's virtual host, the policies are merged. | | +| `lbHash` | [.lbhash.plugins.gloo.solo.io.RouteActionHashConfig](../plugins/lbhash/lbhash.proto.sk#routeactionhashconfig) | For routes served by a hashing load balancer, this defines the input to the hash key Gloo configures Envoy with the first available RouteActionHashConfig among the following ordered list of providers: - route, upstream, virtual service | | + + + + +--- +### DestinationSpec + + +Configuration for Destinations that are tied to the UpstreamSpec or ServiceSpec on that destination + +```yaml +"aws": .aws.plugins.gloo.solo.io.DestinationSpec +"azure": .azure.plugins.gloo.solo.io.DestinationSpec +"rest": .rest.plugins.gloo.solo.io.DestinationSpec +"grpc": .grpc.plugins.gloo.solo.io.DestinationSpec + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `aws` | [.aws.plugins.gloo.solo.io.DestinationSpec](../plugins/aws/aws.proto.sk#destinationspec) | | | +| `azure` | [.azure.plugins.gloo.solo.io.DestinationSpec](../plugins/azure/azure.proto.sk#destinationspec) | | | +| `rest` | [.rest.plugins.gloo.solo.io.DestinationSpec](../plugins/rest/rest.proto.sk#destinationspec) | | | +| `grpc` | [.grpc.plugins.gloo.solo.io.DestinationSpec](../plugins/grpc/grpc.proto.sk#destinationspec) | | | + + + + +--- +### WeightedDestinationPlugins + + +Plugin-specific configuration that is applied when a specific weighted destination +is selected for routing. + +```yaml +"headerManipulation": .headers.plugins.gloo.solo.io.HeaderManipulation +"transformations": .envoy.api.v2.filter.http.RouteTransformations + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `headerManipulation` | [.headers.plugins.gloo.solo.io.HeaderManipulation](../plugins/headers/headers.proto.sk#headermanipulation) | Append/Remove headers on Requests or Responses to/from this Weighted Destination | | +| `transformations` | [.envoy.api.v2.filter.http.RouteTransformations](../plugins/transformation/transformation.proto.sk#routetransformations) | Transformations to apply | | + + + + +--- +### UpstreamSpec + + +Each upstream in Gloo has a type. Supported types include `static`, `kubernetes`, `aws`, `consul`, and more. +Each upstream type is handled by a corresponding Gloo plugin. + +```yaml +"sslConfig": .gloo.solo.io.UpstreamSslConfig +"circuitBreakers": .gloo.solo.io.CircuitBreakerConfig +"loadBalancerConfig": .gloo.solo.io.LoadBalancerConfig +"connectionConfig": .gloo.solo.io.ConnectionConfig +"healthChecks": []gloo.solo.io.HealthCheckConfig +"outlierDetection": .gloo.solo.io.OutlierDetection +"useHttp2": bool +"kube": .kubernetes.plugins.gloo.solo.io.UpstreamSpec +"static": .static.plugins.gloo.solo.io.UpstreamSpec +"pipe": .pipe.plugins.gloo.solo.io.UpstreamSpec +"aws": .aws.plugins.gloo.solo.io.UpstreamSpec +"azure": .azure.plugins.gloo.solo.io.UpstreamSpec +"consul": .consul.plugins.gloo.solo.io.UpstreamSpec +"awsEc2": .aws_ec2.plugins.gloo.solo.io.UpstreamSpec + +``` + +| Field | Type | Description | Default | +| ----- | ---- | ----------- |----------- | +| `sslConfig` | [.gloo.solo.io.UpstreamSslConfig](../ssl.proto.sk#upstreamsslconfig) | | | +| `circuitBreakers` | [.gloo.solo.io.CircuitBreakerConfig](../circuit_breaker.proto.sk#circuitbreakerconfig) | Circuit breakers for this upstream. if not set, the defaults ones from the Gloo settings will be used. if those are not set, [envoy's defaults](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/cluster/circuit_breaker.proto#envoy-api-msg-cluster-circuitbreakers) will be used. | | +| `loadBalancerConfig` | [.gloo.solo.io.LoadBalancerConfig](../load_balancer.proto.sk#loadbalancerconfig) | | | +| `connectionConfig` | [.gloo.solo.io.ConnectionConfig](../connection.proto.sk#connectionconfig) | | | +| `healthChecks` | [[]gloo.solo.io.HealthCheckConfig](../health_check.proto.sk#healthcheckconfig) | | | +| `outlierDetection` | [.gloo.solo.io.OutlierDetection](../health_check.proto.sk#outlierdetection) | | | +| `useHttp2` | `bool` | Use http2 when communicating with this upstream this field is evaluated `true` for upstreams with a grpc service spec | | +| `kube` | [.kubernetes.plugins.gloo.solo.io.UpstreamSpec](../plugins/kubernetes/kubernetes.proto.sk#upstreamspec) | | | +| `static` | [.static.plugins.gloo.solo.io.UpstreamSpec](../plugins/static/static.proto.sk#upstreamspec) | | | +| `pipe` | [.pipe.plugins.gloo.solo.io.UpstreamSpec](../plugins/pipe/pipe.proto.sk#upstreamspec) | | | +| `aws` | [.aws.plugins.gloo.solo.io.UpstreamSpec](../plugins/aws/aws.proto.sk#upstreamspec) | | | +| `azure` | [.azure.plugins.gloo.solo.io.UpstreamSpec](../plugins/azure/azure.proto.sk#upstreamspec) | | | +| `consul` | [.consul.plugins.gloo.solo.io.UpstreamSpec](../plugins/consul/consul.proto.sk#upstreamspec) | | | +| `awsEc2` | [.aws_ec2.plugins.gloo.solo.io.UpstreamSpec](../plugins/aws/ec2/aws_ec2.proto.sk#upstreamspec) | | | + + + + + + + + diff --git a/projects/gloo/api/external/envoy/README.md b/projects/gloo/api/external/envoy/README.md new file mode 100644 index 00000000000..be7eedf4555 --- /dev/null +++ b/projects/gloo/api/external/envoy/README.md @@ -0,0 +1,14 @@ +### Envoy Protos in Gloo + +The envoy api in Gloo is now taken directly from the envoy protos and then copied into the relevant directory +here in the Gloo repo. In order to allow for seamless addition of envoy protos directly into the gloo repo simply +change the go_package option to the appropriate `go-control-plane` package, or if none exists than add the `go-control-plane` one + +For example: + * health_check.proto: `option go_package = "github.com/envoyproxy/go-control-plane/envoy/api/v2/core";` + * outlier_detection.proto: `option go_package = "github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster";` + +These protos will not have any code generated for them as they are not in directory tree containing a `solo-kit.json`. +Any protos which should have code generated for them should either live in the extensions directory, or perhaps a new +more appropriate directory. The extensions directory has all of the custom envoy filter protos which do not have `go` +code pre generated for them. \ No newline at end of file diff --git a/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto b/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto new file mode 100644 index 00000000000..8ba8a3e0ac6 --- /dev/null +++ b/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto @@ -0,0 +1,116 @@ +syntax = "proto3"; + +package envoy.api.v2.cluster; + +option java_outer_classname = "OutlierDetectionProto"; +option java_multiple_files = true; +option java_package = "io.envoyproxy.envoy.api.v2.cluster"; +option go_package = "github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster"; + +import "google/protobuf/duration.proto"; +import "google/protobuf/wrappers.proto"; + +import "validate/validate.proto"; +import "gogoproto/gogo.proto"; + +option (gogoproto.equal_all) = true; + +// [#protodoc-title: Outlier detection] + +// See the :ref:`architecture overview ` for +// more information on outlier detection. +message OutlierDetection { + // The number of consecutive 5xx responses or local origin errors that are mapped + // to 5xx error codes before a consecutive 5xx ejection + // occurs. Defaults to 5. + google.protobuf.UInt32Value consecutive_5xx = 1; + + // The time interval between ejection analysis sweeps. This can result in + // both new ejections as well as hosts being returned to service. Defaults + // to 10000ms or 10s. + google.protobuf.Duration interval = 2 [(validate.rules).duration.gt = {}]; + + // The base time that a host is ejected for. The real time is equal to the + // base time multiplied by the number of times the host has been ejected. + // Defaults to 30000ms or 30s. + google.protobuf.Duration base_ejection_time = 3 [(validate.rules).duration.gt = {}]; + + // The maximum % of an upstream cluster that can be ejected due to outlier + // detection. Defaults to 10% but will eject at least one host regardless of the value. + google.protobuf.UInt32Value max_ejection_percent = 4 [(validate.rules).uint32.lte = 100]; + + // The % chance that a host will be actually ejected when an outlier status + // is detected through consecutive 5xx. This setting can be used to disable + // ejection or to ramp it up slowly. Defaults to 100. + google.protobuf.UInt32Value enforcing_consecutive_5xx = 5 [(validate.rules).uint32.lte = 100]; + + // The % chance that a host will be actually ejected when an outlier status + // is detected through success rate statistics. This setting can be used to + // disable ejection or to ramp it up slowly. Defaults to 100. + google.protobuf.UInt32Value enforcing_success_rate = 6 [(validate.rules).uint32.lte = 100]; + + // The number of hosts in a cluster that must have enough request volume to + // detect success rate outliers. If the number of hosts is less than this + // setting, outlier detection via success rate statistics is not performed + // for any host in the cluster. Defaults to 5. + google.protobuf.UInt32Value success_rate_minimum_hosts = 7; + + // The minimum number of total requests that must be collected in one + // interval (as defined by the interval duration above) to include this host + // in success rate based outlier detection. If the volume is lower than this + // setting, outlier detection via success rate statistics is not performed + // for that host. Defaults to 100. + google.protobuf.UInt32Value success_rate_request_volume = 8; + + // This factor is used to determine the ejection threshold for success rate + // outlier ejection. The ejection threshold is the difference between the + // mean success rate, and the product of this factor and the standard + // deviation of the mean success rate: mean - (stdev * + // success_rate_stdev_factor). This factor is divided by a thousand to get a + // double. That is, if the desired factor is 1.9, the runtime value should + // be 1900. Defaults to 1900. + google.protobuf.UInt32Value success_rate_stdev_factor = 9; + + // The number of consecutive gateway failures (502, 503, 504 status codes) + // before a consecutive gateway failure ejection occurs. Defaults to 5. + google.protobuf.UInt32Value consecutive_gateway_failure = 10; + + // The % chance that a host will be actually ejected when an outlier status + // is detected through consecutive gateway failures. This setting can be + // used to disable ejection or to ramp it up slowly. Defaults to 0. + google.protobuf.UInt32Value enforcing_consecutive_gateway_failure = 11 + [(validate.rules).uint32.lte = 100]; + + // Determines whether to distinguish local origin failures from external errors. If set to true + // the following configuration parameters are taken into account: + // :ref:`consecutive_local_origin_failure`, + // :ref:`enforcing_consecutive_local_origin_failure` + // and + // :ref:`enforcing_local_origin_success_rate`. + // Defaults to false. + bool split_external_local_origin_errors = 12; + + // The number of consecutive locally originated failures before ejection + // occurs. Defaults to 5. Parameter takes effect only when + // :ref:`split_external_local_origin_errors` + // is set to true. + google.protobuf.UInt32Value consecutive_local_origin_failure = 13; + + // The % chance that a host will be actually ejected when an outlier status + // is detected through consecutive locally originated failures. This setting can be + // used to disable ejection or to ramp it up slowly. Defaults to 100. + // Parameter takes effect only when + // :ref:`split_external_local_origin_errors` + // is set to true. + google.protobuf.UInt32Value enforcing_consecutive_local_origin_failure = 14 + [(validate.rules).uint32.lte = 100]; + + // The % chance that a host will be actually ejected when an outlier status + // is detected through success rate statistics for locally originated errors. + // This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. + // Parameter takes effect only when + // :ref:`split_external_local_origin_errors` + // is set to true. + google.protobuf.UInt32Value enforcing_local_origin_success_rate = 15 + [(validate.rules).uint32.lte = 100]; +} \ No newline at end of file diff --git a/projects/gloo/api/external/envoy/api/v2/core/health_check.proto b/projects/gloo/api/external/envoy/api/v2/core/health_check.proto new file mode 100644 index 00000000000..d77e51ad21f --- /dev/null +++ b/projects/gloo/api/external/envoy/api/v2/core/health_check.proto @@ -0,0 +1,272 @@ +syntax = "proto3"; + +package envoy.api.v2.core; + +option java_outer_classname = "HealthCheckProto"; +option java_multiple_files = true; +option java_package = "io.envoyproxy.envoy.api.v2.core"; +option go_package = "github.com/envoyproxy/go-control-plane/envoy/api/v2/core"; + +import "envoy/api/v2/core/base.proto"; +import "envoy/type/range.proto"; + +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/wrappers.proto"; + +import "validate/validate.proto"; +import "gogoproto/gogo.proto"; + +option (gogoproto.equal_all) = true; + +// [#protodoc-title: Health check] +// * Health checking :ref:`architecture overview `. +// * If health checking is configured for a cluster, additional statistics are emitted. They are +// documented :ref:`here `. + +message HealthCheck { + // The time to wait for a health check response. If the timeout is reached the + // health check attempt will be considered a failure. + google.protobuf.Duration timeout = 1 [ + (validate.rules).duration = { + required: true, + gt: {seconds: 0} + }, + (gogoproto.stdduration) = true + ]; + + // The interval between health checks. + google.protobuf.Duration interval = 2 [ + (validate.rules).duration = { + required: true, + gt: {seconds: 0} + }, + (gogoproto.stdduration) = true + ]; + + // An optional jitter amount in milliseconds. If specified, Envoy will start health + // checking after for a random time in ms between 0 and initial_jitter. This only + // applies to the first health check. + google.protobuf.Duration initial_jitter = 20; + + // An optional jitter amount in milliseconds. If specified, during every + // interval Envoy will add interval_jitter to the wait time. + google.protobuf.Duration interval_jitter = 3; + + // An optional jitter amount as a percentage of interval_ms. If specified, + // during every interval Envoy will add interval_ms * + // interval_jitter_percent / 100 to the wait time. + // + // If interval_jitter_ms and interval_jitter_percent are both set, both of + // them will be used to increase the wait time. + uint32 interval_jitter_percent = 18; + + // The number of unhealthy health checks required before a host is marked + // unhealthy. Note that for *http* health checking if a host responds with 503 + // this threshold is ignored and the host is considered unhealthy immediately. + google.protobuf.UInt32Value unhealthy_threshold = 4; + + // The number of healthy health checks required before a host is marked + // healthy. Note that during startup, only a single successful health check is + // required to mark a host healthy. + google.protobuf.UInt32Value healthy_threshold = 5; + + // [#not-implemented-hide:] Non-serving port for health checking. +// google.protobuf.UInt32Value alt_port = 6; + + // Reuse health check connection between health checks. Default is true. + google.protobuf.BoolValue reuse_connection = 7; + + // Describes the encoding of the payload bytes in the payload. + message Payload { + oneof payload { + option (validate.required) = true; + + // Hex encoded payload. E.g., "000000FF". + string text = 1 [(validate.rules).string.min_bytes = 1]; + + // [#not-implemented-hide:] Binary payload. +// bytes binary = 2; + } + } + + // [#comment:next free field: 10] + message HttpHealthCheck { + // The value of the host header in the HTTP health check request. If + // left empty (default value), the name of the cluster this health check is associated + // with will be used. + string host = 1; + + // Specifies the HTTP path that will be requested during health checking. For example + // */healthcheck*. + string path = 2 [(validate.rules).string.min_bytes = 1]; + + // [#not-implemented-hide:] HTTP specific payload. +// Payload send = 3; + + // [#not-implemented-hide:] HTTP specific response. +// Payload receive = 4; + + // An optional service name parameter which is used to validate the identity of + // the health checked cluster. See the :ref:`architecture overview + // ` for more information. + string service_name = 5; + + // 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 + // the documentation on :ref:`custom request headers + // `. + repeated core.HeaderValueOption request_headers_to_add = 6 + [(validate.rules).repeated .max_items = 1000]; + + // Specifies a list of HTTP headers that should be removed from each request that is sent to the + // health checked cluster. + repeated string request_headers_to_remove = 8; + + // If set, health checks will be made using http/2. + bool use_http2 = 7; + + // Specifies a list of HTTP response statuses considered healthy. If provided, replaces default + // 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open + // semantics of :ref:`Int64Range `. + repeated envoy.type.Int64Range expected_statuses = 9; + } + + message TcpHealthCheck { + // Empty payloads imply a connect-only health check. + Payload send = 1; + + // When checking the response, “fuzzy” matching is performed such that each + // binary block must be found, and in the order specified, but not + // necessarily contiguous. + repeated Payload receive = 2; + } + + message RedisHealthCheck { + // If set, optionally perform ``EXISTS `` instead of ``PING``. A return value + // from Redis of 0 (does not exist) is considered a passing healthcheck. A return value other + // than 0 is considered a failure. This allows the user to mark a Redis instance for maintenance + // by setting the specified key to any value and waiting for traffic to drain. + string key = 1; + } + + // `grpc.health.v1.Health + // `_-based + // healthcheck. See `gRPC doc `_ + // for details. + message GrpcHealthCheck { + // An optional service name parameter which will be sent to gRPC service in + // `grpc.health.v1.HealthCheckRequest + // `_. + // message. See `gRPC health-checking overview + // `_ for more information. + string service_name = 1; + + // The value of the :authority header in the gRPC health check request. If + // left empty (default value), the name of the cluster this health check is associated + // with will be used. + string authority = 2; + } + + // Custom health check. + message CustomHealthCheck { + // The registered name of the custom health checker. + string name = 1 [(validate.rules).string.min_bytes = 1]; + + // A custom health checker specific configuration which depends on the custom health checker + // being instantiated. See :api:`envoy/config/health_checker` for reference. + oneof config_type { + google.protobuf.Struct config = 2; + + google.protobuf.Any typed_config = 3; + } + } + + oneof health_checker { + option (validate.required) = true; + + // HTTP health check. + HttpHealthCheck http_health_check = 8; + + // TCP health check. + TcpHealthCheck tcp_health_check = 9; + + // gRPC health check. + GrpcHealthCheck grpc_health_check = 11; + + // Custom health check. + CustomHealthCheck custom_health_check = 13; + } + + reserved 10; // redis_health_check is deprecated by :ref:`custom_health_check + // ` + reserved "redis_health_check"; + + // The "no traffic interval" is a special health check interval that is used when a cluster has + // never had traffic routed to it. This lower interval allows cluster information to be kept up to + // date, without sending a potentially large amount of active health checking traffic for no + // reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the + // standard health check interval that is defined. Note that this interval takes precedence over + // any other. + // + // The default value for "no traffic interval" is 60 seconds. + google.protobuf.Duration no_traffic_interval = 12 [(validate.rules).duration.gt = {}]; + + // The "unhealthy interval" is a health check interval that is used for hosts that are marked as + // unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the + // standard health check interval that is defined. + // + // The default value for "unhealthy interval" is the same as "interval". + google.protobuf.Duration unhealthy_interval = 14 [(validate.rules).duration.gt = {}]; + + // The "unhealthy edge interval" is a special health check interval that is used for the first + // health check right after a host is marked as unhealthy. For subsequent health checks + // Envoy will shift back to using either "unhealthy interval" if present or the standard health + // check interval that is defined. + // + // The default value for "unhealthy edge interval" is the same as "unhealthy interval". + google.protobuf.Duration unhealthy_edge_interval = 15 [(validate.rules).duration.gt = {}]; + + // The "healthy edge interval" is a special health check interval that is used for the first + // health check right after a host is marked as healthy. For subsequent health checks + // Envoy will shift back to using the standard health check interval that is defined. + // + // The default value for "healthy edge interval" is the same as the default interval. + google.protobuf.Duration healthy_edge_interval = 16 [(validate.rules).duration.gt = {}]; + + // Specifies the path to the :ref:`health check event log `. + // If empty, no event log will be written. + string event_log_path = 17; + + // If set to true, health check failure events will always be logged. If set to false, only the + // initial health check failure event will be logged. + // The default value is false. + bool always_log_health_check_failures = 19; +} + +// Endpoint health status. +enum HealthStatus { + // The health status is not known. This is interpreted by Envoy as *HEALTHY*. + UNKNOWN = 0; + + // Healthy. + HEALTHY = 1; + + // Unhealthy. + UNHEALTHY = 2; + + // Connection draining in progress. E.g., + // ``_ + // or + // ``_. + // This is interpreted by Envoy as *UNHEALTHY*. + DRAINING = 3; + + // Health check timed out. This is part of HDS and is interpreted by Envoy as + // *UNHEALTHY*. + TIMEOUT = 4; + + // Degraded. + DEGRADED = 5; +} \ No newline at end of file diff --git a/projects/gloo/pkg/plugins/aws/filter.proto b/projects/gloo/api/external/envoy/extensions/aws/filter.proto similarity index 91% rename from projects/gloo/pkg/plugins/aws/filter.proto rename to projects/gloo/api/external/envoy/extensions/aws/filter.proto index 04f5bb98c69..f515ca4e4fe 100644 --- a/projects/gloo/pkg/plugins/aws/filter.proto +++ b/projects/gloo/api/external/envoy/extensions/aws/filter.proto @@ -5,7 +5,7 @@ syntax = "proto3"; package envoy.config.filter.http.aws.v2; -option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/plugins/aws"; +option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/aws"; import "validate/validate.proto"; diff --git a/projects/gloo/api/external/envoy/extauth/sanitize.proto b/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto similarity index 83% rename from projects/gloo/api/external/envoy/extauth/sanitize.proto rename to projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto index 386256de7e5..d079f1cc508 100644 --- a/projects/gloo/api/external/envoy/extauth/sanitize.proto +++ b/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto @@ -1,6 +1,6 @@ syntax = "proto3"; package envoy.config.filter.http.sanitize.v2; -option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extauth"; +option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/extauth"; message Sanitize { repeated string headers_to_remove = 1; } diff --git a/projects/gloo/api/external/envoy/jwt/solo_jwt_authn.proto b/projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto similarity index 96% rename from projects/gloo/api/external/envoy/jwt/solo_jwt_authn.proto rename to projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto index bd68db0123f..3c22a6618e5 100644 --- a/projects/gloo/api/external/envoy/jwt/solo_jwt_authn.proto +++ b/projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package envoy.config.filter.http.solo_jwt_authn.v2; -option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/jwt"; +option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/jwt"; option java_package = "io.envoyproxy.envoy.config.filter.http.solo_jwt_authn.v2"; option java_outer_classname = "SoloJwtAuthnProto"; option java_multiple_files = true; diff --git a/projects/gloo/api/external/solo-kit.json b/projects/gloo/api/external/envoy/extensions/solo-kit.json similarity index 100% rename from projects/gloo/api/external/solo-kit.json rename to projects/gloo/api/external/envoy/extensions/solo-kit.json diff --git a/projects/gloo/api/external/envoy/waf/waf.proto b/projects/gloo/api/external/envoy/extensions/waf/waf.proto similarity index 96% rename from projects/gloo/api/external/envoy/waf/waf.proto rename to projects/gloo/api/external/envoy/extensions/waf/waf.proto index 63490e5f493..2b804195b99 100644 --- a/projects/gloo/api/external/envoy/waf/waf.proto +++ b/projects/gloo/api/external/envoy/extensions/waf/waf.proto @@ -1,6 +1,6 @@ syntax = "proto3"; package envoy.config.filter.http.modsecurity.v2; -option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/waf"; +option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/waf"; import "gogoproto/gogo.proto"; option (gogoproto.equal_all) = true; diff --git a/projects/gloo/api/external/envoy/type/range.proto b/projects/gloo/api/external/envoy/type/range.proto new file mode 100644 index 00000000000..ad8be80e478 --- /dev/null +++ b/projects/gloo/api/external/envoy/type/range.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; + +package envoy.type; + +option java_outer_classname = "RangeProto"; +option java_multiple_files = true; +option java_package = "io.envoyproxy.envoy.type"; +option go_package = "envoy_type"; + +import "gogoproto/gogo.proto"; + +option (gogoproto.equal_all) = true; + +// [#protodoc-title: Range] + +// Specifies the int64 start and end of the range using half-open interval semantics [start, +// end). +message Int64Range { + // start of the range (inclusive) + int64 start = 1; + + // end of the range (exclusive) + int64 end = 2; +} + +// Specifies the double start and end of the range using half-open interval semantics [start, +// end). +message DoubleRange { + // start of the range (inclusive) + double start = 1; + + // end of the range (exclusive) + double end = 2; +} \ No newline at end of file diff --git a/projects/gloo/api/v1/enterprise/plugins/waf/waf.proto b/projects/gloo/api/v1/enterprise/plugins/waf/waf.proto index b2ef43f2efd..bca65ab9f83 100644 --- a/projects/gloo/api/v1/enterprise/plugins/waf/waf.proto +++ b/projects/gloo/api/v1/enterprise/plugins/waf/waf.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package waf.plugins.gloo.solo.io; -import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/waf/waf.proto"; +import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/waf/waf.proto"; option go_package = "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/external/plugins/waf"; diff --git a/projects/gloo/api/v1/plugins.proto b/projects/gloo/api/v1/plugins.proto index ce6cd14104a..f0c23f490f4 100644 --- a/projects/gloo/api/v1/plugins.proto +++ b/projects/gloo/api/v1/plugins.proto @@ -38,6 +38,9 @@ import "github.com/solo-io/gloo/projects/gloo/api/v1/plugins/faultinjection/faul import "github.com/solo-io/gloo/projects/gloo/api/v1/plugins/headers/headers.proto"; import "github.com/solo-io/gloo/projects/gloo/api/v1/plugins/hostrewrite/hostrewrite.proto"; +import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto"; +import "github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/core/health_check.proto"; + import "google/protobuf/duration.proto"; // Plugin-specific configuration that lives on gateways @@ -136,29 +139,31 @@ message WeightedDestinationPlugins { // Each upstream type is handled by a corresponding Gloo plugin. message UpstreamSpec { - UpstreamSslConfig ssl_config = 6; + UpstreamSslConfig ssl_config = 1; // Circuit breakers for this upstream. if not set, the defaults ones from the Gloo settings will be used. // if those are not set, [envoy's defaults](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/cluster/circuit_breaker.proto#envoy-api-msg-cluster-circuitbreakers) // will be used. - CircuitBreakerConfig circuit_breakers = 7; - LoadBalancerConfig load_balancer_config = 8; - ConnectionConfig connection_config = 9; + CircuitBreakerConfig circuit_breakers = 2; + LoadBalancerConfig load_balancer_config = 3; + ConnectionConfig connection_config = 4; + repeated envoy.api.v2.core.HealthCheck health_checks = 5; + envoy.api.v2.cluster.OutlierDetection outlier_detection = 6; // Use http2 when communicating with this upstream // this field is evaluated `true` for upstreams // with a grpc service spec - bool use_http2 = 10; + bool use_http2 = 7; // Note to developers: new Upstream Plugins must be added to this oneof field // to be usable by Gloo. oneof upstream_type { - kubernetes.plugins.gloo.solo.io.UpstreamSpec kube = 1; - static.plugins.gloo.solo.io.UpstreamSpec static = 4; - pipe.plugins.gloo.solo.io.UpstreamSpec pipe = 12; - aws.plugins.gloo.solo.io.UpstreamSpec aws = 2; - azure.plugins.gloo.solo.io.UpstreamSpec azure = 3; - consul.plugins.gloo.solo.io.UpstreamSpec consul = 5; - aws_ec2.plugins.gloo.solo.io.UpstreamSpec aws_ec2 = 11; + kubernetes.plugins.gloo.solo.io.UpstreamSpec kube = 8; + static.plugins.gloo.solo.io.UpstreamSpec static = 9; + pipe.plugins.gloo.solo.io.UpstreamSpec pipe = 10; + aws.plugins.gloo.solo.io.UpstreamSpec aws = 11; + azure.plugins.gloo.solo.io.UpstreamSpec azure = 12; + consul.plugins.gloo.solo.io.UpstreamSpec consul = 13; + aws_ec2.plugins.gloo.solo.io.UpstreamSpec aws_ec2 = 14; } } \ No newline at end of file diff --git a/projects/gloo/pkg/plugins/aws/filter.pb.go b/projects/gloo/pkg/api/external/envoy/extensions/aws/filter.pb.go similarity index 67% rename from projects/gloo/pkg/plugins/aws/filter.pb.go rename to projects/gloo/pkg/api/external/envoy/extensions/aws/filter.pb.go index d908034db34..43458e883a8 100644 --- a/projects/gloo/pkg/plugins/aws/filter.pb.go +++ b/projects/gloo/pkg/api/external/envoy/extensions/aws/filter.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: filter.proto +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/aws/filter.proto package aws @@ -40,7 +40,7 @@ func (m *LambdaPerRoute) Reset() { *m = LambdaPerRoute{} } func (m *LambdaPerRoute) String() string { return proto.CompactTextString(m) } func (*LambdaPerRoute) ProtoMessage() {} func (*LambdaPerRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_1f5303cab7a20d6f, []int{0} + return fileDescriptor_ec6280b82440c4d3, []int{0} } func (m *LambdaPerRoute) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LambdaPerRoute.Unmarshal(m, b) @@ -99,7 +99,7 @@ func (m *LambdaProtocolExtension) Reset() { *m = LambdaProtocolExtension func (m *LambdaProtocolExtension) String() string { return proto.CompactTextString(m) } func (*LambdaProtocolExtension) ProtoMessage() {} func (*LambdaProtocolExtension) Descriptor() ([]byte, []int) { - return fileDescriptor_1f5303cab7a20d6f, []int{1} + return fileDescriptor_ec6280b82440c4d3, []int{1} } func (m *LambdaProtocolExtension) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LambdaProtocolExtension.Unmarshal(m, b) @@ -152,27 +152,30 @@ func init() { proto.RegisterType((*LambdaProtocolExtension)(nil), "envoy.config.filter.http.aws.v2.LambdaProtocolExtension") } -func init() { proto.RegisterFile("filter.proto", fileDescriptor_1f5303cab7a20d6f) } - -var fileDescriptor_1f5303cab7a20d6f = []byte{ - // 292 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xcd, 0x4a, 0x03, 0x31, - 0x14, 0x85, 0x99, 0xb6, 0x16, 0x27, 0x88, 0x8b, 0x20, 0xb4, 0x88, 0x62, 0xed, 0xaa, 0x1b, 0x13, - 0x50, 0xc4, 0x7d, 0xc1, 0x55, 0x5d, 0xc8, 0x2c, 0xdd, 0x48, 0x9a, 0xde, 0xc9, 0xc4, 0x66, 0x72, - 0xc7, 0x24, 0x33, 0x75, 0x9e, 0xca, 0xbd, 0x2b, 0x5f, 0xc7, 0xb7, 0x90, 0xf9, 0x11, 0x15, 0xdd, - 0xe5, 0x9c, 0xf3, 0x85, 0x0f, 0x2e, 0x39, 0x48, 0xb5, 0x09, 0xe0, 0x58, 0xe1, 0x30, 0x20, 0x3d, - 0x03, 0x5b, 0x61, 0xcd, 0x24, 0xda, 0x54, 0x2b, 0xd6, 0x4f, 0x59, 0x08, 0x05, 0x13, 0x3b, 0xcf, - 0xaa, 0xcb, 0xe3, 0x49, 0x25, 0x8c, 0xde, 0x88, 0x00, 0xfc, 0xeb, 0xd1, 0xfd, 0x9c, 0x4b, 0x72, - 0x78, 0x27, 0xf2, 0xf5, 0x46, 0xdc, 0x83, 0x4b, 0xb0, 0x0c, 0x40, 0x4f, 0xc9, 0xc8, 0x8a, 0x1c, - 0xa6, 0xd1, 0x2c, 0x5a, 0xc4, 0xcb, 0xf8, 0xed, 0xe3, 0x7d, 0x38, 0x72, 0x83, 0x59, 0x94, 0xb4, - 0x35, 0x3d, 0x21, 0xf1, 0x73, 0x29, 0x8c, 0x4e, 0x35, 0xb8, 0xe9, 0xa0, 0x61, 0x92, 0xef, 0x82, - 0x1e, 0x91, 0x3d, 0xe1, 0x6b, 0x2b, 0xa7, 0xc3, 0x59, 0xb4, 0xd8, 0x4f, 0xba, 0x30, 0x7f, 0x8d, - 0xc8, 0xa4, 0xb7, 0x34, 0x52, 0x89, 0xe6, 0xf6, 0x25, 0x80, 0xf5, 0x1a, 0x6d, 0xa3, 0xcb, 0xd0, - 0x87, 0x7f, 0x74, 0x4d, 0x4d, 0xcf, 0xc9, 0xd8, 0x81, 0xd2, 0x68, 0x3b, 0xd7, 0x4f, 0xa0, 0x1f, - 0xe8, 0x82, 0x10, 0x21, 0x25, 0x78, 0xff, 0xb8, 0x85, 0xba, 0x15, 0xff, 0xc2, 0xe2, 0x6e, 0x5c, - 0x41, 0xdd, 0x90, 0x1e, 0xa4, 0x83, 0xd0, 0x92, 0xa3, 0x3f, 0x64, 0x37, 0xae, 0xa0, 0x5e, 0xde, - 0x3c, 0x5c, 0x2b, 0x1d, 0xb2, 0x72, 0xcd, 0x24, 0xe6, 0xdc, 0xa3, 0xc1, 0x0b, 0x8d, 0x5c, 0x19, - 0x44, 0x5e, 0x38, 0x7c, 0x02, 0x19, 0x7c, 0x9f, 0xb6, 0x8a, 0x17, 0xa6, 0x54, 0xda, 0x7a, 0x2e, - 0x76, 0x7e, 0x3d, 0x6e, 0xcf, 0x7a, 0xf5, 0x19, 0x00, 0x00, 0xff, 0xff, 0x41, 0x6f, 0xc7, 0x8b, - 0xa0, 0x01, 0x00, 0x00, +func init() { + proto.RegisterFile("github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/aws/filter.proto", fileDescriptor_ec6280b82440c4d3) +} + +var fileDescriptor_ec6280b82440c4d3 = []byte{ + // 308 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xc1, 0x4a, 0x03, 0x31, + 0x10, 0x86, 0xd9, 0xb6, 0x16, 0x37, 0x07, 0x0f, 0x8b, 0xd0, 0x22, 0x8a, 0xb5, 0xa7, 0x5e, 0x4c, + 0x40, 0xdf, 0xa0, 0xe0, 0xa9, 0x0a, 0xb2, 0x78, 0xf2, 0x22, 0xd3, 0x74, 0xba, 0x8d, 0x4d, 0x33, + 0x6b, 0x92, 0xb6, 0xee, 0x53, 0x79, 0xf7, 0xe4, 0xeb, 0xf8, 0x16, 0xb2, 0xc9, 0x16, 0x15, 0x05, + 0xbd, 0x65, 0xfe, 0xff, 0x0b, 0x1f, 0xc9, 0xb0, 0xbb, 0x42, 0xf9, 0xc5, 0x7a, 0xca, 0x25, 0xad, + 0x84, 0x23, 0x4d, 0xe7, 0x8a, 0x44, 0xa1, 0x89, 0x44, 0x69, 0xe9, 0x11, 0xa5, 0x77, 0x71, 0x82, + 0x52, 0x09, 0x7c, 0xf6, 0x68, 0x0d, 0x68, 0x81, 0x66, 0x43, 0x55, 0x18, 0x8d, 0x53, 0x64, 0x9c, + 0x80, 0xad, 0x13, 0x73, 0xa5, 0x3d, 0x5a, 0x5e, 0x5a, 0xf2, 0x94, 0x9d, 0x06, 0x84, 0x4b, 0x32, + 0x73, 0x55, 0xf0, 0xa6, 0x5a, 0x78, 0x5f, 0x72, 0xd8, 0x3a, 0xbe, 0xb9, 0x38, 0xea, 0x6d, 0x40, + 0xab, 0x19, 0x78, 0x14, 0xbb, 0x43, 0xbc, 0x39, 0x94, 0xec, 0xe0, 0x1a, 0x56, 0xd3, 0x19, 0xdc, + 0xa2, 0xcd, 0x69, 0xed, 0x31, 0x3b, 0x61, 0x1d, 0x03, 0x2b, 0xec, 0x27, 0x83, 0x64, 0x94, 0x8e, + 0xd3, 0xd7, 0xf7, 0xb7, 0x76, 0xc7, 0xb6, 0x06, 0x49, 0x1e, 0xe2, 0xec, 0x98, 0xa5, 0x4f, 0x6b, + 0xd0, 0x6a, 0xae, 0xd0, 0xf6, 0x5b, 0x35, 0x93, 0x7f, 0x06, 0xd9, 0x21, 0xdb, 0x03, 0x57, 0x19, + 0xd9, 0x6f, 0x0f, 0x92, 0xd1, 0x7e, 0x1e, 0x87, 0xe1, 0x4b, 0xc2, 0x7a, 0x8d, 0xa5, 0x96, 0x4a, + 0xd2, 0x57, 0xbb, 0xc7, 0xd4, 0xba, 0x05, 0x39, 0xff, 0x8b, 0xae, 0x8e, 0xb3, 0x33, 0xd6, 0xb5, + 0x58, 0x28, 0x32, 0xd1, 0xf5, 0x15, 0x68, 0x8a, 0x6c, 0xc4, 0x18, 0x48, 0x89, 0xce, 0x3d, 0x2c, + 0xb1, 0x0a, 0xe2, 0x6f, 0x58, 0x1a, 0xcb, 0x09, 0x56, 0x35, 0xe9, 0x50, 0x5a, 0xf4, 0x81, 0xec, + 0xfc, 0x20, 0x63, 0x39, 0xc1, 0x6a, 0x7c, 0x73, 0x3f, 0xf9, 0xdf, 0xa2, 0xca, 0x65, 0xf1, 0xf7, + 0xb2, 0xa6, 0xdd, 0xf0, 0xd9, 0x97, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc7, 0x87, 0x51, 0x22, + 0xfe, 0x01, 0x00, 0x00, } diff --git a/projects/gloo/pkg/api/external/envoy/extauth/sanitize.pb.go b/projects/gloo/pkg/api/external/envoy/extensions/extauth/sanitize.pb.go similarity index 60% rename from projects/gloo/pkg/api/external/envoy/extauth/sanitize.pb.go rename to projects/gloo/pkg/api/external/envoy/extensions/extauth/sanitize.pb.go index 42f8bdac249..00ade44aa73 100644 --- a/projects/gloo/pkg/api/external/envoy/extauth/sanitize.pb.go +++ b/projects/gloo/pkg/api/external/envoy/extensions/extauth/sanitize.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extauth/sanitize.proto +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto package extauth @@ -32,7 +32,7 @@ func (m *Sanitize) Reset() { *m = Sanitize{} } func (m *Sanitize) String() string { return proto.CompactTextString(m) } func (*Sanitize) ProtoMessage() {} func (*Sanitize) Descriptor() ([]byte, []int) { - return fileDescriptor_2e6193e00469e959, []int{0} + return fileDescriptor_673db8aff8673a2c, []int{0} } func (m *Sanitize) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Sanitize.Unmarshal(m, b) @@ -64,21 +64,21 @@ func init() { } func init() { - proto.RegisterFile("github.com/solo-io/gloo/projects/gloo/api/external/envoy/extauth/sanitize.proto", fileDescriptor_2e6193e00469e959) + proto.RegisterFile("github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto", fileDescriptor_673db8aff8673a2c) } -var fileDescriptor_2e6193e00469e959 = []byte{ - // 182 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x8e, 0xb1, 0x0a, 0xc2, 0x30, - 0x14, 0x45, 0x11, 0x41, 0xb4, 0x8b, 0xd8, 0xc9, 0x51, 0xc4, 0x41, 0x04, 0x13, 0x50, 0xf0, 0x03, - 0x44, 0x5c, 0x85, 0xea, 0xe4, 0x52, 0xd2, 0xfa, 0x9a, 0x44, 0xd3, 0xbc, 0x90, 0xbc, 0x16, 0xf5, - 0xeb, 0xc5, 0x5a, 0x1c, 0xc5, 0xf1, 0xdc, 0x73, 0x87, 0x13, 0x1d, 0xa4, 0x26, 0x55, 0x65, 0x2c, - 0xc7, 0x92, 0x07, 0x34, 0xb8, 0xd4, 0xc8, 0xa5, 0x41, 0xe4, 0xce, 0xe3, 0x15, 0x72, 0x0a, 0x1f, - 0x12, 0x4e, 0x73, 0xb8, 0x13, 0x78, 0x2b, 0x0c, 0x07, 0x5b, 0xe3, 0xe3, 0x8d, 0xa2, 0x22, 0xc5, - 0x83, 0xb0, 0x9a, 0xf4, 0x13, 0x98, 0xf3, 0x48, 0x18, 0xcf, 0x1a, 0xcb, 0x72, 0xb4, 0x85, 0x96, - 0xac, 0xd0, 0x86, 0xc0, 0x33, 0x45, 0xe4, 0xd8, 0xf7, 0x58, 0xaf, 0xa6, 0x9b, 0xa8, 0x7f, 0x6c, - 0x31, 0x5e, 0x44, 0x23, 0x05, 0xe2, 0x02, 0x3e, 0xa4, 0x84, 0xa9, 0x87, 0x12, 0x6b, 0x18, 0x77, - 0x26, 0xdd, 0xf9, 0x20, 0x19, 0xb6, 0xe2, 0x84, 0x49, 0x33, 0x6f, 0xf7, 0xe7, 0xdd, 0x7f, 0xc1, - 0xee, 0x26, 0x7f, 0x44, 0x67, 0xbd, 0x26, 0x76, 0xfd, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xc4, 0x05, - 0xee, 0xa4, 0xff, 0x00, 0x00, 0x00, +var fileDescriptor_673db8aff8673a2c = []byte{ + // 191 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x8e, 0xc1, 0x6a, 0xc2, 0x40, + 0x10, 0x86, 0x29, 0x85, 0xd2, 0xe6, 0x52, 0x9a, 0x53, 0x8f, 0xa5, 0xf4, 0x50, 0x04, 0x77, 0x41, + 0xc1, 0x07, 0xf0, 0x05, 0xc4, 0xe8, 0x29, 0x97, 0xb0, 0x89, 0x93, 0xdd, 0xd1, 0xcd, 0xce, 0xb2, + 0x3b, 0x09, 0xea, 0xd3, 0x8b, 0x6b, 0xf0, 0x9c, 0xdb, 0x7c, 0xf3, 0x7f, 0x87, 0x2f, 0x2b, 0x35, + 0xb2, 0xe9, 0x6b, 0xd1, 0x50, 0x27, 0x23, 0x59, 0x9a, 0x23, 0x49, 0x6d, 0x89, 0xa4, 0x0f, 0x74, + 0x84, 0x86, 0xe3, 0x83, 0x94, 0x47, 0x09, 0x67, 0x86, 0xe0, 0x94, 0x95, 0xe0, 0x06, 0xba, 0x24, + 0x74, 0x11, 0xc9, 0xc5, 0xfb, 0xa9, 0x7a, 0x36, 0x32, 0x2a, 0x87, 0x8c, 0x57, 0x10, 0x3e, 0x10, + 0x53, 0xfe, 0x97, 0x44, 0xd1, 0x90, 0x6b, 0x51, 0x8b, 0x16, 0x2d, 0x43, 0x10, 0x86, 0xd9, 0x8b, + 0xa7, 0x38, 0x2c, 0x7e, 0x57, 0xd9, 0xfb, 0x6e, 0xc4, 0x7c, 0x96, 0x7d, 0x19, 0x50, 0x07, 0x08, + 0xb1, 0x62, 0xaa, 0x02, 0x74, 0x34, 0xc0, 0xf7, 0xcb, 0xcf, 0xeb, 0xff, 0x47, 0xf1, 0x39, 0x0e, + 0x7b, 0x2a, 0xd2, 0x7b, 0xbd, 0x2d, 0x37, 0xd3, 0xda, 0xfd, 0x49, 0x4f, 0xeb, 0xaf, 0xdf, 0x52, + 0xf7, 0xf2, 0x16, 0x00, 0x00, 0xff, 0xff, 0xab, 0x9f, 0xdd, 0x4e, 0x15, 0x01, 0x00, 0x00, } diff --git a/projects/gloo/pkg/api/external/envoy/jwt/solo_jwt_authn.pb.go b/projects/gloo/pkg/api/external/envoy/extensions/jwt/solo_jwt_authn.pb.go similarity index 72% rename from projects/gloo/pkg/api/external/envoy/jwt/solo_jwt_authn.pb.go rename to projects/gloo/pkg/api/external/envoy/extensions/jwt/solo_jwt_authn.pb.go index 9f56c2db76f..f6e73dd512b 100644 --- a/projects/gloo/pkg/api/external/envoy/jwt/solo_jwt_authn.pb.go +++ b/projects/gloo/pkg/api/external/envoy/extensions/jwt/solo_jwt_authn.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/jwt/solo_jwt_authn.proto +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto package jwt @@ -37,7 +37,7 @@ func (m *SoloJwtAuthnPerRoute) Reset() { *m = SoloJwtAuthnPerRoute{} } func (m *SoloJwtAuthnPerRoute) String() string { return proto.CompactTextString(m) } func (*SoloJwtAuthnPerRoute) ProtoMessage() {} func (*SoloJwtAuthnPerRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_f8dcaaf88f211b6a, []int{0} + return fileDescriptor_ad27324ed7ce8fda, []int{0} } func (m *SoloJwtAuthnPerRoute) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SoloJwtAuthnPerRoute.Unmarshal(m, b) @@ -100,7 +100,7 @@ func (m *SoloJwtAuthnPerRoute_ClaimToHeader) Reset() { *m = SoloJwtAuthn func (m *SoloJwtAuthnPerRoute_ClaimToHeader) String() string { return proto.CompactTextString(m) } func (*SoloJwtAuthnPerRoute_ClaimToHeader) ProtoMessage() {} func (*SoloJwtAuthnPerRoute_ClaimToHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_f8dcaaf88f211b6a, []int{0, 0} + return fileDescriptor_ad27324ed7ce8fda, []int{0, 0} } func (m *SoloJwtAuthnPerRoute_ClaimToHeader) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SoloJwtAuthnPerRoute_ClaimToHeader.Unmarshal(m, b) @@ -152,7 +152,7 @@ func (m *SoloJwtAuthnPerRoute_ClaimToHeaders) Reset() { *m = SoloJwtAuth func (m *SoloJwtAuthnPerRoute_ClaimToHeaders) String() string { return proto.CompactTextString(m) } func (*SoloJwtAuthnPerRoute_ClaimToHeaders) ProtoMessage() {} func (*SoloJwtAuthnPerRoute_ClaimToHeaders) Descriptor() ([]byte, []int) { - return fileDescriptor_f8dcaaf88f211b6a, []int{0, 1} + return fileDescriptor_ad27324ed7ce8fda, []int{0, 1} } func (m *SoloJwtAuthnPerRoute_ClaimToHeaders) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SoloJwtAuthnPerRoute_ClaimToHeaders.Unmarshal(m, b) @@ -187,37 +187,37 @@ func init() { } func init() { - proto.RegisterFile("github.com/solo-io/gloo/projects/gloo/api/external/envoy/jwt/solo_jwt_authn.proto", fileDescriptor_f8dcaaf88f211b6a) -} - -var fileDescriptor_f8dcaaf88f211b6a = []byte{ - // 435 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0x4f, 0x8b, 0xd3, 0x40, - 0x14, 0x27, 0xdb, 0xdd, 0xa2, 0x53, 0xfc, 0xd3, 0xb1, 0x68, 0xe8, 0xa9, 0x78, 0x2a, 0x0b, 0x4e, - 0xa0, 0x5e, 0x16, 0x4f, 0xba, 0x8b, 0xa0, 0x82, 0xba, 0x46, 0xf7, 0xe2, 0x25, 0xcc, 0x26, 0xaf, - 0xcd, 0x74, 0xa7, 0xf3, 0xc6, 0xc9, 0x4b, 0xdb, 0x1c, 0xfd, 0x08, 0xe2, 0x07, 0x56, 0x32, 0x93, - 0x82, 0x95, 0x15, 0x56, 0xd8, 0x5b, 0xde, 0xef, 0xbd, 0xf9, 0xfd, 0x79, 0xe4, 0xb1, 0x4f, 0x0b, - 0x45, 0x65, 0x7d, 0x29, 0x72, 0x5c, 0x25, 0x15, 0x6a, 0x7c, 0xa6, 0x30, 0x59, 0x68, 0xc4, 0xc4, - 0x3a, 0x5c, 0x42, 0x4e, 0x55, 0xa8, 0xa4, 0x55, 0x09, 0x6c, 0x09, 0x9c, 0x91, 0x3a, 0x01, 0xb3, - 0xc6, 0x26, 0x59, 0x6e, 0xc8, 0xbf, 0xc8, 0x96, 0x1b, 0xca, 0x64, 0x4d, 0xa5, 0x11, 0xd6, 0x21, - 0x21, 0x3f, 0xf6, 0x7d, 0x91, 0xa3, 0x99, 0xab, 0x85, 0x98, 0x2b, 0x4d, 0xe0, 0x44, 0x49, 0x64, - 0xc5, 0x5f, 0xe3, 0xeb, 0xd9, 0xf8, 0xc9, 0x5a, 0x6a, 0x55, 0x48, 0x82, 0x64, 0xf7, 0x11, 0x48, - 0x9e, 0xfe, 0x3a, 0x64, 0xa3, 0xcf, 0xa8, 0xf1, 0xdd, 0x86, 0x5e, 0xb5, 0xc3, 0xe7, 0xe0, 0x52, - 0xac, 0x09, 0xf8, 0x84, 0x0d, 0x1c, 0x7c, 0xab, 0x95, 0x83, 0x15, 0x18, 0x8a, 0xa3, 0x49, 0x34, - 0xbd, 0x9b, 0xfe, 0x09, 0xf1, 0xef, 0x11, 0x1b, 0xe6, 0x5a, 0xaa, 0x55, 0x95, 0x11, 0x66, 0x25, - 0xc8, 0x02, 0x5c, 0x15, 0x1f, 0x4c, 0x7a, 0xd3, 0xc1, 0xec, 0x42, 0xdc, 0xdc, 0x9c, 0xb8, 0x4e, - 0x5f, 0x9c, 0x79, 0xe6, 0x2f, 0xf8, 0x26, 0xf0, 0xbe, 0x36, 0xe4, 0x9a, 0xf4, 0x41, 0xbe, 0x8f, - 0xf2, 0xe3, 0xd6, 0x02, 0x48, 0x97, 0xb9, 0xf6, 0x51, 0x96, 0xcb, 0xbc, 0x84, 0xb8, 0x37, 0x89, - 0xa6, 0x77, 0xda, 0x59, 0x90, 0x81, 0xec, 0xac, 0x85, 0xb9, 0x60, 0x8f, 0xac, 0x6c, 0x34, 0xca, - 0x22, 0x53, 0x26, 0x5b, 0x01, 0xc9, 0x42, 0x92, 0x8c, 0x0f, 0x7d, 0xb2, 0x61, 0xd7, 0x7a, 0x6b, - 0xde, 0x77, 0x8d, 0xf1, 0x05, 0xbb, 0xe7, 0x4d, 0xec, 0xd4, 0xf8, 0x88, 0x1d, 0x79, 0xfd, 0x6e, - 0x19, 0xa1, 0xe0, 0x8f, 0x59, 0x3f, 0x64, 0x8f, 0x0f, 0x3c, 0xdc, 0x55, 0x2d, 0x2e, 0xad, 0x05, - 0x53, 0x74, 0x7e, 0xba, 0x6a, 0xbc, 0x65, 0xf7, 0xf7, 0x68, 0x2b, 0x3e, 0x67, 0xfd, 0x90, 0x2b, - 0x8e, 0xfc, 0xf2, 0x3e, 0xdc, 0xce, 0xf2, 0x76, 0x02, 0x69, 0xc7, 0x3e, 0xfe, 0x19, 0xb1, 0xd1, - 0x75, 0x6b, 0xe5, 0x0f, 0x59, 0xef, 0x0a, 0x9a, 0x2e, 0x56, 0xfb, 0xc9, 0x81, 0x1d, 0xad, 0xa5, - 0xae, 0xc1, 0x67, 0x1a, 0xcc, 0x3e, 0xde, 0xae, 0xa3, 0x2a, 0x0d, 0xec, 0x2f, 0x0e, 0x4e, 0xa2, - 0xd3, 0x1f, 0x11, 0x3b, 0x51, 0x18, 0x04, 0xac, 0xc3, 0x6d, 0xf3, 0x1f, 0x5a, 0xa7, 0xc3, 0x3d, - 0xb1, 0xf6, 0x8f, 0x3e, 0x8f, 0xbe, 0xbe, 0xbc, 0xd9, 0xad, 0xd9, 0xab, 0xc5, 0x3f, 0xee, 0xed, - 0xb2, 0xef, 0x8f, 0xe3, 0xf9, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x99, 0xbb, 0xaf, 0xdc, 0xb6, - 0x03, 0x00, 0x00, + proto.RegisterFile("github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/jwt/solo_jwt_authn.proto", fileDescriptor_ad27324ed7ce8fda) +} + +var fileDescriptor_ad27324ed7ce8fda = []byte{ + // 441 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0xcd, 0x8b, 0x13, 0x31, + 0x14, 0x67, 0xb6, 0xbb, 0x45, 0x53, 0xfc, 0x68, 0x2c, 0x3a, 0xf4, 0x54, 0x3c, 0x95, 0x05, 0x33, + 0x50, 0x2f, 0x8b, 0x37, 0x77, 0x11, 0xfc, 0x40, 0x5d, 0x46, 0xf7, 0x22, 0xc2, 0x90, 0x9d, 0x79, + 0xed, 0xa4, 0x9b, 0xe6, 0xc5, 0xcc, 0x9b, 0xb6, 0x73, 0xf4, 0x6f, 0xf0, 0xea, 0xff, 0xaa, 0x4c, + 0x32, 0x05, 0x2b, 0x0b, 0xae, 0xb0, 0xb7, 0xbc, 0x5f, 0x5e, 0x7e, 0x1f, 0x8f, 0x3c, 0xf6, 0x75, + 0xa1, 0xa8, 0xac, 0x2f, 0x45, 0x8e, 0xab, 0xa4, 0x42, 0x8d, 0xcf, 0x14, 0x26, 0x0b, 0x8d, 0x98, + 0x58, 0x87, 0x4b, 0xc8, 0xa9, 0x0a, 0x95, 0xb4, 0x2a, 0x81, 0x2d, 0x81, 0x33, 0x52, 0x27, 0x60, + 0xd6, 0xd8, 0xf8, 0xd2, 0x54, 0x0a, 0x4d, 0x95, 0x2c, 0x37, 0xe4, 0x1f, 0x67, 0xcb, 0x0d, 0x65, + 0xb2, 0xa6, 0xd2, 0x08, 0xeb, 0x90, 0x90, 0x1f, 0xfb, 0x56, 0x91, 0xa3, 0x99, 0xab, 0x85, 0x98, + 0x2b, 0x4d, 0xe0, 0x44, 0x49, 0x64, 0xc5, 0x5f, 0xed, 0xeb, 0xd9, 0xf8, 0xc9, 0x5a, 0x6a, 0x55, + 0x48, 0x82, 0x64, 0x77, 0x08, 0x24, 0x4f, 0x7f, 0x1d, 0xb2, 0xd1, 0x27, 0xd4, 0xf8, 0x76, 0x43, + 0x2f, 0xdb, 0xe6, 0x73, 0x70, 0x29, 0xd6, 0x04, 0x7c, 0xc2, 0x06, 0x0e, 0xbe, 0xd5, 0xca, 0xc1, + 0x0a, 0x0c, 0xc5, 0xd1, 0x24, 0x9a, 0xde, 0x4d, 0xff, 0x84, 0xf8, 0xf7, 0x88, 0x0d, 0x73, 0x2d, + 0xd5, 0xaa, 0xca, 0x08, 0xb3, 0x12, 0x64, 0x01, 0xae, 0x8a, 0x0f, 0x26, 0xbd, 0xe9, 0x60, 0x76, + 0x21, 0x6e, 0x6e, 0x4e, 0x5c, 0xa7, 0x2f, 0xce, 0x3c, 0xf3, 0x67, 0x7c, 0x1d, 0x78, 0x5f, 0x19, + 0x72, 0x4d, 0xfa, 0x20, 0xdf, 0x47, 0xf9, 0x71, 0x6b, 0x01, 0xa4, 0xcb, 0x5c, 0xfb, 0x28, 0xcb, + 0x65, 0x5e, 0x42, 0xdc, 0x9b, 0x44, 0xd3, 0x3b, 0x6d, 0x2f, 0xc8, 0x40, 0x76, 0xd6, 0xc2, 0x5c, + 0xb0, 0x47, 0x56, 0x36, 0x1a, 0x65, 0x91, 0x29, 0x93, 0xad, 0x80, 0x64, 0x21, 0x49, 0xc6, 0x87, + 0x3e, 0xd9, 0xb0, 0xbb, 0x7a, 0x63, 0xde, 0x77, 0x17, 0xe3, 0x0b, 0x76, 0xcf, 0x9b, 0xd8, 0xa9, + 0xf1, 0x11, 0x3b, 0xf2, 0xfa, 0xdd, 0x30, 0x42, 0xc1, 0x1f, 0xb3, 0x7e, 0xc8, 0x1e, 0x1f, 0x78, + 0xb8, 0xab, 0x5a, 0x5c, 0x5a, 0x0b, 0xa6, 0xe8, 0xfc, 0x74, 0xd5, 0x78, 0xcb, 0xee, 0xef, 0xd1, + 0x56, 0x7c, 0xce, 0xfa, 0x21, 0x57, 0x1c, 0xf9, 0xe1, 0x7d, 0xb8, 0x9d, 0xe1, 0xed, 0x04, 0xd2, + 0x8e, 0x7d, 0xfc, 0x23, 0x62, 0xa3, 0xeb, 0xc6, 0xca, 0x1f, 0xb2, 0xde, 0x15, 0x34, 0x5d, 0xac, + 0xf6, 0xc8, 0x81, 0x1d, 0xad, 0xa5, 0xae, 0xc1, 0x67, 0x1a, 0xcc, 0x3e, 0xde, 0xae, 0xa3, 0x2a, + 0x0d, 0xec, 0x2f, 0x0e, 0x4e, 0xa2, 0xd3, 0x9f, 0x11, 0x3b, 0x51, 0x18, 0x04, 0xac, 0xc3, 0x6d, + 0xf3, 0x1f, 0x5a, 0xa7, 0xc3, 0x3d, 0xb1, 0xf6, 0x47, 0x9f, 0x47, 0x5f, 0xde, 0xdd, 0x6c, 0xed, + 0xec, 0xd5, 0xe2, 0xdf, 0xab, 0x77, 0xd9, 0xf7, 0x7b, 0xf2, 0xfc, 0x77, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x2b, 0xa5, 0x60, 0x48, 0xcc, 0x03, 0x00, 0x00, } diff --git a/projects/gloo/pkg/api/external/envoy/waf/waf.pb.go b/projects/gloo/pkg/api/external/envoy/extensions/waf/waf.pb.go similarity index 79% rename from projects/gloo/pkg/api/external/envoy/waf/waf.pb.go rename to projects/gloo/pkg/api/external/envoy/extensions/waf/waf.pb.go index d36a4340ddf..61aa0ef95ae 100644 --- a/projects/gloo/pkg/api/external/envoy/waf/waf.pb.go +++ b/projects/gloo/pkg/api/external/envoy/extensions/waf/waf.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/waf/waf.proto +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/waf/waf.proto package waf @@ -37,7 +37,7 @@ func (m *ModSecurity) Reset() { *m = ModSecurity{} } func (m *ModSecurity) String() string { return proto.CompactTextString(m) } func (*ModSecurity) ProtoMessage() {} func (*ModSecurity) Descriptor() ([]byte, []int) { - return fileDescriptor_259d6c35da0f75a1, []int{0} + return fileDescriptor_aaf8967e7dbe03c2, []int{0} } func (m *ModSecurity) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ModSecurity.Unmarshal(m, b) @@ -90,7 +90,7 @@ func (m *RuleSet) Reset() { *m = RuleSet{} } func (m *RuleSet) String() string { return proto.CompactTextString(m) } func (*RuleSet) ProtoMessage() {} func (*RuleSet) Descriptor() ([]byte, []int) { - return fileDescriptor_259d6c35da0f75a1, []int{1} + return fileDescriptor_aaf8967e7dbe03c2, []int{1} } func (m *RuleSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RuleSet.Unmarshal(m, b) @@ -138,7 +138,7 @@ func (m *ModSecurityPerRoute) Reset() { *m = ModSecurityPerRoute{} } func (m *ModSecurityPerRoute) String() string { return proto.CompactTextString(m) } func (*ModSecurityPerRoute) ProtoMessage() {} func (*ModSecurityPerRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_259d6c35da0f75a1, []int{2} + return fileDescriptor_aaf8967e7dbe03c2, []int{2} } func (m *ModSecurityPerRoute) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ModSecurityPerRoute.Unmarshal(m, b) @@ -179,29 +179,29 @@ func init() { } func init() { - proto.RegisterFile("github.com/solo-io/gloo/projects/gloo/api/external/envoy/waf/waf.proto", fileDescriptor_259d6c35da0f75a1) + proto.RegisterFile("github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/waf/waf.proto", fileDescriptor_aaf8967e7dbe03c2) } -var fileDescriptor_259d6c35da0f75a1 = []byte{ - // 279 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x51, 0x3d, 0x4f, 0xc3, 0x30, - 0x14, 0x54, 0x88, 0xa0, 0x89, 0xbb, 0x85, 0x0e, 0xa1, 0x03, 0x8a, 0xb2, 0x90, 0x05, 0x1b, 0x95, - 0x8d, 0x09, 0x31, 0x74, 0xab, 0x84, 0xdc, 0x8d, 0x05, 0xe5, 0xe3, 0xc5, 0x35, 0xb8, 0x79, 0x91, - 0xfd, 0x52, 0xda, 0x8d, 0x9f, 0xc3, 0xef, 0xe2, 0x97, 0xa0, 0x26, 0x15, 0x62, 0x41, 0xea, 0xd4, - 0xc1, 0xd2, 0xbb, 0xd3, 0x9d, 0xef, 0xa4, 0x63, 0x73, 0xa5, 0x69, 0xd5, 0x15, 0xbc, 0xc4, 0xb5, - 0x70, 0x68, 0xf0, 0x56, 0xa3, 0x50, 0x06, 0x51, 0xb4, 0x16, 0xdf, 0xa0, 0x24, 0x37, 0xa0, 0xbc, - 0xd5, 0x02, 0xb6, 0x04, 0xb6, 0xc9, 0x8d, 0x80, 0x66, 0x83, 0x3b, 0xf1, 0x91, 0xd7, 0xfb, 0xc7, - 0x5b, 0x8b, 0x84, 0xd1, 0x4d, 0x4f, 0xf2, 0x12, 0x9b, 0x5a, 0x2b, 0x5e, 0x6b, 0x43, 0x60, 0xf9, - 0x8a, 0xa8, 0xe5, 0x6b, 0xac, 0x1c, 0x94, 0x9d, 0xd5, 0xb4, 0xe3, 0x9b, 0xd9, 0x74, 0xa2, 0x50, - 0x61, 0xef, 0x11, 0xfb, 0x6b, 0xb0, 0xa7, 0x5b, 0x36, 0x5e, 0x60, 0xb5, 0x3c, 0xe8, 0xa2, 0x29, - 0x0b, 0x2a, 0xed, 0xf2, 0xc2, 0x40, 0x15, 0x7b, 0x89, 0x97, 0x05, 0xf2, 0x17, 0x47, 0x0b, 0x16, - 0xda, 0xce, 0xc0, 0xab, 0x03, 0x72, 0xf1, 0x59, 0xe2, 0x67, 0xe3, 0xd9, 0x1d, 0x3f, 0x32, 0x9d, - 0xcb, 0xce, 0xc0, 0x12, 0x48, 0x06, 0x76, 0x38, 0x5c, 0xfa, 0xc0, 0x46, 0x07, 0x32, 0xba, 0x62, - 0xc1, 0xf0, 0x33, 0xd9, 0x3e, 0x35, 0x94, 0xa3, 0x5e, 0x46, 0x36, 0x9a, 0xb0, 0xf3, 0x5a, 0x1b, - 0x70, 0xb1, 0x9f, 0xf8, 0x59, 0x28, 0x07, 0x90, 0x7e, 0x7a, 0xec, 0xf2, 0x4f, 0xed, 0x67, 0xb0, - 0x12, 0x3b, 0x82, 0x13, 0xd6, 0x7f, 0x9a, 0x7f, 0x7d, 0x5f, 0x7b, 0x2f, 0x8f, 0xc7, 0xad, 0xd8, - 0xbe, 0xab, 0x7f, 0x96, 0x2c, 0x2e, 0xfa, 0x1d, 0xee, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xa0, - 0x93, 0xac, 0x8e, 0x10, 0x02, 0x00, 0x00, +var fileDescriptor_aaf8967e7dbe03c2 = []byte{ + // 285 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x91, 0xbf, 0x4e, 0xf3, 0x30, + 0x14, 0xc5, 0x95, 0xaf, 0xfa, 0x68, 0xe2, 0x6e, 0xa1, 0x43, 0xe8, 0x80, 0xa2, 0x2c, 0x64, 0xc1, + 0x46, 0x65, 0x63, 0x64, 0x45, 0x95, 0xa8, 0xbb, 0xb1, 0xa0, 0xfc, 0xb9, 0x71, 0x0d, 0x6e, 0x6e, + 0x64, 0xdf, 0x94, 0x76, 0xe3, 0x71, 0x78, 0x2e, 0x9e, 0x04, 0xd5, 0xa9, 0x10, 0x1b, 0x9d, 0x18, + 0x2c, 0xdd, 0x9f, 0x7d, 0x8f, 0xcf, 0x91, 0x0e, 0x5b, 0x2a, 0x4d, 0xeb, 0xbe, 0xe4, 0x15, 0x6e, + 0x84, 0x43, 0x83, 0xd7, 0x1a, 0x85, 0x32, 0x88, 0xa2, 0xb3, 0xf8, 0x02, 0x15, 0xb9, 0x81, 0x8a, + 0x4e, 0x0b, 0xd8, 0x11, 0xd8, 0xb6, 0x30, 0x02, 0xda, 0x2d, 0xee, 0x3d, 0xb6, 0x4e, 0x63, 0xeb, + 0xc4, 0x5b, 0xd1, 0x1c, 0x0e, 0xef, 0x2c, 0x12, 0xc6, 0x57, 0xfe, 0x9d, 0x57, 0xd8, 0x36, 0x5a, + 0xf1, 0x46, 0x1b, 0x02, 0xcb, 0xd7, 0x44, 0x1d, 0xdf, 0x60, 0xed, 0xa0, 0xea, 0xad, 0xa6, 0x3d, + 0xdf, 0xce, 0x67, 0x53, 0x85, 0x0a, 0xbd, 0x46, 0x1c, 0xa6, 0x41, 0x9e, 0xed, 0xd8, 0x64, 0x81, + 0xf5, 0xea, 0xb8, 0x17, 0xcf, 0x58, 0x58, 0x6b, 0x57, 0x94, 0x06, 0xea, 0x24, 0x48, 0x83, 0x3c, + 0x94, 0xdf, 0x1c, 0x2f, 0x58, 0x64, 0x7b, 0x03, 0xcf, 0x0e, 0xc8, 0x25, 0xff, 0xd2, 0x51, 0x3e, + 0x99, 0xdf, 0xf0, 0x13, 0xdd, 0xb9, 0xec, 0x0d, 0xac, 0x80, 0x64, 0x68, 0x87, 0xc1, 0x65, 0x77, + 0x6c, 0x7c, 0xbc, 0x8c, 0x2f, 0x58, 0x38, 0xfc, 0x4c, 0xd6, 0xbb, 0x46, 0x72, 0xec, 0xd7, 0xc8, + 0xc6, 0x53, 0xf6, 0xbf, 0xd1, 0x06, 0x5c, 0x32, 0x4a, 0x47, 0x79, 0x24, 0x07, 0xc8, 0xde, 0x03, + 0x76, 0xfe, 0x23, 0xf6, 0x23, 0x58, 0x89, 0x3d, 0xc1, 0x1f, 0xc6, 0xbf, 0x5f, 0x7e, 0x7c, 0x5e, + 0x06, 0x4f, 0x0f, 0xa7, 0x15, 0xda, 0xbd, 0xaa, 0xdf, 0x4b, 0x2d, 0xcf, 0x7c, 0x25, 0xb7, 0x5f, + 0x01, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x9c, 0xbc, 0xae, 0x26, 0x02, 0x00, 0x00, } func (this *ModSecurity) Equal(that interface{}) bool { diff --git a/projects/gloo/pkg/api/v1/external/plugins/waf/waf.pb.go b/projects/gloo/pkg/api/v1/external/plugins/waf/waf.pb.go index aa561427918..f5d76e4dfa7 100644 --- a/projects/gloo/pkg/api/v1/external/plugins/waf/waf.pb.go +++ b/projects/gloo/pkg/api/v1/external/plugins/waf/waf.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" - waf "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/waf" + waf "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/waf" ) // Reference imports to suppress errors if they are not otherwise used. @@ -270,32 +270,33 @@ func init() { } var fileDescriptor_f15f34bd79a50cd0 = []byte{ - // 395 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x52, 0xc1, 0xaa, 0xd3, 0x40, - 0x14, 0x35, 0x16, 0x24, 0x6f, 0xc2, 0xdb, 0x0c, 0x41, 0x42, 0x17, 0x52, 0x02, 0x42, 0x37, 0xce, - 0x68, 0x04, 0x97, 0x2e, 0xde, 0xc3, 0x87, 0x22, 0xdd, 0xa4, 0xe2, 0xc2, 0x4d, 0x49, 0xd3, 0x9b, - 0xe9, 0xd8, 0x69, 0xee, 0x30, 0x73, 0x53, 0xed, 0x57, 0xf8, 0x1b, 0x7e, 0x86, 0xdf, 0xe2, 0x97, - 0x48, 0x92, 0xa6, 0xb6, 0x42, 0xa1, 0x2b, 0x17, 0x03, 0xe7, 0xce, 0xe5, 0x9c, 0x73, 0xef, 0xe5, - 0xb0, 0x99, 0xd2, 0xb4, 0x6e, 0x96, 0xa2, 0xc4, 0xad, 0xf4, 0x68, 0xf0, 0x85, 0x46, 0xa9, 0x0c, - 0xa2, 0xb4, 0x0e, 0xbf, 0x42, 0x49, 0xbe, 0xaf, 0x0a, 0xab, 0xe5, 0xee, 0x95, 0x84, 0x9a, 0xc0, - 0x59, 0xa7, 0x3d, 0x48, 0x6b, 0x1a, 0xa5, 0x6b, 0x2f, 0xbf, 0x15, 0x55, 0xfb, 0x84, 0x75, 0x48, - 0xc8, 0x93, 0x0e, 0xf6, 0x2d, 0xd1, 0x32, 0x45, 0x2b, 0x2a, 0x34, 0x8e, 0x1f, 0xae, 0x37, 0x82, - 0xef, 0x04, 0xae, 0x2e, 0x8c, 0x84, 0x7a, 0x87, 0xfb, 0x73, 0x87, 0x71, 0xac, 0x50, 0x61, 0x07, - 0x65, 0x8b, 0xfa, 0xdf, 0xf4, 0x57, 0xc0, 0xc2, 0x39, 0x10, 0xe9, 0x5a, 0x79, 0x3e, 0x66, 0xe1, - 0x4a, 0xfb, 0x62, 0x69, 0x60, 0x95, 0x04, 0x93, 0x60, 0x1a, 0xe6, 0xc7, 0x9a, 0x7f, 0x60, 0xb7, - 0x25, 0x3a, 0x58, 0xb8, 0xc6, 0xc0, 0xc2, 0x03, 0x25, 0x8f, 0x27, 0xc1, 0x34, 0xca, 0x9e, 0x8b, - 0x4b, 0x83, 0x8b, 0x7b, 0x74, 0x90, 0x37, 0x06, 0xe6, 0x40, 0x79, 0x54, 0xfe, 0x2d, 0xf8, 0x8c, - 0xdd, 0x0c, 0x2a, 0x3e, 0x19, 0x4d, 0x46, 0xd3, 0x28, 0x7b, 0x29, 0xba, 0x91, 0x45, 0x89, 0x75, - 0xa5, 0x95, 0xa8, 0xb4, 0x21, 0x70, 0x62, 0x4d, 0x64, 0xc5, 0x16, 0x57, 0x1e, 0xca, 0xc6, 0x69, - 0xda, 0x8b, 0x5d, 0x26, 0x06, 0xc5, 0xd0, 0xf5, 0xc0, 0xa7, 0x3f, 0x02, 0x16, 0x9d, 0x78, 0xf1, - 0x37, 0xec, 0x69, 0xd9, 0x78, 0xc2, 0x6d, 0x6b, 0xd0, 0x2d, 0xb6, 0xf0, 0xe4, 0x74, 0xad, 0xba, - 0x91, 0x6f, 0xde, 0x3f, 0xca, 0xe3, 0xbe, 0x3f, 0xec, 0x3d, 0xef, 0xba, 0x3c, 0x63, 0xf1, 0xbf, - 0xbc, 0x4a, 0x1b, 0x48, 0x46, 0x07, 0x16, 0x3f, 0x67, 0x3d, 0x68, 0x03, 0x77, 0x31, 0xe3, 0xf7, - 0x67, 0xbf, 0x9f, 0xf6, 0x16, 0xd2, 0x0d, 0xbb, 0xfd, 0xbc, 0x46, 0x4f, 0x57, 0x1d, 0xf6, 0x2d, - 0x0b, 0x07, 0xbf, 0xc3, 0x4d, 0xd3, 0xcb, 0x37, 0x1d, 0x14, 0xf3, 0x23, 0xa7, 0x35, 0xcb, 0xb1, - 0x21, 0xf8, 0x1f, 0x66, 0x77, 0x1f, 0x7f, 0xfe, 0x7e, 0x16, 0x7c, 0x79, 0x77, 0x5d, 0x24, 0xed, - 0x46, 0x1d, 0xf3, 0x3f, 0x24, 0xf3, 0x24, 0xfd, 0xcb, 0x27, 0x5d, 0x04, 0x5f, 0xff, 0x09, 0x00, - 0x00, 0xff, 0xff, 0xe9, 0xdc, 0x4c, 0x5a, 0x4b, 0x03, 0x00, 0x00, + // 402 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x53, 0xc1, 0x8a, 0x13, 0x41, + 0x10, 0x75, 0x0c, 0xc8, 0x6c, 0x87, 0xbd, 0x34, 0x41, 0x86, 0x1c, 0x24, 0x0c, 0x08, 0xb9, 0xd8, + 0xad, 0x23, 0x78, 0xf4, 0xb0, 0x8b, 0xa2, 0xc8, 0x1e, 0x9c, 0x88, 0x07, 0x2f, 0x61, 0x32, 0xa9, + 0xe9, 0xb4, 0xdb, 0xe9, 0x6a, 0xba, 0x6b, 0xa2, 0xf9, 0x0a, 0x7f, 0xc3, 0xcf, 0xf0, 0x5b, 0xfc, + 0x12, 0x99, 0x9e, 0x9d, 0xb8, 0xbb, 0x10, 0xc8, 0x69, 0x0f, 0x0d, 0xef, 0x75, 0xf1, 0xde, 0xeb, + 0x2a, 0xaa, 0xd9, 0x95, 0xd2, 0xb4, 0x69, 0x57, 0xa2, 0xc6, 0xad, 0x0c, 0x68, 0xf0, 0x85, 0x46, + 0xa9, 0x0c, 0xa2, 0x74, 0x1e, 0xbf, 0x43, 0x4d, 0xa1, 0x67, 0x95, 0xd3, 0x72, 0xf7, 0x4a, 0x82, + 0x25, 0xf0, 0xce, 0xeb, 0x00, 0xd2, 0x99, 0x56, 0x69, 0x1b, 0xe4, 0x8f, 0xaa, 0xe9, 0x8e, 0x70, + 0x1e, 0x09, 0x79, 0x16, 0x61, 0x5f, 0x12, 0x9d, 0x52, 0x74, 0xa6, 0x42, 0xe3, 0xf4, 0xf3, 0xe9, + 0x41, 0xf0, 0x93, 0xc0, 0xdb, 0xca, 0x48, 0xb0, 0x3b, 0xdc, 0x47, 0x6a, 0x83, 0xc6, 0xfb, 0x61, + 0xd3, 0x89, 0x42, 0x85, 0x11, 0xca, 0x0e, 0xf5, 0xb7, 0xf9, 0x9f, 0x84, 0xa5, 0x0b, 0x20, 0xd2, + 0x56, 0x05, 0x3e, 0x65, 0xe9, 0x5a, 0x87, 0x6a, 0x65, 0x60, 0x9d, 0x25, 0xb3, 0x64, 0x9e, 0x96, + 0x07, 0xce, 0x3f, 0xb2, 0xf3, 0x1a, 0x3d, 0x2c, 0x7d, 0x6b, 0x60, 0x19, 0x80, 0xb2, 0xc7, 0xb3, + 0x64, 0x3e, 0x2e, 0x9e, 0x8b, 0x63, 0x3d, 0x88, 0x4b, 0xf4, 0x50, 0xb6, 0x06, 0x16, 0x40, 0xe5, + 0xb8, 0xfe, 0x4f, 0xf8, 0x15, 0x3b, 0x1b, 0x5c, 0x42, 0x36, 0x9a, 0x8d, 0xe6, 0xe3, 0xe2, 0xa5, + 0x88, 0xaf, 0x17, 0x35, 0xda, 0x46, 0x2b, 0xd1, 0x68, 0x43, 0xe0, 0xc5, 0x86, 0xc8, 0x89, 0x2d, + 0xae, 0x03, 0xd4, 0xad, 0xd7, 0xb4, 0x17, 0xbb, 0x42, 0x0c, 0x8e, 0xa9, 0xef, 0x41, 0xc8, 0x7f, + 0x25, 0x6c, 0x7c, 0x2b, 0x8b, 0xbf, 0x61, 0x4f, 0xeb, 0x36, 0x10, 0x6e, 0xbb, 0x80, 0xd8, 0xd8, + 0x32, 0x90, 0xd7, 0x56, 0xc5, 0x27, 0x9f, 0x7d, 0x78, 0x54, 0x4e, 0xfa, 0xfa, 0xd0, 0xf7, 0x22, + 0x56, 0x79, 0xc1, 0x26, 0xf7, 0x75, 0x8d, 0x36, 0x90, 0x8d, 0x6e, 0x54, 0xfc, 0xae, 0xea, 0xbd, + 0x36, 0x70, 0x31, 0x61, 0xfc, 0xf2, 0xce, 0xed, 0x97, 0xbd, 0x83, 0xfc, 0x9a, 0x9d, 0x7f, 0xdd, + 0x60, 0xa0, 0x93, 0x06, 0xfb, 0x96, 0xa5, 0x43, 0xde, 0xcd, 0x4c, 0xf3, 0xe3, 0x33, 0x1d, 0x1c, + 0xcb, 0x83, 0xa6, 0x0b, 0x2b, 0xb1, 0x25, 0x78, 0x88, 0xb0, 0x8b, 0x4f, 0xbf, 0xff, 0x3e, 0x4b, + 0xbe, 0xbd, 0x3b, 0x6d, 0x3b, 0xdd, 0xb5, 0x3a, 0x7c, 0x85, 0x61, 0x49, 0x6f, 0x7d, 0x84, 0xd5, + 0x93, 0xb8, 0x82, 0xaf, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x9d, 0x07, 0x17, 0xfc, 0x56, 0x03, + 0x00, 0x00, } func (this *Settings) Equal(that interface{}) bool { diff --git a/projects/gloo/pkg/api/v1/health_check.pb.go b/projects/gloo/pkg/api/v1/health_check.pb.go new file mode 100644 index 00000000000..fac29c0c3c3 --- /dev/null +++ b/projects/gloo/pkg/api/v1/health_check.pb.go @@ -0,0 +1,806 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/health_check.proto + +package v1 + +import ( + bytes "bytes" + fmt "fmt" + math "math" + time "time" + + _ "github.com/envoyproxy/protoc-gen-validate/validate" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + types "github.com/gogo/protobuf/types" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// +//Envoy cluster health check configuration +// +//See [envoy docs](https://www.envoyproxy.io/docs/envoy/v1.11.0/intro/arch_overview/upstream/health_checking#arch-overview-health-checking) for more information on how health checks work in envoy +//Or examine the [config definition](https://www.envoyproxy.io/docs/envoy/v1.11.0/api-v2/api/v2/core/health_check.proto#envoy-api-msg-core-healthcheck). +type HealthCheckConfig struct { + Timeout *time.Duration `protobuf:"bytes,1,opt,name=timeout,proto3,stdduration" json:"timeout,omitempty"` + Interval *time.Duration `protobuf:"bytes,2,opt,name=interval,proto3,stdduration" json:"interval,omitempty"` + // The number of unhealthy health checks required before a host is marked + // unhealthy. Note that for *http* health checking if a host responds with 503 + // this threshold is ignored and the host is considered unhealthy immediately. + UnhealthyThreshold *types.UInt32Value `protobuf:"bytes,4,opt,name=unhealthy_threshold,json=unhealthyThreshold,proto3" json:"unhealthy_threshold,omitempty"` + // The number of healthy health checks required before a host is marked + // healthy. Note that during startup, only a single successful health check is + // required to mark a host healthy. + HealthyThreshold *types.UInt32Value `protobuf:"bytes,5,opt,name=healthy_threshold,json=healthyThreshold,proto3" json:"healthy_threshold,omitempty"` + // Types that are valid to be assigned to HealthChecker: + // *HealthCheckConfig_HttpHealthCheck_ + // *HealthCheckConfig_GrpcHealthCheck_ + HealthChecker isHealthCheckConfig_HealthChecker `protobuf_oneof:"health_checker"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HealthCheckConfig) Reset() { *m = HealthCheckConfig{} } +func (m *HealthCheckConfig) String() string { return proto.CompactTextString(m) } +func (*HealthCheckConfig) ProtoMessage() {} +func (*HealthCheckConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_17ca67440953dae5, []int{0} +} +func (m *HealthCheckConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HealthCheckConfig.Unmarshal(m, b) +} +func (m *HealthCheckConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HealthCheckConfig.Marshal(b, m, deterministic) +} +func (m *HealthCheckConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_HealthCheckConfig.Merge(m, src) +} +func (m *HealthCheckConfig) XXX_Size() int { + return xxx_messageInfo_HealthCheckConfig.Size(m) +} +func (m *HealthCheckConfig) XXX_DiscardUnknown() { + xxx_messageInfo_HealthCheckConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_HealthCheckConfig proto.InternalMessageInfo + +type isHealthCheckConfig_HealthChecker interface { + isHealthCheckConfig_HealthChecker() + Equal(interface{}) bool +} + +type HealthCheckConfig_HttpHealthCheck_ struct { + HttpHealthCheck *HealthCheckConfig_HttpHealthCheck `protobuf:"bytes,8,opt,name=http_health_check,json=httpHealthCheck,proto3,oneof"` +} +type HealthCheckConfig_GrpcHealthCheck_ struct { + GrpcHealthCheck *HealthCheckConfig_GrpcHealthCheck `protobuf:"bytes,11,opt,name=grpc_health_check,json=grpcHealthCheck,proto3,oneof"` +} + +func (*HealthCheckConfig_HttpHealthCheck_) isHealthCheckConfig_HealthChecker() {} +func (*HealthCheckConfig_GrpcHealthCheck_) isHealthCheckConfig_HealthChecker() {} + +func (m *HealthCheckConfig) GetHealthChecker() isHealthCheckConfig_HealthChecker { + if m != nil { + return m.HealthChecker + } + return nil +} + +func (m *HealthCheckConfig) GetTimeout() *time.Duration { + if m != nil { + return m.Timeout + } + return nil +} + +func (m *HealthCheckConfig) GetInterval() *time.Duration { + if m != nil { + return m.Interval + } + return nil +} + +func (m *HealthCheckConfig) GetUnhealthyThreshold() *types.UInt32Value { + if m != nil { + return m.UnhealthyThreshold + } + return nil +} + +func (m *HealthCheckConfig) GetHealthyThreshold() *types.UInt32Value { + if m != nil { + return m.HealthyThreshold + } + return nil +} + +func (m *HealthCheckConfig) GetHttpHealthCheck() *HealthCheckConfig_HttpHealthCheck { + if x, ok := m.GetHealthChecker().(*HealthCheckConfig_HttpHealthCheck_); ok { + return x.HttpHealthCheck + } + return nil +} + +func (m *HealthCheckConfig) GetGrpcHealthCheck() *HealthCheckConfig_GrpcHealthCheck { + if x, ok := m.GetHealthChecker().(*HealthCheckConfig_GrpcHealthCheck_); ok { + return x.GrpcHealthCheck + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HealthCheckConfig) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*HealthCheckConfig_HttpHealthCheck_)(nil), + (*HealthCheckConfig_GrpcHealthCheck_)(nil), + } +} + +type HealthCheckConfig_HttpHealthCheck struct { + // The value of the host header in the HTTP health check request. If + // left empty (default value), the name of the cluster this health check is associated + // with will be used. + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` + // Specifies the HTTP path that will be requested during health checking. For example + // */healthcheck*. + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + // An optional service name parameter which is used to validate the identity of + // the health checked cluster. See the :ref:`architecture overview + // ` for more information. + ServiceName string `protobuf:"bytes,5,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + // If set, health checks will be made using http/2. + UseHttp2 bool `protobuf:"varint,7,opt,name=use_http2,json=useHttp2,proto3" json:"use_http2,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HealthCheckConfig_HttpHealthCheck) Reset() { *m = HealthCheckConfig_HttpHealthCheck{} } +func (m *HealthCheckConfig_HttpHealthCheck) String() string { return proto.CompactTextString(m) } +func (*HealthCheckConfig_HttpHealthCheck) ProtoMessage() {} +func (*HealthCheckConfig_HttpHealthCheck) Descriptor() ([]byte, []int) { + return fileDescriptor_17ca67440953dae5, []int{0, 0} +} +func (m *HealthCheckConfig_HttpHealthCheck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HealthCheckConfig_HttpHealthCheck.Unmarshal(m, b) +} +func (m *HealthCheckConfig_HttpHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HealthCheckConfig_HttpHealthCheck.Marshal(b, m, deterministic) +} +func (m *HealthCheckConfig_HttpHealthCheck) XXX_Merge(src proto.Message) { + xxx_messageInfo_HealthCheckConfig_HttpHealthCheck.Merge(m, src) +} +func (m *HealthCheckConfig_HttpHealthCheck) XXX_Size() int { + return xxx_messageInfo_HealthCheckConfig_HttpHealthCheck.Size(m) +} +func (m *HealthCheckConfig_HttpHealthCheck) XXX_DiscardUnknown() { + xxx_messageInfo_HealthCheckConfig_HttpHealthCheck.DiscardUnknown(m) +} + +var xxx_messageInfo_HealthCheckConfig_HttpHealthCheck proto.InternalMessageInfo + +func (m *HealthCheckConfig_HttpHealthCheck) GetHost() string { + if m != nil { + return m.Host + } + return "" +} + +func (m *HealthCheckConfig_HttpHealthCheck) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *HealthCheckConfig_HttpHealthCheck) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *HealthCheckConfig_HttpHealthCheck) GetUseHttp2() bool { + if m != nil { + return m.UseHttp2 + } + return false +} + +// `grpc.health.v1.Health +// `_-based +// healthcheck. See `gRPC doc `_ +// for details. +type HealthCheckConfig_GrpcHealthCheck struct { + // An optional service name parameter which will be sent to gRPC service in + // `grpc.health.v1.HealthCheckRequest + // `_. + // message. See `gRPC health-checking overview + // `_ for more information. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + // The value of the :authority header in the gRPC health check request. If + // left empty (default value), the name of the cluster this health check is associated + // with will be used. + Authority string `protobuf:"bytes,2,opt,name=authority,proto3" json:"authority,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HealthCheckConfig_GrpcHealthCheck) Reset() { *m = HealthCheckConfig_GrpcHealthCheck{} } +func (m *HealthCheckConfig_GrpcHealthCheck) String() string { return proto.CompactTextString(m) } +func (*HealthCheckConfig_GrpcHealthCheck) ProtoMessage() {} +func (*HealthCheckConfig_GrpcHealthCheck) Descriptor() ([]byte, []int) { + return fileDescriptor_17ca67440953dae5, []int{0, 1} +} +func (m *HealthCheckConfig_GrpcHealthCheck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HealthCheckConfig_GrpcHealthCheck.Unmarshal(m, b) +} +func (m *HealthCheckConfig_GrpcHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HealthCheckConfig_GrpcHealthCheck.Marshal(b, m, deterministic) +} +func (m *HealthCheckConfig_GrpcHealthCheck) XXX_Merge(src proto.Message) { + xxx_messageInfo_HealthCheckConfig_GrpcHealthCheck.Merge(m, src) +} +func (m *HealthCheckConfig_GrpcHealthCheck) XXX_Size() int { + return xxx_messageInfo_HealthCheckConfig_GrpcHealthCheck.Size(m) +} +func (m *HealthCheckConfig_GrpcHealthCheck) XXX_DiscardUnknown() { + xxx_messageInfo_HealthCheckConfig_GrpcHealthCheck.DiscardUnknown(m) +} + +var xxx_messageInfo_HealthCheckConfig_GrpcHealthCheck proto.InternalMessageInfo + +func (m *HealthCheckConfig_GrpcHealthCheck) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *HealthCheckConfig_GrpcHealthCheck) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +// +//Envoy cluster health check configuration +// +//See [envoy docs](https://www.envoyproxy.io/docs/envoy/v1.11.0/intro/arch_overview/upstream/outlier#arch-overview-outlier-detection) for more information on how health checks work in envoy +//Or examine the [config definition](https://github.com/envoyproxy/envoy/blob/v1.11.0/api/envoy/api/v2/cluster/outlier_detection.proto#L22). +type OutlierDetection struct { + // The number of consecutive 5xx responses or local origin errors that are mapped + // to 5xx error codes before a consecutive 5xx ejection + // occurs. Defaults to 5. + Consecutive_5Xx *types.UInt32Value `protobuf:"bytes,1,opt,name=consecutive_5xx,json=consecutive5xx,proto3" json:"consecutive_5xx,omitempty"` + // The time interval between ejection analysis sweeps. This can result in + // both new ejections as well as hosts being returned to service. Defaults + // to 10000ms or 10s. + Interval *types.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` + // The base time that a host is ejected for. The real time is equal to the + // base time multiplied by the number of times the host has been ejected. + // Defaults to 30000ms or 30s. + BaseEjectionTime *types.Duration `protobuf:"bytes,3,opt,name=base_ejection_time,json=baseEjectionTime,proto3" json:"base_ejection_time,omitempty"` + // The maximum % of an upstream cluster that can be ejected due to outlier + // detection. Defaults to 10% but will eject at least one host regardless of the value. + MaxEjectionPercent *types.UInt32Value `protobuf:"bytes,4,opt,name=max_ejection_percent,json=maxEjectionPercent,proto3" json:"max_ejection_percent,omitempty"` + // The % chance that a host will be actually ejected when an outlier status + // is detected through consecutive 5xx. This setting can be used to disable + // ejection or to ramp it up slowly. Defaults to 100. + EnforcingConsecutive_5Xx *types.UInt32Value `protobuf:"bytes,5,opt,name=enforcing_consecutive_5xx,json=enforcingConsecutive5xx,proto3" json:"enforcing_consecutive_5xx,omitempty"` + // The % chance that a host will be actually ejected when an outlier status + // is detected through success rate statistics. This setting can be used to + // disable ejection or to ramp it up slowly. Defaults to 100. + EnforcingSuccessRate *types.UInt32Value `protobuf:"bytes,6,opt,name=enforcing_success_rate,json=enforcingSuccessRate,proto3" json:"enforcing_success_rate,omitempty"` + // The number of hosts in a cluster that must have enough request volume to + // detect success rate outliers. If the number of hosts is less than this + // setting, outlier detection via success rate statistics is not performed + // for any host in the cluster. Defaults to 5. + SuccessRateMinimumHosts *types.UInt32Value `protobuf:"bytes,7,opt,name=success_rate_minimum_hosts,json=successRateMinimumHosts,proto3" json:"success_rate_minimum_hosts,omitempty"` + // The minimum number of total requests that must be collected in one + // interval (as defined by the interval duration above) to include this host + // in success rate based outlier detection. If the volume is lower than this + // setting, outlier detection via success rate statistics is not performed + // for that host. Defaults to 100. + SuccessRateRequestVolume *types.UInt32Value `protobuf:"bytes,8,opt,name=success_rate_request_volume,json=successRateRequestVolume,proto3" json:"success_rate_request_volume,omitempty"` + // This factor is used to determine the ejection threshold for success rate + // outlier ejection. The ejection threshold is the difference between the + // mean success rate, and the product of this factor and the standard + // deviation of the mean success rate: mean - (stdev * + // success_rate_stdev_factor). This factor is divided by a thousand to get a + // double. That is, if the desired factor is 1.9, the runtime value should + // be 1900. Defaults to 1900. + SuccessRateStdevFactor *types.UInt32Value `protobuf:"bytes,9,opt,name=success_rate_stdev_factor,json=successRateStdevFactor,proto3" json:"success_rate_stdev_factor,omitempty"` + // The number of consecutive gateway failures (502, 503, 504 status codes) + // before a consecutive gateway failure ejection occurs. Defaults to 5. + ConsecutiveGatewayFailure *types.UInt32Value `protobuf:"bytes,10,opt,name=consecutive_gateway_failure,json=consecutiveGatewayFailure,proto3" json:"consecutive_gateway_failure,omitempty"` + // The % chance that a host will be actually ejected when an outlier status + // is detected through consecutive gateway failures. This setting can be + // used to disable ejection or to ramp it up slowly. Defaults to 0. + EnforcingConsecutiveGatewayFailure *types.UInt32Value `protobuf:"bytes,11,opt,name=enforcing_consecutive_gateway_failure,json=enforcingConsecutiveGatewayFailure,proto3" json:"enforcing_consecutive_gateway_failure,omitempty"` + // Determines whether to distinguish local origin failures from external errors. If set to true + // the following configuration parameters are taken into account: + // :ref:`consecutive_local_origin_failure`, + // :ref:`enforcing_consecutive_local_origin_failure` + // and + // :ref:`enforcing_local_origin_success_rate`. + // Defaults to false. + SplitExternalLocalOriginErrors bool `protobuf:"varint,12,opt,name=split_external_local_origin_errors,json=splitExternalLocalOriginErrors,proto3" json:"split_external_local_origin_errors,omitempty"` + // The number of consecutive locally originated failures before ejection + // occurs. Defaults to 5. Parameter takes effect only when + // :ref:`split_external_local_origin_errors` + // is set to true. + ConsecutiveLocalOriginFailure *types.UInt32Value `protobuf:"bytes,13,opt,name=consecutive_local_origin_failure,json=consecutiveLocalOriginFailure,proto3" json:"consecutive_local_origin_failure,omitempty"` + // The % chance that a host will be actually ejected when an outlier status + // is detected through consecutive locally originated failures. This setting can be + // used to disable ejection or to ramp it up slowly. Defaults to 100. + // Parameter takes effect only when + // :ref:`split_external_local_origin_errors` + // is set to true. + EnforcingConsecutiveLocalOriginFailure *types.UInt32Value `protobuf:"bytes,14,opt,name=enforcing_consecutive_local_origin_failure,json=enforcingConsecutiveLocalOriginFailure,proto3" json:"enforcing_consecutive_local_origin_failure,omitempty"` + // The % chance that a host will be actually ejected when an outlier status + // is detected through success rate statistics for locally originated errors. + // This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. + // Parameter takes effect only when + // :ref:`split_external_local_origin_errors` + // is set to true. + EnforcingLocalOriginSuccessRate *types.UInt32Value `protobuf:"bytes,15,opt,name=enforcing_local_origin_success_rate,json=enforcingLocalOriginSuccessRate,proto3" json:"enforcing_local_origin_success_rate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OutlierDetection) Reset() { *m = OutlierDetection{} } +func (m *OutlierDetection) String() string { return proto.CompactTextString(m) } +func (*OutlierDetection) ProtoMessage() {} +func (*OutlierDetection) Descriptor() ([]byte, []int) { + return fileDescriptor_17ca67440953dae5, []int{1} +} +func (m *OutlierDetection) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OutlierDetection.Unmarshal(m, b) +} +func (m *OutlierDetection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OutlierDetection.Marshal(b, m, deterministic) +} +func (m *OutlierDetection) XXX_Merge(src proto.Message) { + xxx_messageInfo_OutlierDetection.Merge(m, src) +} +func (m *OutlierDetection) XXX_Size() int { + return xxx_messageInfo_OutlierDetection.Size(m) +} +func (m *OutlierDetection) XXX_DiscardUnknown() { + xxx_messageInfo_OutlierDetection.DiscardUnknown(m) +} + +var xxx_messageInfo_OutlierDetection proto.InternalMessageInfo + +func (m *OutlierDetection) GetConsecutive_5Xx() *types.UInt32Value { + if m != nil { + return m.Consecutive_5Xx + } + return nil +} + +func (m *OutlierDetection) GetInterval() *types.Duration { + if m != nil { + return m.Interval + } + return nil +} + +func (m *OutlierDetection) GetBaseEjectionTime() *types.Duration { + if m != nil { + return m.BaseEjectionTime + } + return nil +} + +func (m *OutlierDetection) GetMaxEjectionPercent() *types.UInt32Value { + if m != nil { + return m.MaxEjectionPercent + } + return nil +} + +func (m *OutlierDetection) GetEnforcingConsecutive_5Xx() *types.UInt32Value { + if m != nil { + return m.EnforcingConsecutive_5Xx + } + return nil +} + +func (m *OutlierDetection) GetEnforcingSuccessRate() *types.UInt32Value { + if m != nil { + return m.EnforcingSuccessRate + } + return nil +} + +func (m *OutlierDetection) GetSuccessRateMinimumHosts() *types.UInt32Value { + if m != nil { + return m.SuccessRateMinimumHosts + } + return nil +} + +func (m *OutlierDetection) GetSuccessRateRequestVolume() *types.UInt32Value { + if m != nil { + return m.SuccessRateRequestVolume + } + return nil +} + +func (m *OutlierDetection) GetSuccessRateStdevFactor() *types.UInt32Value { + if m != nil { + return m.SuccessRateStdevFactor + } + return nil +} + +func (m *OutlierDetection) GetConsecutiveGatewayFailure() *types.UInt32Value { + if m != nil { + return m.ConsecutiveGatewayFailure + } + return nil +} + +func (m *OutlierDetection) GetEnforcingConsecutiveGatewayFailure() *types.UInt32Value { + if m != nil { + return m.EnforcingConsecutiveGatewayFailure + } + return nil +} + +func (m *OutlierDetection) GetSplitExternalLocalOriginErrors() bool { + if m != nil { + return m.SplitExternalLocalOriginErrors + } + return false +} + +func (m *OutlierDetection) GetConsecutiveLocalOriginFailure() *types.UInt32Value { + if m != nil { + return m.ConsecutiveLocalOriginFailure + } + return nil +} + +func (m *OutlierDetection) GetEnforcingConsecutiveLocalOriginFailure() *types.UInt32Value { + if m != nil { + return m.EnforcingConsecutiveLocalOriginFailure + } + return nil +} + +func (m *OutlierDetection) GetEnforcingLocalOriginSuccessRate() *types.UInt32Value { + if m != nil { + return m.EnforcingLocalOriginSuccessRate + } + return nil +} + +func init() { + proto.RegisterType((*HealthCheckConfig)(nil), "gloo.solo.io.HealthCheckConfig") + proto.RegisterType((*HealthCheckConfig_HttpHealthCheck)(nil), "gloo.solo.io.HealthCheckConfig.HttpHealthCheck") + proto.RegisterType((*HealthCheckConfig_GrpcHealthCheck)(nil), "gloo.solo.io.HealthCheckConfig.GrpcHealthCheck") + proto.RegisterType((*OutlierDetection)(nil), "gloo.solo.io.OutlierDetection") +} + +func init() { + proto.RegisterFile("github.com/solo-io/gloo/projects/gloo/api/v1/health_check.proto", fileDescriptor_17ca67440953dae5) +} + +var fileDescriptor_17ca67440953dae5 = []byte{ + // 888 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x96, 0xdd, 0x6e, 0x1b, 0x45, + 0x14, 0xc7, 0xbb, 0x89, 0xdd, 0xc6, 0xe3, 0x10, 0x27, 0x43, 0xd4, 0x6c, 0x9c, 0x36, 0x0d, 0x41, + 0xa0, 0x2a, 0x12, 0xbb, 0x90, 0xaa, 0x48, 0x88, 0x0b, 0x44, 0xd2, 0xb4, 0x29, 0xa2, 0x14, 0x6d, + 0x4a, 0x11, 0x1f, 0xd5, 0x68, 0x32, 0x3e, 0xde, 0x9d, 0x76, 0x77, 0x67, 0x99, 0x0f, 0xd7, 0xe1, + 0x16, 0x1e, 0x82, 0x47, 0x40, 0xf0, 0x02, 0x88, 0xab, 0xbe, 0x05, 0x97, 0x48, 0xdc, 0xf5, 0x2d, + 0xd0, 0xce, 0xfa, 0x63, 0xd7, 0x36, 0xc1, 0xbe, 0x1b, 0x9f, 0x3d, 0xff, 0xdf, 0x39, 0xfe, 0x9f, + 0x33, 0xab, 0x45, 0x9f, 0x84, 0x5c, 0x47, 0xe6, 0xdc, 0x63, 0x22, 0xf1, 0x95, 0x88, 0xc5, 0x7b, + 0x5c, 0xf8, 0x61, 0x2c, 0x84, 0x9f, 0x49, 0xf1, 0x1c, 0x98, 0x56, 0xc5, 0x2f, 0x9a, 0x71, 0xbf, + 0xf7, 0x81, 0x1f, 0x01, 0x8d, 0x75, 0x44, 0x58, 0x04, 0xec, 0x85, 0x97, 0x49, 0xa1, 0x05, 0x5e, + 0xcd, 0x9f, 0x7b, 0xb9, 0xd4, 0xe3, 0xa2, 0xbd, 0xd5, 0xa3, 0x31, 0xef, 0x50, 0x0d, 0xfe, 0xf0, + 0x50, 0xa4, 0xb5, 0x37, 0x43, 0x11, 0x0a, 0x7b, 0xf4, 0xf3, 0xd3, 0x20, 0xba, 0x1b, 0x0a, 0x11, + 0xc6, 0xe0, 0xdb, 0x5f, 0xe7, 0xa6, 0xeb, 0xbf, 0x94, 0x34, 0xcb, 0x40, 0xaa, 0xff, 0x7a, 0xde, + 0x31, 0x92, 0x6a, 0x2e, 0xd2, 0xe2, 0xf9, 0xfe, 0x5f, 0x75, 0xb4, 0x71, 0x6a, 0x7b, 0x3a, 0xce, + 0x5b, 0x3a, 0x16, 0x69, 0x97, 0x87, 0xf8, 0x23, 0x74, 0x4d, 0xf3, 0x04, 0x84, 0xd1, 0xae, 0xb3, + 0xe7, 0xdc, 0x6e, 0x1e, 0x6e, 0x7b, 0x05, 0xc7, 0x1b, 0x72, 0xbc, 0x7b, 0x03, 0xce, 0x51, 0xed, + 0x97, 0xbf, 0x6f, 0x39, 0xc1, 0x30, 0x1f, 0x7f, 0x8c, 0x56, 0x78, 0xaa, 0x41, 0xf6, 0x68, 0xec, + 0x2e, 0xcd, 0xa7, 0x1d, 0x09, 0xf0, 0x23, 0xf4, 0xa6, 0x49, 0x0b, 0x8b, 0x2e, 0x88, 0x8e, 0x24, + 0xa8, 0x48, 0xc4, 0x1d, 0xb7, 0x66, 0x39, 0x37, 0xa6, 0x38, 0x5f, 0x3d, 0x4c, 0xf5, 0x9d, 0xc3, + 0xa7, 0x34, 0x36, 0x10, 0xe0, 0x91, 0xf0, 0xc9, 0x50, 0x87, 0x1f, 0xa2, 0x8d, 0x69, 0x58, 0x7d, + 0x0e, 0xd8, 0xfa, 0x14, 0xea, 0x19, 0xda, 0x88, 0xb4, 0xce, 0x48, 0x79, 0x7e, 0xee, 0x8a, 0x45, + 0xf9, 0x5e, 0x79, 0x80, 0xde, 0x94, 0x9b, 0xde, 0xa9, 0xd6, 0x59, 0x29, 0x7a, 0x7a, 0x25, 0x68, + 0x45, 0xd5, 0x50, 0x8e, 0x0f, 0x65, 0xc6, 0xaa, 0xf8, 0xe6, 0x7c, 0xf8, 0x07, 0x32, 0x63, 0x13, + 0xf8, 0xb0, 0x1a, 0x6a, 0xff, 0xec, 0xa0, 0xd6, 0x44, 0x17, 0x18, 0xa3, 0x5a, 0x24, 0x54, 0x31, + 0xe0, 0x46, 0x60, 0xcf, 0xf8, 0x26, 0xaa, 0x65, 0x54, 0x47, 0x76, 0x70, 0x8d, 0xa3, 0xc6, 0x9f, + 0xaf, 0x5f, 0x2d, 0xd7, 0xe4, 0xd2, 0x9e, 0x13, 0xd8, 0x30, 0x7e, 0x0b, 0xad, 0x2a, 0x90, 0x3d, + 0xce, 0x80, 0xa4, 0x34, 0x01, 0x6b, 0x65, 0x23, 0x68, 0x0e, 0x62, 0x5f, 0xd0, 0x04, 0xf0, 0x0e, + 0x6a, 0x18, 0x05, 0x24, 0xff, 0x7f, 0x87, 0xee, 0xb5, 0x3d, 0xe7, 0xf6, 0x4a, 0xb0, 0x62, 0x14, + 0xe4, 0xc5, 0x0f, 0xdb, 0x01, 0x6a, 0x4d, 0x34, 0x3b, 0x85, 0x74, 0xa6, 0x91, 0x37, 0x50, 0x83, + 0x1a, 0x1d, 0x09, 0xc9, 0xf5, 0x45, 0xd1, 0x59, 0x30, 0x0e, 0x1c, 0x6d, 0xa1, 0xb5, 0xb2, 0x69, + 0x20, 0x71, 0xfd, 0x8f, 0xd7, 0xaf, 0x96, 0x9d, 0xfd, 0xdf, 0x9b, 0x68, 0xfd, 0xb1, 0xd1, 0x31, + 0x07, 0x79, 0x0f, 0x34, 0xb0, 0x7c, 0xe1, 0xf0, 0x09, 0x6a, 0x31, 0x91, 0x2a, 0x60, 0x46, 0xf3, + 0x1e, 0x90, 0xbb, 0xfd, 0xfe, 0x60, 0xc1, 0x2f, 0xdf, 0x87, 0xb5, 0x92, 0xe8, 0x6e, 0xbf, 0x8f, + 0x3f, 0x5d, 0x64, 0xc9, 0x51, 0x6e, 0x63, 0xfd, 0x37, 0x67, 0xe9, 0xe0, 0x4a, 0x69, 0xd5, 0xcf, + 0x10, 0x3e, 0xa7, 0x0a, 0x08, 0x3c, 0x2f, 0x5a, 0x23, 0xf9, 0x05, 0x72, 0x97, 0x17, 0x81, 0xad, + 0xe7, 0x80, 0x93, 0x81, 0xfe, 0x09, 0x4f, 0x00, 0x7f, 0x83, 0x36, 0x13, 0xda, 0x1f, 0x33, 0x33, + 0x90, 0x0c, 0x52, 0x3d, 0xcf, 0x05, 0x1a, 0x4c, 0xfb, 0x60, 0xc9, 0xed, 0x04, 0x38, 0xa1, 0xfd, + 0x21, 0xf7, 0xcb, 0x02, 0x81, 0x19, 0xda, 0x86, 0xb4, 0x2b, 0x24, 0xe3, 0x69, 0x48, 0x26, 0x3d, + 0xac, 0x2f, 0xc6, 0xdf, 0x1a, 0x91, 0x8e, 0xab, 0xbe, 0x3e, 0x43, 0xd7, 0xc7, 0x45, 0x94, 0x61, + 0x0c, 0x94, 0x22, 0x92, 0x6a, 0x70, 0xaf, 0x2e, 0x56, 0x61, 0x73, 0x84, 0x39, 0x2b, 0x28, 0x01, + 0xd5, 0xb9, 0x3d, 0xed, 0x32, 0x94, 0x24, 0x3c, 0xe5, 0x89, 0x49, 0x48, 0xbe, 0xfb, 0xca, 0x6e, + 0xeb, 0xff, 0x2d, 0xc2, 0x96, 0x1a, 0xe3, 0x1e, 0x15, 0xea, 0xd3, 0x5c, 0x8c, 0xbf, 0x43, 0x3b, + 0x15, 0xb4, 0x84, 0x1f, 0x0c, 0x28, 0x4d, 0x7a, 0x22, 0x36, 0x09, 0x0c, 0xde, 0x14, 0x97, 0xb3, + 0xdd, 0x12, 0x3b, 0x28, 0xe4, 0x4f, 0xad, 0x1a, 0x7f, 0x8d, 0xb6, 0x2b, 0x70, 0xa5, 0x3b, 0xd0, + 0x23, 0x5d, 0xca, 0xb4, 0x90, 0x6e, 0x63, 0x0e, 0xf4, 0xf5, 0x12, 0xfa, 0x2c, 0x17, 0xdf, 0xb7, + 0x5a, 0xfc, 0x3d, 0xda, 0x29, 0x8f, 0x32, 0xa4, 0x1a, 0x5e, 0xd2, 0x0b, 0xd2, 0xa5, 0x3c, 0x36, + 0x12, 0x5c, 0x34, 0x07, 0x7a, 0xbb, 0x04, 0x78, 0x50, 0xe8, 0xef, 0x17, 0x72, 0xfc, 0x23, 0x7a, + 0x67, 0xf6, 0xca, 0x4c, 0xd6, 0x69, 0x2e, 0x36, 0xdc, 0xfd, 0x59, 0xeb, 0x33, 0x51, 0xfb, 0x33, + 0xb4, 0xaf, 0xb2, 0x98, 0x6b, 0x02, 0x7d, 0x0d, 0x32, 0xa5, 0x31, 0x89, 0x05, 0xa3, 0x31, 0x11, + 0x92, 0x87, 0x3c, 0x25, 0x20, 0xa5, 0x90, 0xca, 0x5d, 0xb5, 0x2f, 0xa8, 0x5d, 0x9b, 0x79, 0x32, + 0x48, 0xfc, 0x3c, 0xcf, 0x7b, 0x6c, 0xd3, 0x4e, 0x6c, 0x16, 0x06, 0xb4, 0x57, 0xee, 0xbe, 0x02, + 0x1a, 0xfe, 0x85, 0x37, 0xe6, 0xb0, 0xea, 0x66, 0x89, 0x52, 0xaa, 0x32, 0x6c, 0xf9, 0x27, 0x07, + 0x1d, 0xcc, 0xf6, 0x6b, 0x66, 0xc5, 0xb5, 0xc5, 0x4c, 0x7b, 0x77, 0x96, 0x69, 0x33, 0xba, 0x30, + 0xe8, 0xed, 0x71, 0x13, 0x95, 0xc2, 0x95, 0xfb, 0xd8, 0x5a, 0xac, 0xfa, 0xad, 0x11, 0xb3, 0x54, + 0xb2, 0x74, 0x35, 0x8f, 0x3e, 0xfc, 0xf5, 0x9f, 0x5d, 0xe7, 0xdb, 0xf7, 0xe7, 0xfb, 0x96, 0xca, + 0x5e, 0x84, 0x83, 0xef, 0xa9, 0xf3, 0xab, 0xb6, 0xf2, 0x9d, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, + 0x9f, 0xe4, 0x5e, 0x88, 0x86, 0x09, 0x00, 0x00, +} + +func (this *HealthCheckConfig) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*HealthCheckConfig) + if !ok { + that2, ok := that.(HealthCheckConfig) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Timeout != nil && that1.Timeout != nil { + if *this.Timeout != *that1.Timeout { + return false + } + } else if this.Timeout != nil { + return false + } else if that1.Timeout != nil { + return false + } + if this.Interval != nil && that1.Interval != nil { + if *this.Interval != *that1.Interval { + return false + } + } else if this.Interval != nil { + return false + } else if that1.Interval != nil { + return false + } + if !this.UnhealthyThreshold.Equal(that1.UnhealthyThreshold) { + return false + } + if !this.HealthyThreshold.Equal(that1.HealthyThreshold) { + return false + } + if that1.HealthChecker == nil { + if this.HealthChecker != nil { + return false + } + } else if this.HealthChecker == nil { + return false + } else if !this.HealthChecker.Equal(that1.HealthChecker) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *HealthCheckConfig_HttpHealthCheck_) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*HealthCheckConfig_HttpHealthCheck_) + if !ok { + that2, ok := that.(HealthCheckConfig_HttpHealthCheck_) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.HttpHealthCheck.Equal(that1.HttpHealthCheck) { + return false + } + return true +} +func (this *HealthCheckConfig_GrpcHealthCheck_) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*HealthCheckConfig_GrpcHealthCheck_) + if !ok { + that2, ok := that.(HealthCheckConfig_GrpcHealthCheck_) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.GrpcHealthCheck.Equal(that1.GrpcHealthCheck) { + return false + } + return true +} +func (this *HealthCheckConfig_HttpHealthCheck) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*HealthCheckConfig_HttpHealthCheck) + if !ok { + that2, ok := that.(HealthCheckConfig_HttpHealthCheck) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Host != that1.Host { + return false + } + if this.Path != that1.Path { + return false + } + if this.ServiceName != that1.ServiceName { + return false + } + if this.UseHttp2 != that1.UseHttp2 { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *HealthCheckConfig_GrpcHealthCheck) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*HealthCheckConfig_GrpcHealthCheck) + if !ok { + that2, ok := that.(HealthCheckConfig_GrpcHealthCheck) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.ServiceName != that1.ServiceName { + return false + } + if this.Authority != that1.Authority { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *OutlierDetection) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OutlierDetection) + if !ok { + that2, ok := that.(OutlierDetection) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Consecutive_5Xx.Equal(that1.Consecutive_5Xx) { + return false + } + if !this.Interval.Equal(that1.Interval) { + return false + } + if !this.BaseEjectionTime.Equal(that1.BaseEjectionTime) { + return false + } + if !this.MaxEjectionPercent.Equal(that1.MaxEjectionPercent) { + return false + } + if !this.EnforcingConsecutive_5Xx.Equal(that1.EnforcingConsecutive_5Xx) { + return false + } + if !this.EnforcingSuccessRate.Equal(that1.EnforcingSuccessRate) { + return false + } + if !this.SuccessRateMinimumHosts.Equal(that1.SuccessRateMinimumHosts) { + return false + } + if !this.SuccessRateRequestVolume.Equal(that1.SuccessRateRequestVolume) { + return false + } + if !this.SuccessRateStdevFactor.Equal(that1.SuccessRateStdevFactor) { + return false + } + if !this.ConsecutiveGatewayFailure.Equal(that1.ConsecutiveGatewayFailure) { + return false + } + if !this.EnforcingConsecutiveGatewayFailure.Equal(that1.EnforcingConsecutiveGatewayFailure) { + return false + } + if this.SplitExternalLocalOriginErrors != that1.SplitExternalLocalOriginErrors { + return false + } + if !this.ConsecutiveLocalOriginFailure.Equal(that1.ConsecutiveLocalOriginFailure) { + return false + } + if !this.EnforcingConsecutiveLocalOriginFailure.Equal(that1.EnforcingConsecutiveLocalOriginFailure) { + return false + } + if !this.EnforcingLocalOriginSuccessRate.Equal(that1.EnforcingLocalOriginSuccessRate) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} diff --git a/projects/gloo/pkg/api/v1/plugins.pb.go b/projects/gloo/pkg/api/v1/plugins.pb.go index 71994cc0235..1a15cd20e6a 100644 --- a/projects/gloo/pkg/api/v1/plugins.pb.go +++ b/projects/gloo/pkg/api/v1/plugins.pb.go @@ -9,6 +9,8 @@ import ( math "math" time "time" + cluster "github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster" + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" _ "github.com/gogo/protobuf/types" @@ -583,17 +585,19 @@ func (m *WeightedDestinationPlugins) GetTransformations() *transformation.RouteT // Each upstream in Gloo has a type. Supported types include `static`, `kubernetes`, `aws`, `consul`, and more. // Each upstream type is handled by a corresponding Gloo plugin. type UpstreamSpec struct { - SslConfig *UpstreamSslConfig `protobuf:"bytes,6,opt,name=ssl_config,json=sslConfig,proto3" json:"ssl_config,omitempty"` + SslConfig *UpstreamSslConfig `protobuf:"bytes,1,opt,name=ssl_config,json=sslConfig,proto3" json:"ssl_config,omitempty"` // Circuit breakers for this upstream. if not set, the defaults ones from the Gloo settings will be used. // if those are not set, [envoy's defaults](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/cluster/circuit_breaker.proto#envoy-api-msg-cluster-circuitbreakers) // will be used. - CircuitBreakers *CircuitBreakerConfig `protobuf:"bytes,7,opt,name=circuit_breakers,json=circuitBreakers,proto3" json:"circuit_breakers,omitempty"` - LoadBalancerConfig *LoadBalancerConfig `protobuf:"bytes,8,opt,name=load_balancer_config,json=loadBalancerConfig,proto3" json:"load_balancer_config,omitempty"` - ConnectionConfig *ConnectionConfig `protobuf:"bytes,9,opt,name=connection_config,json=connectionConfig,proto3" json:"connection_config,omitempty"` + CircuitBreakers *CircuitBreakerConfig `protobuf:"bytes,2,opt,name=circuit_breakers,json=circuitBreakers,proto3" json:"circuit_breakers,omitempty"` + LoadBalancerConfig *LoadBalancerConfig `protobuf:"bytes,3,opt,name=load_balancer_config,json=loadBalancerConfig,proto3" json:"load_balancer_config,omitempty"` + ConnectionConfig *ConnectionConfig `protobuf:"bytes,4,opt,name=connection_config,json=connectionConfig,proto3" json:"connection_config,omitempty"` + HealthChecks []*core.HealthCheck `protobuf:"bytes,5,rep,name=health_checks,json=healthChecks,proto3" json:"health_checks,omitempty"` + OutlierDetection *cluster.OutlierDetection `protobuf:"bytes,6,opt,name=outlier_detection,json=outlierDetection,proto3" json:"outlier_detection,omitempty"` // Use http2 when communicating with this upstream // this field is evaluated `true` for upstreams // with a grpc service spec - UseHttp2 bool `protobuf:"varint,10,opt,name=use_http2,json=useHttp2,proto3" json:"use_http2,omitempty"` + UseHttp2 bool `protobuf:"varint,7,opt,name=use_http2,json=useHttp2,proto3" json:"use_http2,omitempty"` // Note to developers: new Upstream Plugins must be added to this oneof field // to be usable by Gloo. // @@ -641,25 +645,25 @@ type isUpstreamSpec_UpstreamType interface { } type UpstreamSpec_Kube struct { - Kube *kubernetes.UpstreamSpec `protobuf:"bytes,1,opt,name=kube,proto3,oneof"` + Kube *kubernetes.UpstreamSpec `protobuf:"bytes,8,opt,name=kube,proto3,oneof"` } type UpstreamSpec_Static struct { - Static *static.UpstreamSpec `protobuf:"bytes,4,opt,name=static,proto3,oneof"` + Static *static.UpstreamSpec `protobuf:"bytes,9,opt,name=static,proto3,oneof"` } type UpstreamSpec_Pipe struct { - Pipe *pipe.UpstreamSpec `protobuf:"bytes,12,opt,name=pipe,proto3,oneof"` + Pipe *pipe.UpstreamSpec `protobuf:"bytes,10,opt,name=pipe,proto3,oneof"` } type UpstreamSpec_Aws struct { - Aws *aws.UpstreamSpec `protobuf:"bytes,2,opt,name=aws,proto3,oneof"` + Aws *aws.UpstreamSpec `protobuf:"bytes,11,opt,name=aws,proto3,oneof"` } type UpstreamSpec_Azure struct { - Azure *azure.UpstreamSpec `protobuf:"bytes,3,opt,name=azure,proto3,oneof"` + Azure *azure.UpstreamSpec `protobuf:"bytes,12,opt,name=azure,proto3,oneof"` } type UpstreamSpec_Consul struct { - Consul *consul.UpstreamSpec `protobuf:"bytes,5,opt,name=consul,proto3,oneof"` + Consul *consul.UpstreamSpec `protobuf:"bytes,13,opt,name=consul,proto3,oneof"` } type UpstreamSpec_AwsEc2 struct { - AwsEc2 *ec2.UpstreamSpec `protobuf:"bytes,11,opt,name=aws_ec2,json=awsEc2,proto3,oneof"` + AwsEc2 *ec2.UpstreamSpec `protobuf:"bytes,14,opt,name=aws_ec2,json=awsEc2,proto3,oneof"` } func (*UpstreamSpec_Kube) isUpstreamSpec_UpstreamType() {} @@ -705,6 +709,20 @@ func (m *UpstreamSpec) GetConnectionConfig() *ConnectionConfig { return nil } +func (m *UpstreamSpec) GetHealthChecks() []*core.HealthCheck { + if m != nil { + return m.HealthChecks + } + return nil +} + +func (m *UpstreamSpec) GetOutlierDetection() *cluster.OutlierDetection { + if m != nil { + return m.OutlierDetection + } + return nil +} + func (m *UpstreamSpec) GetUseHttp2() bool { if m != nil { return m.UseHttp2 @@ -790,96 +808,103 @@ func init() { } var fileDescriptor_ae47d2df5fad2a45 = []byte{ - // 1423 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdd, 0x6e, 0x1c, 0xb5, - 0x17, 0xff, 0x6f, 0x9a, 0xee, 0x26, 0x6e, 0xfa, 0x4f, 0x70, 0x2b, 0xb4, 0x04, 0x68, 0xcb, 0x4a, - 0xd0, 0x0f, 0x54, 0x6f, 0x59, 0xa4, 0x96, 0x56, 0x2a, 0xb4, 0xbb, 0x6d, 0x89, 0x68, 0x0a, 0xd1, - 0x24, 0xd0, 0xc2, 0xcd, 0xc8, 0xeb, 0xf5, 0xce, 0xba, 0x9d, 0x8c, 0x47, 0xb6, 0x27, 0x69, 0xb8, - 0xe2, 0x25, 0x10, 0x3c, 0x02, 0x37, 0x5c, 0xf0, 0x04, 0xdc, 0xf0, 0x12, 0x5c, 0x21, 0xf1, 0x24, - 0xc8, 0xf6, 0x99, 0xd9, 0x8f, 0x4c, 0xaa, 0xfd, 0xc8, 0xc5, 0xce, 0x78, 0xc6, 0xe7, 0xfc, 0xf6, - 0xf8, 0xf8, 0x9c, 0x9f, 0xcf, 0x19, 0x74, 0x2f, 0x12, 0x66, 0x90, 0x75, 0x09, 0x93, 0xfb, 0x4d, - 0x2d, 0x63, 0x79, 0x53, 0xc8, 0x66, 0x14, 0x4b, 0xd9, 0x4c, 0x95, 0x7c, 0xc9, 0x99, 0xd1, 0xfe, - 0x89, 0xa6, 0xa2, 0x79, 0xf0, 0x49, 0x33, 0x8d, 0xb3, 0x48, 0x24, 0x9a, 0xa4, 0x4a, 0x1a, 0x89, - 0xd7, 0xec, 0x14, 0xb1, 0x5a, 0x44, 0xc8, 0xcd, 0xf7, 0x22, 0x29, 0xa3, 0x98, 0x37, 0xdd, 0x5c, - 0x37, 0xeb, 0x37, 0xb5, 0x51, 0x19, 0x33, 0x5e, 0x76, 0xf3, 0x62, 0x24, 0x23, 0xe9, 0x86, 0x4d, - 0x3b, 0x82, 0xb7, 0xb7, 0x67, 0xfa, 0x77, 0xad, 0x63, 0xd0, 0xbb, 0x3f, 0x93, 0x1e, 0x7f, 0x6d, - 0x78, 0xa2, 0x85, 0xcc, 0x0d, 0xdf, 0x6c, 0xcf, 0xa4, 0xce, 0x84, 0x62, 0x99, 0x30, 0x61, 0x57, - 0x71, 0xfa, 0x8a, 0x2b, 0xc0, 0x78, 0x30, 0x13, 0x46, 0x2c, 0x69, 0x2f, 0xec, 0xd2, 0x98, 0x26, - 0xac, 0x40, 0x98, 0x6d, 0x11, 0x4c, 0x26, 0x09, 0x67, 0x46, 0xc8, 0x64, 0xae, 0x45, 0xc0, 0xce, - 0x35, 0xe9, 0xa1, 0xfb, 0x01, 0xc6, 0x57, 0x73, 0x63, 0x70, 0xd6, 0xb2, 0xf7, 0x90, 0xb3, 0x16, - 0x60, 0x3d, 0x9a, 0x0b, 0x8b, 0x49, 0xe5, 0x2f, 0x0b, 0xa1, 0x28, 0xae, 0x8d, 0xbb, 0x2c, 0x84, - 0x12, 0xa9, 0x94, 0xb9, 0xcb, 0x62, 0x1e, 0x8e, 0xdd, 0x0f, 0x30, 0xb6, 0xe7, 0xb6, 0x24, 0x3c, - 0xe4, 0xdd, 0x62, 0xb0, 0x90, 0x45, 0x03, 0xb6, 0x6f, 0x7f, 0x80, 0xb1, 0x35, 0x17, 0x46, 0xdc, - 0x1d, 0x50, 0x3d, 0x80, 0x1b, 0x20, 0x7d, 0x3d, 0x17, 0x92, 0x1e, 0xd0, 0x9e, 0x3c, 0x14, 0x49, - 0x34, 0x1c, 0x2d, 0xb4, 0x3a, 0xc3, 0x52, 0xfb, 0x5b, 0x28, 0xa2, 0x8d, 0xa2, 0xcc, 0x5a, 0x04, - 0x77, 0xc0, 0x7a, 0x32, 0xdf, 0xfe, 0xff, 0x98, 0x29, 0xee, 0xaf, 0x0b, 0x79, 0x9c, 0xc9, 0x44, - 0x67, 0x31, 0xdc, 0x00, 0x69, 0x67, 0x2e, 0xa4, 0x57, 0x59, 0x97, 0xab, 0x84, 0x1b, 0x3e, 0x3a, - 0x5c, 0xc8, 0x5f, 0x8a, 0x1b, 0x25, 0x78, 0x71, 0x5f, 0x68, 0x9d, 0xda, 0x50, 0x23, 0x18, 0xdc, - 0x16, 0xca, 0xdf, 0x54, 0xa4, 0xdc, 0x5d, 0x16, 0xda, 0x3f, 0x6b, 0x08, 0x5c, 0x01, 0xe7, 0xc5, - 0xbc, 0x31, 0x95, 0xe8, 0xbe, 0x54, 0xfb, 0xd4, 0x92, 0x76, 0x33, 0x55, 0xbc, 0x2f, 0x5e, 0x87, - 0x8a, 0x1f, 0x2a, 0x61, 0xf8, 0x69, 0x22, 0x8f, 0x3f, 0x02, 0xf2, 0x37, 0x73, 0x21, 0xf7, 0x69, - 0x16, 0x1b, 0x91, 0xbc, 0xf4, 0x07, 0x8d, 0x7f, 0x5c, 0x28, 0x50, 0x06, 0x9c, 0xf6, 0xb8, 0x2a, - 0xee, 0x80, 0x15, 0xcc, 0x87, 0x25, 0xb5, 0x01, 0xf7, 0x8d, 0x8e, 0x01, 0xf3, 0xd2, 0x64, 0xf9, - 0xd1, 0xcb, 0xd4, 0x88, 0x43, 0x1a, 0x7f, 0x54, 0xd0, 0xfa, 0xb6, 0xd0, 0x86, 0x27, 0x5c, 0xed, - 0x78, 0x44, 0xdc, 0x43, 0x6f, 0x53, 0xc6, 0xb8, 0xd6, 0x61, 0x2c, 0xa3, 0x48, 0x24, 0x51, 0xa8, - 0xb9, 0x3a, 0x10, 0x8c, 0xd7, 0x2b, 0x57, 0x2a, 0xd7, 0xce, 0xb5, 0x08, 0x71, 0x44, 0x0e, 0x45, - 0xcf, 0x68, 0xb5, 0x43, 0x1e, 0x3a, 0xbd, 0x6d, 0xaf, 0xb6, 0xeb, 0xb5, 0x82, 0x8b, 0xb4, 0xe4, - 0x2d, 0xfe, 0x0c, 0xa1, 0x61, 0x05, 0x52, 0x5f, 0x72, 0xc8, 0xf5, 0x71, 0xb4, 0xc7, 0xc5, 0x7c, - 0x30, 0x22, 0xdb, 0xf8, 0x79, 0x09, 0x5d, 0xd8, 0x32, 0x26, 0x9d, 0xb4, 0xfb, 0x21, 0x5a, 0xc9, - 0x0f, 0x06, 0xb0, 0xf4, 0x23, 0x32, 0x3c, 0x29, 0xca, 0xcc, 0xfd, 0x52, 0xa5, 0xec, 0x39, 0xef, - 0x06, 0xb5, 0xc8, 0x0f, 0xf0, 0x4f, 0x15, 0x74, 0x65, 0x60, 0x4c, 0x1a, 0x0e, 0xeb, 0x8a, 0x70, - 0x9f, 0x26, 0x34, 0xe2, 0x2a, 0xd4, 0xdc, 0x18, 0x91, 0x44, 0xb9, 0xad, 0x77, 0x88, 0x3b, 0x3c, - 0xca, 0x60, 0xad, 0x71, 0x9d, 0x02, 0xe0, 0x99, 0xd7, 0xdf, 0x05, 0xf5, 0xe0, 0xfd, 0xc1, 0x9b, - 0xa6, 0x27, 0xfc, 0x72, 0x66, 0x06, 0xbf, 0x24, 0x08, 0xef, 0xb1, 0x63, 0x5e, 0x79, 0x81, 0xb0, - 0x61, 0x69, 0x98, 0x2a, 0xf9, 0xfa, 0x68, 0xb8, 0x06, 0x8f, 0x7b, 0x83, 0xb8, 0x23, 0xa2, 0x6c, - 0x0d, 0x7b, 0x2c, 0xdd, 0xb1, 0x2a, 0x85, 0xd9, 0x1b, 0x66, 0xe2, 0x4d, 0xe3, 0xaf, 0x33, 0x08, - 0x7f, 0x27, 0x94, 0xc9, 0x68, 0xbc, 0x25, 0xb5, 0xc9, 0xff, 0x70, 0x7c, 0x01, 0x95, 0xe9, 0x17, - 0x80, 0x3b, 0xa8, 0x06, 0xd4, 0x59, 0x3f, 0xeb, 0xd4, 0xae, 0x93, 0x82, 0x4a, 0xcb, 0x6c, 0x0c, - 0xb8, 0x51, 0x47, 0x3b, 0x32, 0x16, 0xec, 0x28, 0xc8, 0x35, 0xf1, 0x1d, 0x74, 0xd6, 0xb1, 0x54, - 0x1d, 0x39, 0x88, 0x0f, 0x08, 0x70, 0x56, 0x19, 0xc0, 0xae, 0x9d, 0x0a, 0xbc, 0x3c, 0xa6, 0xe8, - 0x82, 0xcf, 0x47, 0xbb, 0xe3, 0x22, 0xcd, 0x62, 0x97, 0x27, 0xb0, 0xdb, 0xb7, 0x48, 0x91, 0xab, - 0xa5, 0x3b, 0xee, 0x26, 0x9f, 0x8d, 0xe8, 0x05, 0x78, 0x70, 0xec, 0x1d, 0xbe, 0x8b, 0x96, 0x6d, - 0x51, 0x07, 0xde, 0xff, 0x90, 0xf8, 0x0a, 0xaf, 0x0c, 0xb0, 0x23, 0x95, 0x86, 0x95, 0x39, 0x15, - 0xfc, 0x02, 0xad, 0x8f, 0x33, 0x9a, 0xae, 0x2f, 0x43, 0x36, 0xf2, 0xe4, 0x40, 0x1e, 0x11, 0x9a, - 0x0a, 0x72, 0xd0, 0x22, 0x7d, 0x11, 0x1b, 0xae, 0x88, 0x8d, 0x31, 0x12, 0xc8, 0xcc, 0xf0, 0xbd, - 0x71, 0xad, 0x60, 0x12, 0xa6, 0xf1, 0x4b, 0x0d, 0xad, 0x39, 0xc9, 0x61, 0xc4, 0x1c, 0xfb, 0xab, - 0xca, 0xa9, 0xfc, 0x15, 0xfe, 0x02, 0x55, 0x1d, 0x79, 0xe6, 0x39, 0x74, 0x95, 0x00, 0x97, 0x96, - 0xee, 0xae, 0x85, 0x7c, 0xe2, 0xc4, 0x03, 0x50, 0xc3, 0xdf, 0xa3, 0xff, 0x8f, 0x9f, 0x18, 0xe0, - 0xca, 0x16, 0x99, 0xa4, 0xfb, 0x32, 0xc4, 0x1d, 0xa7, 0x1a, 0x78, 0xcd, 0xe0, 0x7c, 0x3a, 0xfa, - 0x88, 0xef, 0xa2, 0x9a, 0x11, 0xfb, 0x5c, 0x66, 0x06, 0x1c, 0xfb, 0x0e, 0xf1, 0xdc, 0x49, 0x72, - 0xee, 0x24, 0x8f, 0x80, 0x3b, 0xdb, 0xcb, 0xbf, 0xfe, 0x73, 0xb9, 0x12, 0xe4, 0xf2, 0xa7, 0x13, - 0xb7, 0xe3, 0x69, 0x53, 0x9d, 0x21, 0x6d, 0xb6, 0x51, 0x0d, 0x2a, 0xb4, 0x7a, 0x6d, 0xe8, 0x0d, - 0x5f, 0xb1, 0x9d, 0xe8, 0xd8, 0x3d, 0x2f, 0x51, 0xa4, 0x77, 0x0e, 0x81, 0xb7, 0xd1, 0x6a, 0x51, - 0x81, 0xd6, 0x57, 0x60, 0xdf, 0x47, 0x6a, 0xd2, 0x13, 0x11, 0x77, 0x73, 0x99, 0x60, 0x08, 0x70, - 0x52, 0x52, 0xad, 0x9e, 0x62, 0x52, 0xed, 0xa0, 0x35, 0x7b, 0xee, 0x15, 0x11, 0xe1, 0xf3, 0xfe, - 0x26, 0x19, 0x3b, 0x0c, 0x4b, 0xf1, 0xa5, 0x36, 0x79, 0x30, 0x9c, 0x1b, 0x0c, 0x1f, 0x8a, 0x34, - 0x3d, 0x37, 0x7b, 0x9a, 0x3e, 0x45, 0xb5, 0xb8, 0x1b, 0xda, 0x6e, 0xa0, 0xbe, 0x06, 0x7b, 0x91, - 0x37, 0x07, 0x27, 0x3a, 0xee, 0xa1, 0x3b, 0x07, 0xb6, 0xa8, 0x1e, 0x74, 0x64, 0xd2, 0x17, 0x51, - 0x50, 0x8d, 0xbb, 0xf6, 0xa9, 0xf1, 0xfb, 0x12, 0x5a, 0x7f, 0xc4, 0xb5, 0x11, 0x89, 0x5b, 0xe9, - 0x6e, 0xca, 0x19, 0xbe, 0x8f, 0xce, 0xd0, 0xc3, 0x3c, 0x21, 0xaf, 0x13, 0xd7, 0xb4, 0x96, 0x21, - 0x4f, 0xe8, 0x6d, 0xfd, 0x2f, 0xb0, 0x7a, 0xb8, 0x83, 0xce, 0xba, 0x1a, 0x1c, 0x12, 0xf0, 0x63, - 0x02, 0x15, 0xf9, 0x74, 0x10, 0x5e, 0x17, 0x3f, 0x40, 0xcb, 0xb6, 0xab, 0x2c, 0x0e, 0x11, 0xdf, - 0x62, 0x4e, 0x07, 0xe1, 0x34, 0x2d, 0x82, 0x3d, 0x72, 0x21, 0xd3, 0x6e, 0x10, 0xdf, 0x5e, 0x4e, - 0x89, 0x60, 0x85, 0xdb, 0x18, 0x6d, 0xf4, 0x86, 0x53, 0xa1, 0x39, 0x4a, 0x79, 0xe3, 0xef, 0x0a, - 0xda, 0x7c, 0xce, 0x45, 0x34, 0x30, 0xbc, 0x37, 0xa2, 0x97, 0xf3, 0xda, 0x09, 0xb1, 0x58, 0x39, - 0xc5, 0x58, 0x2c, 0xa1, 0xce, 0xa5, 0xd3, 0x61, 0xe9, 0x3f, 0xab, 0x68, 0xed, 0xdb, 0xd4, 0x46, - 0x34, 0xdd, 0x77, 0x81, 0xf0, 0x39, 0x42, 0x5a, 0xc7, 0xb6, 0x50, 0xe9, 0x8b, 0x08, 0xf8, 0xe2, - 0xf2, 0xb8, 0xd1, 0x85, 0xbc, 0x8e, 0x21, 0xb2, 0x56, 0x75, 0x3e, 0xc4, 0xcf, 0xd0, 0xc6, 0xc4, - 0x27, 0x1c, 0x0d, 0xf4, 0xd1, 0x98, 0x88, 0x71, 0x2f, 0xd5, 0xf6, 0x42, 0x00, 0xb4, 0xce, 0xc6, - 0xde, 0x6a, 0x1c, 0xa0, 0x8b, 0x63, 0x5f, 0x73, 0x72, 0xc3, 0x3c, 0x83, 0x5c, 0x19, 0x87, 0xdc, - 0x96, 0xb4, 0xd7, 0x06, 0x41, 0x00, 0xc4, 0xf1, 0xb1, 0x77, 0xf8, 0x29, 0x7a, 0x6b, 0xa4, 0x0e, - 0x03, 0x40, 0x4f, 0x1d, 0x97, 0x26, 0xf3, 0x30, 0x17, 0x03, 0xb8, 0x0d, 0x36, 0xf1, 0x06, 0xbf, - 0x8b, 0x56, 0x33, 0xcd, 0x43, 0xeb, 0xf2, 0x96, 0xe3, 0x88, 0x95, 0x60, 0x25, 0xd3, 0xdc, 0xd6, - 0x6a, 0x2d, 0xdc, 0x41, 0xcb, 0xb6, 0x07, 0x84, 0x58, 0xb8, 0x49, 0x46, 0x1b, 0xc2, 0xb2, 0x70, - 0x18, 0xdd, 0x09, 0x1b, 0x92, 0x56, 0x1e, 0x77, 0x50, 0xd5, 0xb7, 0x6b, 0x10, 0xd6, 0xd7, 0x49, - 0xde, 0xbd, 0x4d, 0x01, 0x01, 0xaa, 0xf8, 0x3e, 0x5a, 0xb6, 0xbd, 0x1a, 0xb0, 0xc7, 0x55, 0xe2, - 0x1b, 0xb7, 0x69, 0x6c, 0xb0, 0x92, 0xf8, 0x9e, 0xa7, 0x87, 0x25, 0x28, 0x7f, 0x4f, 0xa4, 0x87, - 0x09, 0x65, 0xc7, 0x0d, 0x0f, 0x72, 0x6e, 0xf0, 0x79, 0x7d, 0xed, 0x4d, 0xdc, 0x30, 0xa1, 0x0f, - 0xc4, 0xd0, 0x41, 0x55, 0xdf, 0x98, 0x17, 0xe7, 0x60, 0xde, 0xa7, 0x4f, 0xe3, 0x01, 0x2f, 0x8b, - 0x1f, 0xa3, 0x1a, 0x7c, 0x42, 0x03, 0x02, 0xbe, 0x41, 0x8a, 0x4f, 0x6a, 0xd3, 0xc0, 0xd0, 0x43, - 0xfd, 0x98, 0xb5, 0xda, 0xeb, 0xe8, 0x7c, 0x06, 0x33, 0x8e, 0x1d, 0xda, 0xb7, 0x7f, 0xfb, 0xf7, - 0x52, 0xe5, 0x87, 0x5b, 0xd3, 0x35, 0x59, 0xe9, 0xab, 0x08, 0x1a, 0xad, 0x6e, 0xd5, 0x9d, 0xff, - 0x9f, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x90, 0xb6, 0x2a, 0x14, 0x16, 0x00, 0x00, + // 1522 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x6e, 0xdc, 0xb6, + 0x16, 0xbe, 0x63, 0x3b, 0x1e, 0x9b, 0xb6, 0x63, 0x87, 0x09, 0x2e, 0xe6, 0xfa, 0xde, 0x9b, 0xa4, + 0x06, 0x9a, 0xbf, 0x22, 0x9c, 0x74, 0x0a, 0x24, 0x4d, 0x80, 0xb4, 0x89, 0xc7, 0x49, 0x8d, 0xc6, + 0x69, 0x0c, 0xd9, 0x6d, 0xd2, 0x6e, 0x04, 0x0d, 0x87, 0x23, 0x31, 0x96, 0x45, 0x81, 0xa4, 0xec, + 0xb8, 0xab, 0xbe, 0x44, 0xd1, 0x3e, 0x42, 0x37, 0x5d, 0xf4, 0x1d, 0xfa, 0x12, 0x59, 0x15, 0xe8, + 0x93, 0x14, 0x24, 0x8f, 0x34, 0x33, 0xb2, 0x1c, 0xcc, 0x8f, 0x17, 0x92, 0x28, 0xf2, 0x9c, 0x4f, + 0x87, 0x87, 0xe7, 0x57, 0xe8, 0x51, 0xc8, 0x75, 0x94, 0x75, 0x08, 0x15, 0x87, 0x4d, 0x25, 0x62, + 0x71, 0x97, 0x8b, 0x66, 0x18, 0x0b, 0xd1, 0x4c, 0xa5, 0x78, 0xcb, 0xa8, 0x56, 0xee, 0x2d, 0x48, + 0x79, 0xf3, 0xe8, 0xd3, 0x66, 0x1a, 0x67, 0x21, 0x4f, 0x14, 0x49, 0xa5, 0xd0, 0x02, 0x2f, 0x9b, + 0x25, 0x62, 0xb8, 0x08, 0x17, 0xeb, 0xff, 0x0b, 0x85, 0x08, 0x63, 0xd6, 0xb4, 0x6b, 0x9d, 0xac, + 0xd7, 0x54, 0x5a, 0x66, 0x54, 0x3b, 0xda, 0xf5, 0x2b, 0xa1, 0x08, 0x85, 0x1d, 0x36, 0xcd, 0x08, + 0x66, 0xef, 0x8f, 0xf5, 0x75, 0xa5, 0x62, 0xe0, 0x7b, 0x3c, 0x16, 0x1f, 0x7b, 0xa7, 0x59, 0xa2, + 0xb8, 0xc8, 0x05, 0x5f, 0xdf, 0x1c, 0x8b, 0x9d, 0x72, 0x49, 0x33, 0xae, 0xfd, 0x8e, 0x64, 0xc1, + 0x01, 0x93, 0x80, 0xf1, 0x64, 0x2c, 0x8c, 0x58, 0x04, 0x5d, 0xbf, 0x13, 0xc4, 0x41, 0x42, 0x0b, + 0x84, 0xf1, 0x36, 0x41, 0x45, 0x92, 0x30, 0xaa, 0xb9, 0x48, 0x26, 0xda, 0x04, 0x9c, 0x5c, 0x33, + 0x38, 0xb6, 0x17, 0x60, 0x7c, 0x3d, 0x31, 0x06, 0xa3, 0x2d, 0xf3, 0xf4, 0x19, 0x6d, 0x01, 0xd6, + 0xd6, 0x44, 0x58, 0x54, 0x48, 0x77, 0x9b, 0x0a, 0x45, 0x32, 0xa5, 0xed, 0x6d, 0x2a, 0x94, 0x50, + 0xa6, 0xd4, 0xde, 0xa6, 0xd3, 0x70, 0x6c, 0x2f, 0xc0, 0xd8, 0x99, 0x58, 0x12, 0xff, 0x98, 0x75, + 0x8a, 0xc1, 0x54, 0x12, 0x45, 0xf4, 0xd0, 0x5c, 0x80, 0xb1, 0x3d, 0x11, 0x46, 0xdc, 0x89, 0x02, + 0x15, 0xc1, 0x03, 0x90, 0xbe, 0x99, 0x08, 0x49, 0x45, 0x41, 0x57, 0x1c, 0xf3, 0x24, 0xec, 0x8f, + 0xa6, 0xda, 0x9d, 0xa6, 0xa9, 0xb9, 0xa6, 0xb2, 0x68, 0x2d, 0x03, 0x6a, 0x24, 0x82, 0x27, 0x60, + 0x3d, 0x9f, 0xec, 0xfc, 0x7f, 0xcc, 0x24, 0x73, 0xf7, 0xa9, 0x34, 0x4e, 0x45, 0xa2, 0xb2, 0x18, + 0x1e, 0x80, 0xb4, 0x3b, 0x11, 0xd2, 0x41, 0xd6, 0x61, 0x32, 0x61, 0x9a, 0x0d, 0x0e, 0xa7, 0xd2, + 0x97, 0x64, 0x5a, 0x72, 0x56, 0x3c, 0xa7, 0xda, 0xa7, 0xd2, 0x81, 0xe6, 0x14, 0x1e, 0x53, 0xf9, + 0x6f, 0xca, 0x53, 0x66, 0x6f, 0x53, 0x9d, 0x9f, 0x11, 0x04, 0xee, 0x80, 0xf3, 0x66, 0x52, 0x9b, + 0x4a, 0x54, 0x4f, 0xc8, 0xc3, 0xc0, 0x04, 0xed, 0x66, 0x2a, 0x59, 0x8f, 0xbf, 0xf3, 0x25, 0x3b, + 0x96, 0x5c, 0xb3, 0xf3, 0x44, 0x1e, 0x7e, 0x05, 0xe4, 0x57, 0x13, 0x21, 0xf7, 0x82, 0x2c, 0xd6, + 0x3c, 0x79, 0xeb, 0x12, 0x8d, 0x7b, 0x9d, 0xca, 0x50, 0x22, 0x16, 0x74, 0x99, 0x2c, 0x9e, 0x80, + 0xe5, 0x4d, 0x86, 0x25, 0x94, 0x06, 0xf5, 0x0d, 0x8e, 0x01, 0xd3, 0x1f, 0x1d, 0xd3, 0xd4, 0x03, + 0x32, 0x09, 0xe2, 0x26, 0x4b, 0x8e, 0xc4, 0x89, 0xfb, 0x4c, 0xab, 0x49, 0xe3, 0x4c, 0x69, 0x26, + 0x9b, 0x22, 0xd3, 0x31, 0x67, 0xd2, 0xef, 0x32, 0x3d, 0x94, 0x6f, 0x5f, 0x4f, 0xfd, 0x01, 0x21, + 0x99, 0x51, 0x44, 0xac, 0x23, 0x9f, 0x46, 0x8c, 0x1e, 0x00, 0xf0, 0xd5, 0x72, 0xe1, 0xd4, 0xcd, + 0xe4, 0xc0, 0x51, 0x6e, 0xfc, 0x51, 0x43, 0xab, 0x3b, 0x5c, 0x69, 0x96, 0x30, 0xb9, 0xeb, 0x74, + 0x81, 0xbb, 0xe8, 0xdf, 0x01, 0xa5, 0x4c, 0x29, 0x3f, 0x16, 0x61, 0xc8, 0x93, 0xd0, 0x57, 0x4c, + 0x1e, 0x71, 0xca, 0x1a, 0xb5, 0xeb, 0xb5, 0x5b, 0x4b, 0x2d, 0x42, 0x6c, 0x0a, 0x82, 0x72, 0x6d, + 0xb0, 0x4e, 0x23, 0x4f, 0x2d, 0xdf, 0x8e, 0x63, 0xdb, 0x73, 0x5c, 0xde, 0x95, 0xa0, 0x62, 0x16, + 0x7f, 0x8e, 0x50, 0xbf, 0x76, 0x6a, 0xcc, 0x58, 0xe4, 0xc6, 0x30, 0xda, 0xb3, 0x62, 0xdd, 0x1b, + 0xa0, 0xdd, 0xf8, 0x79, 0x06, 0x5d, 0xde, 0xd6, 0x3a, 0x2d, 0xcb, 0xfd, 0x14, 0x2d, 0xe4, 0x29, + 0x0d, 0x24, 0xbd, 0x41, 0xfa, 0x39, 0xae, 0x4a, 0xdc, 0xaf, 0x64, 0x4a, 0x5f, 0xb3, 0x8e, 0x57, + 0x0f, 0xdd, 0x00, 0xff, 0x54, 0x43, 0xd7, 0x23, 0xad, 0x53, 0xbf, 0x5f, 0x11, 0xf9, 0x87, 0x41, + 0x12, 0x84, 0x4c, 0xfa, 0x8a, 0x69, 0xcd, 0x93, 0x30, 0x97, 0xf5, 0x01, 0xb1, 0x69, 0xaf, 0x0a, + 0xd6, 0x08, 0xd7, 0x2e, 0x00, 0x5e, 0x3a, 0xfe, 0x3d, 0x60, 0xf7, 0xfe, 0x1f, 0x7d, 0x68, 0xb9, + 0xa4, 0x97, 0xd9, 0x31, 0xf4, 0x92, 0x20, 0xbc, 0x4f, 0x4f, 0x69, 0xe5, 0x0d, 0xc2, 0x9a, 0xa6, + 0x7e, 0x2a, 0xc5, 0xbb, 0x93, 0xfe, 0x1e, 0x1c, 0xee, 0x1d, 0x62, 0x93, 0x5b, 0xd5, 0x1e, 0xf6, + 0x69, 0xba, 0x6b, 0x58, 0x0a, 0xb1, 0xd7, 0x74, 0x69, 0x66, 0xe3, 0xcf, 0x59, 0x84, 0xbf, 0xe3, + 0x52, 0x67, 0x41, 0xbc, 0x2d, 0x94, 0xce, 0x3f, 0x38, 0xbc, 0x81, 0xda, 0xe8, 0x1b, 0xc0, 0x6d, + 0x54, 0x87, 0xa0, 0xdf, 0xb8, 0x60, 0xd9, 0x6e, 0x93, 0x22, 0x09, 0x54, 0xc9, 0xe8, 0x31, 0x2d, + 0x4f, 0x76, 0x45, 0xcc, 0xe9, 0x89, 0x97, 0x73, 0xe2, 0x07, 0xe8, 0x82, 0x8d, 0xaf, 0x0d, 0x64, + 0x21, 0x3e, 0x22, 0x10, 0x6d, 0xab, 0x00, 0xf6, 0xcc, 0x92, 0xe7, 0xe8, 0x71, 0x80, 0x2e, 0xbb, + 0x48, 0x62, 0x4e, 0x9c, 0xa7, 0x59, 0x6c, 0xfd, 0x04, 0x4e, 0xfb, 0x1e, 0x29, 0xa2, 0x4c, 0xe5, + 0x89, 0xdb, 0xc5, 0x97, 0x03, 0x7c, 0x1e, 0x8e, 0x4e, 0xcd, 0xe1, 0x87, 0x68, 0xce, 0x94, 0xa3, + 0xa0, 0xfd, 0x8f, 0x89, 0xab, 0x4d, 0xab, 0x00, 0xdb, 0x42, 0x2a, 0xd8, 0x99, 0x65, 0xc1, 0x6f, + 0xd0, 0xea, 0x70, 0x2c, 0x56, 0x8d, 0x39, 0xf0, 0x46, 0x1b, 0x08, 0x48, 0x90, 0x72, 0x72, 0xd4, + 0x22, 0x3d, 0x1e, 0x6b, 0x26, 0x89, 0xb1, 0x31, 0xe2, 0x89, 0x4c, 0xb3, 0xfd, 0x61, 0x2e, 0xaf, + 0x0c, 0xb3, 0xf1, 0x4b, 0x1d, 0x2d, 0x5b, 0xca, 0xbe, 0xc5, 0x9c, 0xfa, 0x54, 0xed, 0x5c, 0x3e, + 0x85, 0xbf, 0x44, 0xf3, 0x36, 0xec, 0xe7, 0x3e, 0x74, 0x93, 0x40, 0x16, 0xa8, 0x3c, 0x5d, 0x03, + 0xf9, 0xdc, 0x92, 0x7b, 0xc0, 0x86, 0xbf, 0x47, 0x17, 0x87, 0x73, 0x1d, 0xa8, 0xb2, 0x45, 0xca, + 0x89, 0xaa, 0x0a, 0x71, 0xd7, 0xb2, 0x7a, 0x8e, 0xd3, 0x5b, 0x49, 0x07, 0x5f, 0xf1, 0x43, 0x54, + 0xd7, 0xfc, 0x90, 0x89, 0x4c, 0x83, 0x62, 0xff, 0x43, 0x5c, 0xec, 0x24, 0x79, 0xec, 0x24, 0x5b, + 0x10, 0x3b, 0x37, 0xe7, 0x7e, 0xfd, 0xeb, 0x5a, 0xcd, 0xcb, 0xe9, 0xcf, 0xc7, 0x6e, 0x87, 0xdd, + 0x66, 0x7e, 0x0c, 0xb7, 0xd9, 0x41, 0x75, 0xa8, 0x2d, 0x1b, 0xf5, 0xbe, 0x36, 0x5c, 0xad, 0x79, + 0xa6, 0x62, 0xf7, 0x1d, 0x45, 0xe1, 0xde, 0x39, 0x04, 0xde, 0x41, 0x8b, 0x45, 0xed, 0xdc, 0x58, + 0x80, 0x73, 0x1f, 0xa8, 0xa6, 0xcf, 0x44, 0xdc, 0xcb, 0x69, 0xbc, 0x3e, 0xc0, 0x59, 0x4e, 0xb5, + 0x78, 0x8e, 0x4e, 0xb5, 0x8b, 0x96, 0x4d, 0xc6, 0x2e, 0x2c, 0xc2, 0xf9, 0xfd, 0x5d, 0x32, 0x94, + 0xc6, 0x2b, 0xf1, 0x85, 0xd2, 0xb9, 0x31, 0x2c, 0x45, 0xfd, 0x97, 0xc2, 0x4d, 0x97, 0xc6, 0x77, + 0xd3, 0x17, 0xa8, 0x1e, 0x77, 0x7c, 0xd3, 0xc7, 0x34, 0x96, 0xe1, 0x2c, 0xf2, 0xb6, 0xe6, 0x4c, + 0xc5, 0x3d, 0xb5, 0x79, 0x60, 0x3b, 0x50, 0x51, 0x5b, 0x24, 0x3d, 0x1e, 0x7a, 0xf3, 0x71, 0xc7, + 0xbc, 0x6d, 0xfc, 0x3e, 0x83, 0x56, 0xb7, 0x98, 0xd2, 0x3c, 0xb1, 0x3b, 0xdd, 0x4b, 0x19, 0xc5, + 0x8f, 0xd1, 0x6c, 0x70, 0x9c, 0x3b, 0xe4, 0x6d, 0x62, 0xdb, 0xed, 0x2a, 0xe4, 0x12, 0xdf, 0xf6, + 0xbf, 0x3c, 0xc3, 0x87, 0xdb, 0xe8, 0x82, 0xed, 0x1e, 0xc0, 0x01, 0x3f, 0x21, 0xd0, 0x4b, 0x8c, + 0x06, 0xe1, 0x78, 0xf1, 0x13, 0x34, 0x67, 0xfa, 0xe1, 0x22, 0x89, 0xb8, 0xe6, 0x78, 0x34, 0x08, + 0xcb, 0x69, 0x10, 0x4c, 0xca, 0x05, 0x4f, 0xbb, 0x43, 0x5c, 0x63, 0x3c, 0x22, 0x82, 0x21, 0xde, + 0xc4, 0x68, 0xad, 0xdb, 0x5f, 0xf2, 0xf5, 0x49, 0xca, 0x36, 0xde, 0xd7, 0xd0, 0xfa, 0x6b, 0xc6, + 0xc3, 0x48, 0xb3, 0xee, 0x00, 0x5f, 0x1e, 0xd7, 0xce, 0xb0, 0xc5, 0xda, 0x39, 0xda, 0x62, 0x45, + 0xe8, 0x9c, 0x39, 0x9f, 0x28, 0xfd, 0xbe, 0x8e, 0x96, 0xbf, 0x4d, 0x8d, 0x45, 0x07, 0x87, 0xd6, + 0x10, 0xbe, 0x40, 0x48, 0xa9, 0xd8, 0x14, 0x2a, 0x3d, 0x1e, 0xc2, 0x26, 0xae, 0x0d, 0x0b, 0x5d, + 0xd0, 0xab, 0x18, 0x2c, 0x6b, 0x51, 0xe5, 0x43, 0xfc, 0x12, 0xad, 0x95, 0x7e, 0x3e, 0xe5, 0xb2, + 0x6e, 0x94, 0x6c, 0xdc, 0x51, 0x6d, 0x3a, 0x22, 0x00, 0x5a, 0xa5, 0x43, 0xb3, 0x0a, 0x7b, 0xe8, + 0xca, 0xd0, 0x7f, 0xa8, 0x5c, 0x30, 0x67, 0x23, 0xd7, 0x87, 0x21, 0x77, 0x44, 0xd0, 0xdd, 0x04, + 0x42, 0x00, 0xc4, 0xf1, 0xa9, 0x39, 0xfc, 0x02, 0x5d, 0x1a, 0xa8, 0xc3, 0x00, 0xd0, 0x99, 0xcc, + 0xd5, 0xb2, 0x1f, 0xe6, 0x64, 0x00, 0xb7, 0x46, 0x4b, 0x33, 0xb8, 0x8d, 0x56, 0x06, 0xeb, 0x63, + 0x13, 0xaa, 0x67, 0x2d, 0xd0, 0xd0, 0xc1, 0x98, 0x3a, 0xda, 0x1c, 0x76, 0xac, 0xa3, 0xb6, 0x21, + 0xf3, 0x96, 0xa3, 0xfe, 0x8b, 0xc2, 0x7b, 0xe8, 0xd2, 0xa9, 0x12, 0x1e, 0x62, 0xf5, 0x8d, 0x12, + 0x90, 0xab, 0xf8, 0xc9, 0x2b, 0x47, 0xbe, 0x95, 0x53, 0x7b, 0x6b, 0xa2, 0x34, 0x83, 0xff, 0x8b, + 0x16, 0x33, 0xc5, 0x7c, 0x63, 0x0c, 0x2d, 0x1b, 0xc1, 0x17, 0xbc, 0x85, 0x4c, 0x31, 0x53, 0x45, + 0xb6, 0x70, 0x1b, 0xcd, 0x99, 0xbe, 0x1a, 0x22, 0xf1, 0x5d, 0x32, 0xd8, 0x64, 0x57, 0x19, 0xea, + 0xa0, 0x8d, 0x18, 0x67, 0x31, 0xf4, 0xb8, 0x8d, 0xe6, 0x5d, 0x0b, 0x0c, 0x81, 0xf7, 0x36, 0xc9, + 0x3b, 0xe2, 0x11, 0x20, 0x80, 0x15, 0x3f, 0x46, 0x73, 0xa6, 0xff, 0x85, 0xf8, 0x7a, 0x93, 0xb8, + 0x66, 0x78, 0x14, 0x19, 0x0c, 0x25, 0x7e, 0xe4, 0x02, 0xd7, 0x12, 0x28, 0xeb, 0xcc, 0xc0, 0x55, + 0x62, 0xb6, 0x51, 0xeb, 0x49, 0x1e, 0xb5, 0x5c, 0x4c, 0xbd, 0xf5, 0xa1, 0xa8, 0x55, 0xe2, 0x87, + 0x90, 0xd5, 0x46, 0xf3, 0xee, 0x67, 0x47, 0x63, 0x05, 0x34, 0x90, 0xff, 0xfb, 0x18, 0x45, 0x03, + 0x8e, 0x16, 0x3f, 0x43, 0x75, 0xf8, 0x2d, 0xd9, 0xb8, 0x08, 0x81, 0xab, 0xf8, 0x4d, 0x39, 0x0a, + 0x4c, 0x70, 0xac, 0x9e, 0xd1, 0xd6, 0xe6, 0x2a, 0x5a, 0xc9, 0x60, 0xc5, 0xc6, 0xad, 0xcd, 0xfb, + 0xbf, 0xfd, 0x7d, 0xb5, 0xf6, 0xc3, 0xbd, 0xd1, 0x7a, 0xc0, 0xf4, 0x20, 0x84, 0xe6, 0xb5, 0x33, + 0x6f, 0x2b, 0x93, 0xcf, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xd1, 0xc1, 0xeb, 0xba, 0x68, 0x17, + 0x00, 0x00, } func (this *ListenerPlugins) Equal(that interface{}) bool { @@ -1270,6 +1295,17 @@ func (this *UpstreamSpec) Equal(that interface{}) bool { if !this.ConnectionConfig.Equal(that1.ConnectionConfig) { return false } + if len(this.HealthChecks) != len(that1.HealthChecks) { + return false + } + for i := range this.HealthChecks { + if !this.HealthChecks[i].Equal(that1.HealthChecks[i]) { + return false + } + } + if !this.OutlierDetection.Equal(that1.OutlierDetection) { + return false + } if this.UseHttp2 != that1.UseHttp2 { return false } diff --git a/projects/gloo/pkg/plugins/aws/plugin.go b/projects/gloo/pkg/plugins/aws/plugin.go index 978edab5384..7ecdf1c2fe7 100644 --- a/projects/gloo/pkg/plugins/aws/plugin.go +++ b/projects/gloo/pkg/plugins/aws/plugin.go @@ -11,7 +11,8 @@ import ( envoyapi "github.com/envoyproxy/go-control-plane/envoy/api/v2" envoyauth "github.com/envoyproxy/go-control-plane/envoy/api/v2/auth" envoyroute "github.com/envoyproxy/go-control-plane/envoy/api/v2/route" - multierror "github.com/hashicorp/go-multierror" + "github.com/hashicorp/go-multierror" + . "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/aws" envoy_transform "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/plugins/transformation" "github.com/gogo/protobuf/proto" @@ -25,8 +26,6 @@ import ( "github.com/solo-io/solo-kit/pkg/errors" ) -//go:generate protoc -I$GOPATH/src/github.com/envoyproxy/protoc-gen-validate -I. -I$GOPATH/src/github.com/gogo/protobuf/protobuf --gogo_out=Mgoogle/protobuf/struct.proto=github.com/gogo/protobuf/types,Mgoogle/protobuf/duration.proto=github.com/gogo/protobuf/types:${GOPATH}/src/ filter.proto - const ( // filter info filterName = "io.solo.aws_lambda" diff --git a/projects/gloo/pkg/plugins/aws/plugin_test.go b/projects/gloo/pkg/plugins/aws/plugin_test.go index 96c624d506d..62bd041f58d 100644 --- a/projects/gloo/pkg/plugins/aws/plugin_test.go +++ b/projects/gloo/pkg/plugins/aws/plugin_test.go @@ -6,6 +6,7 @@ import ( "github.com/envoyproxy/go-control-plane/pkg/util" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + . "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/aws" v1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/plugins/aws" diff --git a/projects/gloo/pkg/translator/clusters.go b/projects/gloo/pkg/translator/clusters.go index 3c6f7bbc35b..003b6684c3f 100644 --- a/projects/gloo/pkg/translator/clusters.go +++ b/projects/gloo/pkg/translator/clusters.go @@ -1,15 +1,18 @@ package translator import ( + "fmt" + "time" + envoyapi "github.com/envoyproxy/go-control-plane/envoy/api/v2" envoycluster "github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster" envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" - - "github.com/pkg/errors" + "github.com/gogo/protobuf/types" v1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" "github.com/solo-io/gloo/projects/gloo/pkg/plugins" "github.com/solo-io/gloo/projects/gloo/pkg/xds" "github.com/solo-io/go-utils/contextutils" + "github.com/solo-io/go-utils/errors" "github.com/solo-io/solo-kit/pkg/api/v1/reporter" "go.opencensus.io/trace" ) @@ -35,7 +38,7 @@ func (t *translator) computeClusters(params plugins.Params, resourceErrs reporte func (t *translator) computeCluster(params plugins.Params, upstream *v1.Upstream, resourceErrs reporter.ResourceErrors) *envoyapi.Cluster { params.Ctx = contextutils.WithLogger(params.Ctx, upstream.Metadata.Name) - out := t.initializeCluster(upstream, params.Snapshot.Endpoints) + out := t.initializeCluster(upstream, params.Snapshot.Endpoints, resourceErrs) for _, plug := range t.plugins { upstreamPlugin, ok := plug.(plugins.UpstreamPlugin) @@ -54,12 +57,22 @@ func (t *translator) computeCluster(params plugins.Params, upstream *v1.Upstream return out } -func (t *translator) initializeCluster(upstream *v1.Upstream, endpoints []*v1.Endpoint) *envoyapi.Cluster { +func (t *translator) initializeCluster(upstream *v1.Upstream, endpoints []*v1.Endpoint, resourceErrs reporter.ResourceErrors) *envoyapi.Cluster { + hcConfig, err := createHealthCheckConfig(upstream) + if err != nil { + resourceErrs.AddError(upstream, err) + } + detectCfg, err := createOutlierDetectionConfig(upstream) + if err != nil { + resourceErrs.AddError(upstream, err) + } out := &envoyapi.Cluster{ - Name: UpstreamToClusterName(upstream.Metadata.Ref()), - Metadata: new(envoycore.Metadata), - CircuitBreakers: getCircuitBreakers(upstream.UpstreamSpec.CircuitBreakers, t.settings.CircuitBreakers), - LbSubsetConfig: createLbConfig(upstream), + Name: UpstreamToClusterName(upstream.Metadata.Ref()), + Metadata: new(envoycore.Metadata), + CircuitBreakers: getCircuitBreakers(upstream.UpstreamSpec.CircuitBreakers, t.settings.CircuitBreakers), + LbSubsetConfig: createLbConfig(upstream), + HealthChecks: hcConfig, + OutlierDetection: detectCfg, // this field can be overridden by plugins ConnectTimeout: ClusterConnectionTimeout, Http2ProtocolOptions: getHttp2ptions(upstream.UpstreamSpec), @@ -71,6 +84,55 @@ func (t *translator) initializeCluster(upstream *v1.Upstream, endpoints []*v1.En return out } +var ( + DefaultHealthCheckTimeout = time.Second * 5 + DefaultHealthCheckInterval = time.Millisecond * 100 + DefaultThreshold = &types.UInt32Value{ + Value: 5, + } + + NilFieldError = func(fieldName string) error { + return errors.Errorf("The field %s cannot be nil", fieldName) + } +) + +func createHealthCheckConfig(upstream *v1.Upstream) ([]*envoycore.HealthCheck, error) { + + if upstream.GetUpstreamSpec() == nil { + return nil, nil + } + result := make([]*envoycore.HealthCheck, 0, len(upstream.GetUpstreamSpec().GetHealthChecks())) + for i, hc := range upstream.GetUpstreamSpec().GetHealthChecks() { + // These values are required by envoy, but not explicityly + if hc.HealthyThreshold == nil { + return nil, NilFieldError(fmt.Sprintf("HealthCheck[%d].HealthyThreshold", i)) + } + if hc.UnhealthyThreshold == nil { + return nil, NilFieldError(fmt.Sprintf("HealthCheck[%d].UnhealthyThreshold", i)) + } + + if err := hc.Validate(); err != nil { + return nil, err + } + + result = append(result, hc) + } + return result, nil +} + +func createOutlierDetectionConfig(upstream *v1.Upstream) (*envoycluster.OutlierDetection, error) { + spec := upstream.GetUpstreamSpec() + if spec == nil { + return nil, nil + } + // This should be enough validation as nothing implicitly needs to be set + if err := spec.GetOutlierDetection().Validate(); err != nil { + return nil, err + } + + return spec.GetOutlierDetection(), nil +} + func createLbConfig(upstream *v1.Upstream) *envoyapi.Cluster_LbSubsetConfig { specGetter, ok := upstream.UpstreamSpec.UpstreamType.(v1.SubsetSpecGetter) if !ok { diff --git a/projects/gloo/pkg/translator/translator_test.go b/projects/gloo/pkg/translator/translator_test.go index fcf9538e18f..c8fe4493dd1 100644 --- a/projects/gloo/pkg/translator/translator_test.go +++ b/projects/gloo/pkg/translator/translator_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" envoyrouteapi "github.com/envoyproxy/go-control-plane/envoy/api/v2/route" envoytcp "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2" "github.com/gogo/protobuf/proto" @@ -52,6 +53,7 @@ var _ = Describe("Translator", func() { settings *v1.Settings translator Translator upstream *v1.Upstream + upName core.Metadata proxy *v1.Proxy params plugins.Params registeredPlugins []plugins.Plugin @@ -82,7 +84,7 @@ var _ = Describe("Translator", func() { } registeredPlugins = registry.Plugins(opts) - upName := core.Metadata{ + upName = core.Metadata{ Name: "test", Namespace: "gloo-system", } @@ -184,6 +186,12 @@ var _ = Describe("Translator", func() { } }) + translateWithError := func() { + _, errs, err := translator.Translate(params, proxy) + Expect(err).NotTo(HaveOccurred()) + Expect(errs.Validate()).To(HaveOccurred()) + } + translate := func() { snap, errs, err := translator.Translate(params, proxy) @@ -333,6 +341,106 @@ var _ = Describe("Translator", func() { }) + Context("Health check config", func() { + It("will error if required field is nil", func() { + upstream.UpstreamSpec.HealthChecks = []*envoycore.HealthCheck{ + { + // Timeout: &defaultTimeout, + Interval: &DefaultHealthCheckInterval, + }, + } + translateWithError() + }) + + It("will error if no health checker is supplied", func() { + upstream.UpstreamSpec.HealthChecks = []*envoycore.HealthCheck{ + { + Timeout: &DefaultHealthCheckTimeout, + Interval: &DefaultHealthCheckInterval, + HealthyThreshold: DefaultThreshold, + UnhealthyThreshold: DefaultThreshold, + }, + } + translateWithError() + }) + + It("can translate the http health check", func() { + expectedResult := []*envoycore.HealthCheck{ + { + Timeout: &DefaultHealthCheckTimeout, + Interval: &DefaultHealthCheckInterval, + HealthyThreshold: DefaultThreshold, + UnhealthyThreshold: DefaultThreshold, + HealthChecker: &envoycore.HealthCheck_HttpHealthCheck_{ + HttpHealthCheck: &envoycore.HealthCheck_HttpHealthCheck{ + Host: "host", + Path: "path", + ServiceName: "svc", + UseHttp2: true, + }, + }, + }, + } + upstream.UpstreamSpec.HealthChecks = expectedResult + translate() + Expect(cluster.HealthChecks).To(BeEquivalentTo(expectedResult)) + }) + + It("can translate the grpc health check", func() { + expectedResult := []*envoycore.HealthCheck{ + { + Timeout: &DefaultHealthCheckTimeout, + Interval: &DefaultHealthCheckInterval, + HealthyThreshold: DefaultThreshold, + UnhealthyThreshold: DefaultThreshold, + HealthChecker: &envoycore.HealthCheck_GrpcHealthCheck_{ + GrpcHealthCheck: &envoycore.HealthCheck_GrpcHealthCheck{ + ServiceName: "svc", + Authority: "authority", + }, + }, + }, + } + upstream.UpstreamSpec.HealthChecks = expectedResult + translate() + Expect(cluster.HealthChecks).To(BeEquivalentTo(expectedResult)) + }) + + It("can properly translate outlier detection config", func() { + dur := &types.Duration{Seconds: 1} + expectedResult := &envoycluster.OutlierDetection{ + Consecutive_5Xx: DefaultThreshold, + Interval: dur, + BaseEjectionTime: dur, + MaxEjectionPercent: DefaultThreshold, + EnforcingConsecutive_5Xx: DefaultThreshold, + EnforcingSuccessRate: DefaultThreshold, + SuccessRateMinimumHosts: DefaultThreshold, + SuccessRateRequestVolume: DefaultThreshold, + SuccessRateStdevFactor: nil, + ConsecutiveGatewayFailure: DefaultThreshold, + EnforcingConsecutiveGatewayFailure: nil, + SplitExternalLocalOriginErrors: true, + ConsecutiveLocalOriginFailure: nil, + EnforcingConsecutiveLocalOriginFailure: nil, + EnforcingLocalOriginSuccessRate: nil, + } + upstream.UpstreamSpec.OutlierDetection = expectedResult + translate() + Expect(cluster.OutlierDetection).To(BeEquivalentTo(expectedResult)) + }) + + It("can properly validate outlier detection config", func() { + dur := &types.Duration{Seconds: 0} + expectedResult := &envoycluster.OutlierDetection{ + Interval: dur, + } + upstream.UpstreamSpec.OutlierDetection = expectedResult + translateWithError() + }) + + }) + Context("circuit breakers", func() { It("should NOT translate circuit breakers on upstream", func() { diff --git a/test/e2e/grpc_plugin_test.go b/test/e2e/grpc_plugin_test.go index 79c64b70bd9..e707cb76c80 100644 --- a/test/e2e/grpc_plugin_test.go +++ b/test/e2e/grpc_plugin_test.go @@ -7,11 +7,11 @@ import ( "io/ioutil" "net/http" - types "github.com/gogo/protobuf/types" + "github.com/gogo/protobuf/types" "github.com/solo-io/gloo/pkg/utils" gatewayv1 "github.com/solo-io/gloo/projects/gateway/pkg/api/v1" - grpc "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/plugins/grpc" - transformation "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/plugins/transformation" + "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/plugins/grpc" + "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/plugins/transformation" "github.com/solo-io/gloo/test/services" "github.com/solo-io/gloo/test/v1helpers" glootest "github.com/solo-io/gloo/test/v1helpers/test_grpc_service/glootest/protos" @@ -60,7 +60,7 @@ var _ = Describe("GRPC Plugin", func() { err = envoyInstance.RunWithRole(writeNamespace+"~gateway-proxy-v2", testClients.GlooPort) Expect(err).NotTo(HaveOccurred()) - tu = v1helpers.NewTestGRPCUpstream(ctx, envoyInstance.LocalAddr()) + tu = v1helpers.NewTestGRPCUpstream(ctx, envoyInstance.LocalAddr(), 1) _, err = testClients.UpstreamClient.Write(tu.Upstream, clients.WriteOpts{}) Expect(err).NotTo(HaveOccurred()) }) @@ -72,58 +72,11 @@ var _ = Describe("GRPC Plugin", func() { cancel() }) - getGrpcVs := func() *gatewayv1.VirtualService { - return &gatewayv1.VirtualService{ - Metadata: core.Metadata{ - Name: "default", - Namespace: writeNamespace, - }, - VirtualHost: &gatewayv1.VirtualHost{ - Routes: []*gatewayv1.Route{ - { - Matcher: &gloov1.Matcher{ - PathSpecifier: &gloov1.Matcher_Prefix{ - Prefix: "/test", - }, - }, - Action: &gatewayv1.Route_RouteAction{ - RouteAction: &gloov1.RouteAction{ - Destination: &gloov1.RouteAction_Single{ - Single: &gloov1.Destination{ - DestinationType: &gloov1.Destination_Upstream{ - Upstream: utils.ResourceRefPtr(tu.Upstream.Metadata.Ref()), - }, - DestinationSpec: &gloov1.DestinationSpec{ - DestinationType: &gloov1.DestinationSpec_Grpc{ - Grpc: &grpc.DestinationSpec{ - Package: "glootest", - Function: "TestMethod", - Service: "TestService", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - } - } - - It("Routes to GRPC Functions", func() { - - vs := getGrpcVs() - _, err := testClients.VirtualServiceClient.Write(vs, clients.WriteOpts{}) - Expect(err).NotTo(HaveOccurred()) - - body := []byte(`{"str": "foo"}`) - - testRequest := func() (string, error) { + basicReq := func(b []byte) func() (string, error) { + return func() (string, error) { // send a request with a body var buf bytes.Buffer - buf.Write(body) + buf.Write(b) res, err := http.Post(fmt.Sprintf("http://%s:%d/test", "localhost", defaults.HttpPort), "application/json", &buf) if err != nil { return "", err @@ -132,6 +85,17 @@ var _ = Describe("GRPC Plugin", func() { body, err := ioutil.ReadAll(res.Body) return string(body), err } + } + + It("Routes to GRPC Functions", func() { + + vs := getGrpcVs(writeNamespace, tu.Upstream.Metadata.Ref()) + _, err := testClients.VirtualServiceClient.Write(vs, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + + body := []byte(`{"str": "foo"}`) + + testRequest := basicReq(body) Eventually(testRequest, 30, 1).Should(Equal(`{"str":"foo"}`)) @@ -142,7 +106,7 @@ var _ = Describe("GRPC Plugin", func() { It("Routes to GRPC Functions with parameters", func() { - vs := getGrpcVs() + vs := getGrpcVs(writeNamespace, tu.Upstream.Metadata.Ref()) grpc := vs.VirtualHost.Routes[0].GetRouteAction().GetSingle().GetDestinationSpec().GetGrpc() grpc.Parameters = &transformation.Parameters{ Path: &types.StringValue{Value: "/test/{str}"}, @@ -166,5 +130,44 @@ var _ = Describe("GRPC Plugin", func() { "GRPCRequest": PointTo(Equal(glootest.TestRequest{Str: "foo"})), })))) }) - }) + +func getGrpcVs(writeNamespace string, usRef core.ResourceRef) *gatewayv1.VirtualService { + return &gatewayv1.VirtualService{ + Metadata: core.Metadata{ + Name: "default", + Namespace: writeNamespace, + }, + VirtualHost: &gatewayv1.VirtualHost{ + Routes: []*gatewayv1.Route{ + { + Matcher: &gloov1.Matcher{ + PathSpecifier: &gloov1.Matcher_Prefix{ + Prefix: "/test", + }, + }, + Action: &gatewayv1.Route_RouteAction{ + RouteAction: &gloov1.RouteAction{ + Destination: &gloov1.RouteAction_Single{ + Single: &gloov1.Destination{ + DestinationType: &gloov1.Destination_Upstream{ + Upstream: utils.ResourceRefPtr(usRef), + }, + DestinationSpec: &gloov1.DestinationSpec{ + DestinationType: &gloov1.DestinationSpec_Grpc{ + Grpc: &grpc.DestinationSpec{ + Package: "glootest", + Function: "TestMethod", + Service: "TestService", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + } +} diff --git a/test/e2e/health_checks_test.go b/test/e2e/health_checks_test.go new file mode 100644 index 00000000000..9b2e254b9cb --- /dev/null +++ b/test/e2e/health_checks_test.go @@ -0,0 +1,251 @@ +package e2e_test + +import ( + "bytes" + "context" + "fmt" + "io/ioutil" + "net/http" + "time" + + envoycluster "github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster" + envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + "github.com/gogo/protobuf/types" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/onsi/gomega/gstruct" + "github.com/solo-io/gloo/projects/gloo/pkg/defaults" + "github.com/solo-io/gloo/projects/gloo/pkg/translator" + "github.com/solo-io/gloo/test/services" + "github.com/solo-io/gloo/test/v1helpers" + glootest "github.com/solo-io/gloo/test/v1helpers/test_grpc_service/glootest/protos" + "github.com/solo-io/solo-kit/pkg/api/v1/clients" +) + +var _ = Describe("Health Checks", func() { + var ( + ctx context.Context + cancel context.CancelFunc + testClients services.TestClients + envoyInstance *services.EnvoyInstance + tu *v1helpers.TestUpstream + writeNamespace string + ) + + BeforeEach(func() { + ctx, cancel = context.WithCancel(context.Background()) + defaults.HttpPort = services.NextBindPort() + defaults.HttpsPort = services.NextBindPort() + + var err error + envoyInstance, err = envoyFactory.NewEnvoyInstance() + Expect(err).NotTo(HaveOccurred()) + + writeNamespace = defaults.GlooSystem + ro := &services.RunOptions{ + NsToWrite: writeNamespace, + NsToWatch: []string{"default", writeNamespace}, + WhatToRun: services.What{ + DisableGateway: false, + DisableUds: true, + // test relies on FDS to discover the grpc spec via reflection + DisableFds: false, + }, + } + testClients = services.RunGlooGatewayUdsFds(ctx, ro) + err = envoyInstance.RunWithRole(writeNamespace+"~gateway-proxy-v2", testClients.GlooPort) + Expect(err).NotTo(HaveOccurred()) + }) + + AfterEach(func() { + if envoyInstance != nil { + _ = envoyInstance.Clean() + } + cancel() + }) + + basicReq := func(b []byte) func() (string, error) { + return func() (string, error) { + // send a request with a body + var buf bytes.Buffer + buf.Write(b) + res, err := http.Post(fmt.Sprintf("http://%s:%d/test", "localhost", defaults.HttpPort), "application/json", &buf) + if err != nil { + return "", err + } + defer res.Body.Close() + body, err := ioutil.ReadAll(res.Body) + return string(body), err + } + } + + Context("regression for config", func() { + + BeforeEach(func() { + + tu = v1helpers.NewTestGRPCUpstream(ctx, envoyInstance.LocalAddr(), 1) + _, err := testClients.UpstreamClient.Write(tu.Upstream, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + + }) + + tests := []struct { + Name string + Check *envoycore.HealthCheck + }{ + { + Name: "http", + Check: &envoycore.HealthCheck{ + HealthChecker: &envoycore.HealthCheck_HttpHealthCheck_{ + HttpHealthCheck: &envoycore.HealthCheck_HttpHealthCheck{ + Path: "xyz", + }, + }, + }, + }, + { + Name: "tcp", + Check: &envoycore.HealthCheck{ + HealthChecker: &envoycore.HealthCheck_TcpHealthCheck_{ + TcpHealthCheck: &envoycore.HealthCheck_TcpHealthCheck{ + Send: &envoycore.HealthCheck_Payload{ + Payload: &envoycore.HealthCheck_Payload_Text{ + Text: "AAAA", + }, + }, + Receive: []*envoycore.HealthCheck_Payload{ + { + Payload: &envoycore.HealthCheck_Payload_Text{ + Text: "AAAA", + }, + }, + }, + }, + }, + }, + }, + } + + for _, v := range tests { + v := v + It(v.Name, func() { + us, err := testClients.UpstreamClient.Read(tu.Upstream.Metadata.Namespace, tu.Upstream.Metadata.Name, clients.ReadOpts{}) + Expect(err).NotTo(HaveOccurred()) + v.Check.Timeout = &translator.DefaultHealthCheckTimeout + v.Check.Interval = &translator.DefaultHealthCheckInterval + v.Check.HealthyThreshold = translator.DefaultThreshold + v.Check.UnhealthyThreshold = translator.DefaultThreshold + us.GetUpstreamSpec().HealthChecks = []*envoycore.HealthCheck{v.Check} + + _, err = testClients.UpstreamClient.Write(us, clients.WriteOpts{ + OverwriteExisting: true, + }) + Expect(err).NotTo(HaveOccurred()) + + vs := getGrpcVs(writeNamespace, tu.Upstream.Metadata.Ref()) + _, err = testClients.VirtualServiceClient.Write(vs, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + + body := []byte(`{"str": "foo"}`) + + testRequest := basicReq(body) + + Eventually(testRequest, 30, 1).Should(Equal(`{"str":"foo"}`)) + + Eventually(tu.C).Should(Receive(PointTo(MatchFields(IgnoreExtras, Fields{ + "GRPCRequest": PointTo(Equal(glootest.TestRequest{Str: "foo"})), + })))) + }) + } + + It("outlier detection", func() { + us, err := testClients.UpstreamClient.Read(tu.Upstream.Metadata.Namespace, tu.Upstream.Metadata.Name, clients.ReadOpts{}) + Expect(err).NotTo(HaveOccurred()) + us.GetUpstreamSpec().OutlierDetection = &envoycluster.OutlierDetection{ + Interval: &types.Duration{Seconds: 1}, + } + + _, err = testClients.UpstreamClient.Write(us, clients.WriteOpts{ + OverwriteExisting: true, + }) + Expect(err).NotTo(HaveOccurred()) + + vs := getGrpcVs(writeNamespace, tu.Upstream.Metadata.Ref()) + _, err = testClients.VirtualServiceClient.Write(vs, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + + body := []byte(`{"str": "foo"}`) + + testRequest := basicReq(body) + + Eventually(testRequest, 30, 1).Should(Equal(`{"str":"foo"}`)) + + Eventually(tu.C).Should(Receive(PointTo(MatchFields(IgnoreExtras, Fields{ + "GRPCRequest": PointTo(Equal(glootest.TestRequest{Str: "foo"})), + })))) + }) + }) + + Context("e2e + GRPC", func() { + + BeforeEach(func() { + tu = v1helpers.NewTestGRPCUpstream(ctx, envoyInstance.LocalAddr(), 5) + _, err := testClients.UpstreamClient.Write(tu.Upstream, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + + Eventually(func() error { return envoyInstance.SetPanicThreshold() }, time.Second*5, time.Second/4).Should(BeNil()) + + tu = v1helpers.NewTestGRPCUpstream(ctx, envoyInstance.LocalAddr(), 5) + _, err = testClients.UpstreamClient.Write(tu.Upstream, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + + us, err := testClients.UpstreamClient.Read(tu.Upstream.Metadata.Namespace, tu.Upstream.Metadata.Name, clients.ReadOpts{}) + Expect(err).NotTo(HaveOccurred()) + + us.GetUpstreamSpec().HealthChecks = []*envoycore.HealthCheck{ + { + Timeout: &translator.DefaultHealthCheckTimeout, + Interval: &translator.DefaultHealthCheckInterval, + UnhealthyThreshold: translator.DefaultThreshold, + HealthyThreshold: translator.DefaultThreshold, + HealthChecker: &envoycore.HealthCheck_GrpcHealthCheck_{ + GrpcHealthCheck: &envoycore.HealthCheck_GrpcHealthCheck{ + ServiceName: "TestService", + }, + }, + }, + } + + _, err = testClients.UpstreamClient.Write(us, clients.WriteOpts{ + OverwriteExisting: true, + }) + Expect(err).NotTo(HaveOccurred()) + + vs := getGrpcVs(writeNamespace, tu.Upstream.Metadata.Ref()) + _, err = testClients.VirtualServiceClient.Write(vs, clients.WriteOpts{}) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Fail all but one GRPC health check", func() { + liveService := tu.FailGrpcHealthCheck() + body := []byte(`{"str": "foo"}`) + testRequest := basicReq(body) + + numRequests := 5 + + for i := 0; i < numRequests; i++ { + Eventually(testRequest, 30, 1).Should(Equal(`{"str":"foo"}`)) + } + + for i := 0; i < numRequests; i++ { + select { + case v := <-tu.C: + Expect(v.Port).To(Equal(liveService.Port)) + case <-time.After(5 * time.Second): + Fail("channel did not receive proper response in time") + } + } + }) + }) + +}) diff --git a/test/services/envoy.go b/test/services/envoy.go index cc6004eee9e..b45245463fd 100644 --- a/test/services/envoy.go +++ b/test/services/envoy.go @@ -297,6 +297,11 @@ func (ei *EnvoyInstance) LocalAddr() string { return ei.GlooAddr } +func (ei *EnvoyInstance) SetPanicThreshold() error { + _, err := http.Post(fmt.Sprintf("http://localhost:%d/runtime_modify?upstream.healthy_panic_threshold=%d", ei.AdminPort, 0), "", nil) + return err +} + func (ei *EnvoyInstance) Clean() error { http.Post(fmt.Sprintf("http://localhost:%d/quitquitquit", ei.AdminPort), "", nil) if ei.cmd != nil { diff --git a/test/v1helpers/test_grpc_service/testgrpcservice.go b/test/v1helpers/test_grpc_service/testgrpcservice.go index 60d590d8d05..78644b8d4a4 100644 --- a/test/v1helpers/test_grpc_service/testgrpcservice.go +++ b/test/v1helpers/test_grpc_service/testgrpcservice.go @@ -4,11 +4,17 @@ import ( "context" "errors" "net" + "os" + "os/signal" "strconv" + "sync/atomic" + "syscall" "time" glootest "github.com/solo-io/gloo/test/v1helpers/test_grpc_service/glootest/protos" "google.golang.org/grpc" + "google.golang.org/grpc/health" + healthpb "google.golang.org/grpc/health/grpc_health_v1" "google.golang.org/grpc/reflection" ) @@ -30,6 +36,8 @@ func RunServer(ctx context.Context) *TestGRPCServer { grpcServer := grpc.NewServer() reflection.Register(grpcServer) srv := newServer() + hc := NewHealthChecker(health.NewServer()) + healthpb.RegisterHealthServer(grpcServer, hc.grpc) glootest.RegisterTestServiceServer(grpcServer, srv) glootest.RegisterTestService2Server(grpcServer, srv) go grpcServer.Serve(lis) @@ -47,6 +55,7 @@ func RunServer(ctx context.Context) *TestGRPCServer { } srv.Port = uint32(port) + srv.HealthChecker = hc return srv } @@ -58,8 +67,9 @@ func newServer() *TestGRPCServer { } type TestGRPCServer struct { - C chan *glootest.TestRequest - Port uint32 + C chan *glootest.TestRequest + Port uint32 + HealthChecker *healthChecker } // Returns a list of all shelves in the bookstore. @@ -82,3 +92,32 @@ func (s *TestGRPCServer) TestMethod2(_ context.Context, req *glootest.TestReques }() return &glootest.TestResponse2{Str: req.Str}, nil } + +type healthChecker struct { + grpc *health.Server + ok uint32 +} + +func NewHealthChecker(grpcHealthServer *health.Server) *healthChecker { + ret := &healthChecker{} + ret.ok = 1 + + ret.grpc = grpcHealthServer + ret.grpc.SetServingStatus("TestService", healthpb.HealthCheckResponse_SERVING) + + sigterm := make(chan os.Signal, 1) + signal.Notify(sigterm, syscall.SIGTERM) + + go func() { + <-sigterm + atomic.StoreUint32(&ret.ok, 0) + ret.grpc.SetServingStatus("TestService", healthpb.HealthCheckResponse_NOT_SERVING) + }() + + return ret +} + +func (hc *healthChecker) Fail() { + atomic.StoreUint32(&hc.ok, 0) + hc.grpc.SetServingStatus("TestService", healthpb.HealthCheckResponse_NOT_SERVING) +} diff --git a/test/v1helpers/test_upstream.go b/test/v1helpers/test_upstream.go index c994d33de29..4255f308e31 100644 --- a/test/v1helpers/test_upstream.go +++ b/test/v1helpers/test_upstream.go @@ -12,10 +12,9 @@ import ( "strconv" "time" + "github.com/gogo/protobuf/proto" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" - - "github.com/gogo/protobuf/proto" gloov1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" static_plugin_gloo "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/plugins/static" testgrpcservice "github.com/solo-io/gloo/test/v1helpers/test_grpc_service" @@ -27,43 +26,70 @@ type ReceivedRequest struct { Body []byte Host string GRPCRequest proto.Message + Port uint32 } func NewTestHttpUpstream(ctx context.Context, addr string) *TestUpstream { backendPort, responses := runTestServer(ctx, "") - return newTestUpstream(addr, backendPort, responses) + return newTestUpstream(addr, []uint32{backendPort}, responses) } func NewTestHttpUpstreamWithReply(ctx context.Context, addr, reply string) *TestUpstream { backendPort, responses := runTestServer(ctx, reply) - return newTestUpstream(addr, backendPort, responses) + return newTestUpstream(addr, []uint32{backendPort}, responses) } -func NewTestGRPCUpstream(ctx context.Context, addr string) *TestUpstream { - srv := testgrpcservice.RunServer(ctx) +func NewTestGRPCUpstream(ctx context.Context, addr string, replicas int) *TestUpstream { + grpcServices := make([]*testgrpcservice.TestGRPCServer, replicas) + for i := range grpcServices { + grpcServices[i] = testgrpcservice.RunServer(ctx) + } received := make(chan *ReceivedRequest, 100) - go func() { - defer GinkgoRecover() - for r := range srv.C { - received <- &ReceivedRequest{GRPCRequest: r} - } - }() + for _, srv := range grpcServices { + srv := srv + go func() { + defer GinkgoRecover() + for r := range srv.C { + received <- &ReceivedRequest{GRPCRequest: r, Port: srv.Port} + } + }() + } + ports := make([]uint32, 0, len(grpcServices)) + for _, v := range grpcServices { + ports = append(ports, v.Port) + } - us := newTestUpstream(addr, srv.Port, received) + us := newTestUpstream(addr, ports, received) + us.GrpcServers = grpcServices return us } type TestUpstream struct { - Upstream *gloov1.Upstream - C <-chan *ReceivedRequest - Address string - Port uint32 + Upstream *gloov1.Upstream + C <-chan *ReceivedRequest + Address string + Port uint32 + GrpcServers []*testgrpcservice.TestGRPCServer +} + +func (tu *TestUpstream) FailGrpcHealthCheck() *testgrpcservice.TestGRPCServer { + for _, v := range tu.GrpcServers[:len(tu.GrpcServers)-1] { + v.HealthChecker.Fail() + } + return tu.GrpcServers[len(tu.GrpcServers)-1] } var id = 0 -func newTestUpstream(addr string, port uint32, responses <-chan *ReceivedRequest) *TestUpstream { +func newTestUpstream(addr string, ports []uint32, responses <-chan *ReceivedRequest) *TestUpstream { id += 1 + hosts := make([]*static_plugin_gloo.Host, len(ports)) + for i, port := range ports { + hosts[i] = &static_plugin_gloo.Host{ + Addr: addr, + Port: port, + } + } u := &gloov1.Upstream{ Metadata: core.Metadata{ Name: fmt.Sprintf("local-%d", id), @@ -72,10 +98,7 @@ func newTestUpstream(addr string, port uint32, responses <-chan *ReceivedRequest UpstreamSpec: &gloov1.UpstreamSpec{ UpstreamType: &gloov1.UpstreamSpec_Static{ Static: &static_plugin_gloo.UpstreamSpec{ - Hosts: []*static_plugin_gloo.Host{{ - Addr: addr, - Port: port, - }}, + Hosts: hosts, }, }, }, @@ -84,8 +107,7 @@ func newTestUpstream(addr string, port uint32, responses <-chan *ReceivedRequest return &TestUpstream{ Upstream: u, C: responses, - Address: fmt.Sprintf("%s:%d", addr, port), - Port: port, + Port: ports[0], } } @@ -126,10 +148,15 @@ func runTestServer(ctx context.Context, reply string) (uint32, <-chan *ReceivedR panic(err) } - handler := http.HandlerFunc(handlerFunc) + mux := http.NewServeMux() + mux.Handle("/", http.HandlerFunc(handlerFunc)) + mux.Handle("/health", http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { + rw.Write([]byte("OK")) + })) + go func() { defer GinkgoRecover() - h := &http.Server{Handler: handler} + h := &http.Server{Handler: mux} go func() { defer GinkgoRecover() if err := h.Serve(listener); err != nil {