From b1f5208a23dcae5e3a7d4bb1dfa1017a838e94bf Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:51:57 -0400 Subject: [PATCH 01/61] spelling: adding Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- CHANGELOG/1.2-CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG/1.2-CHANGELOG.md b/CHANGELOG/1.2-CHANGELOG.md index 6eb92933a5..83cd881480 100644 --- a/CHANGELOG/1.2-CHANGELOG.md +++ b/CHANGELOG/1.2-CHANGELOG.md @@ -850,7 +850,7 @@ The Experimental `supportedFeatures` field in GatewayClass `status` has changed from being a list of strings to being a list of objects/structs with a `name` field. -This is to allow addding in extra information to each entry at a later date. +This is to allow adding in extra information to each entry at a later date. Relevant PRs: From bd35f533b5127236d9a40335aa82b5bb84448e52 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:09:34 -0400 Subject: [PATCH 02/61] spelling: anymore Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1364/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1364/index.md b/geps/gep-1364/index.md index b33fee3850..5afa356347 100644 --- a/geps/gep-1364/index.md +++ b/geps/gep-1364/index.md @@ -42,7 +42,7 @@ these changes. The constants that mark the deprecated types will be also marked as deprecated, and will no longer be tested as part of conformance. They'll still be present, -and will work, but they won't be part of the spec any more. This should give +and will work, but they won't be part of the spec anymore. This should give implementations and users a release to transition to the new design (in UX terms). This grace period should be one release (so, the constants will be removed in v0.7.0.) From 33fafdc6627256ebbc284da68d149bd29e763bf8 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:52:47 -0400 Subject: [PATCH 03/61] spelling: approach Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1686/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1686/index.md b/geps/gep-1686/index.md index eacf2a723c..d80bdfa042 100644 --- a/geps/gep-1686/index.md +++ b/geps/gep-1686/index.md @@ -23,7 +23,7 @@ The goal of the initial conformance testing is to check the essential behavior a GAMMA intends to introduce a "Mesh" [conformance profile](https://gateway-api.sigs.k8s.io/geps/gep-1709/) to isolate tests specific to East/West functionality from both existing tests focused on North/South functionality and common Gateway API functionality shared by N/S and E/W implementations. A conformance profile is a set of tests that implementations can run to check their conformance to some subset of the Gateway API spec. -This appropach will enable service meshes to certify that an implementation follows the GAMMA spec without requiring a North/South implementation, and importantly avoid any expectation that North/South Gateway API implementations expand their scope to understand GAMMA and E/W traffic flows. +This approach will enable service meshes to certify that an implementation follows the GAMMA spec without requiring a North/South implementation, and importantly avoid any expectation that North/South Gateway API implementations expand their scope to understand GAMMA and E/W traffic flows. Leveraging existing tests for common functionality between N/S and E/W implementations will both ensure consistency across Gateway API implementations and help limit the maintence burden for the conformance testing suite. From 87c738ab0bd9b1d593f12f4e138fcd009da497ea Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:53:39 -0400 Subject: [PATCH 04/61] spelling: attached Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-2648/index.md | 2 +- geps/gep-2649/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/geps/gep-2648/index.md b/geps/gep-2648/index.md index 681cf15ae5..ae3ebf389c 100644 --- a/geps/gep-2648/index.md +++ b/geps/gep-2648/index.md @@ -95,7 +95,7 @@ the Policy object, the DataplaneConfig object does not affect if the Policy is a Direct one or not. This is because _a user can understand the state of the hierarchy by looking at all the objects in the hierarchy_. DataplaneConfig is _outside_ the hierarchy in terms of understanding the state of the Policy. -Direct Attacthed Policy is intended as a way to _manage the complexity_ of +Direct Attached Policy is intended as a way to _manage the complexity_ of Policy objects and allow a _limited_ set of Policies to follow vastly more simple design patterns _if they meet a set of criteria_. diff --git a/geps/gep-2649/index.md b/geps/gep-2649/index.md index a6f18877f7..6823cfb000 100644 --- a/geps/gep-2649/index.md +++ b/geps/gep-2649/index.md @@ -60,7 +60,7 @@ an Inherited Policy. Note that the same object may be have some properties of both an Inherited Policy _and_ a Direct Policy if it can attach to multiple points of a hierarchy, such -as if the same Policy can be atttached to a Gateway (where it affects all Routes +as if the same Policy can be attached to a Gateway (where it affects all Routes attached to that Gateway) or to a Route (where it affects only that Route). If a Policy _can be_ used as an Inherited Policy, it MUST be treated as an From 6322a33ab62e847b35ee7982beff1d947978a329 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:56:53 -0400 Subject: [PATCH 05/61] spelling: because Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1897/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1897/index.md b/geps/gep-1897/index.md index 63e3102767..9562a085da 100644 --- a/geps/gep-1897/index.md +++ b/geps/gep-1897/index.md @@ -342,7 +342,7 @@ Ref: [TLS Origination](https://www.getambassador.io/docs/emissary/latest/topics/ ### NGINX implementation through CRDs (Comparable to Route or Policy of Gateway API) supports both TLS and mTLS * In the Upstream section of a VirtualServer or VirtualServerRoute (equivalent to HTTPRoute) there is a simple toggle to enable TLS. This does not validate the certificate of the backend and implicitly trusts the backend in order to form the SSL tunnel. This is not about validating the certificate but obfuscating the traffic with TLS/SSL. -* A Policy attachment can be provided when certification validation is required that is called egressMTLS (egress from the proxy to the upstream). This can be tuned to perform various certificate validation tests. It was created as a Policy becuase it implies some type of AuthN/AuthZ due to the additional checks. This was also compatible with Open Service Mesh and NGINX Service Mesh and removed the need for a sidecar at the ingress controller. +* A Policy attachment can be provided when certification validation is required that is called egressMTLS (egress from the proxy to the upstream). This can be tuned to perform various certificate validation tests. It was created as a Policy because it implies some type of AuthN/AuthZ due to the additional checks. This was also compatible with Open Service Mesh and NGINX Service Mesh and removed the need for a sidecar at the ingress controller. * A corresponding 'IngressMTLS' policy also exists for mTLS verification of client connections to the proxy. The Policy object is used for anything that implies AuthN/AuthZ. Ref: [Upstream.TLS](https://docs.nginx.com/nginx-ingress-controller/configuration/virtualserver-and-virtualserverroute-resources/#upstreamtls) From 2585a66f66df1619dc43cad89e85177630dd5ffd Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:09:47 -0400 Subject: [PATCH 06/61] spelling: cannot Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- CHANGELOG/0.x-CHANGELOG.md | 4 ++-- CHANGELOG/1.0-CHANGELOG.md | 4 ++-- apis/v1/grpcroute_types.go | 2 +- apis/v1/httproute_types.go | 4 ++-- apis/v1/shared_types.go | 6 +++--- apis/v1alpha2/shared_types.go | 4 ++-- apis/v1beta1/shared_types.go | 4 ++-- .../gateway.networking.k8s.io_grpcroutes.yaml | 2 +- .../gateway.networking.k8s.io_httproutes.yaml | 8 ++++---- .../standard/gateway.networking.k8s.io_grpcroutes.yaml | 2 +- .../standard/gateway.networking.k8s.io_httproutes.yaml | 8 ++++---- conformance/apis/v1/conformancereport.go | 10 +++++----- geps/gep-922/index.md | 2 +- site-src/api-types/grpcroute.md | 2 +- site-src/api-types/httproute.md | 2 +- 15 files changed, 32 insertions(+), 32 deletions(-) diff --git a/CHANGELOG/0.x-CHANGELOG.md b/CHANGELOG/0.x-CHANGELOG.md index c6bbf4db3c..88c87dd7fc 100644 --- a/CHANGELOG/0.x-CHANGELOG.md +++ b/CHANGELOG/0.x-CHANGELOG.md @@ -226,7 +226,7 @@ For more information refer to - Added the missing ReferenceGrant resource the kustomization.yaml for the standard channel (#2084, @howardjohn) -- Webhook validation now ensures that BackendRefs can not be specified in the +- Webhook validation now ensures that BackendRefs cannot be specified in the same HTTPRoute rule as a Redirect filter (#2161, @slayer321) - GRPCRoute: The default match has been removed as it was invalid (it only specified a type of "Exact" without a corresponding Service or Method). Note @@ -407,7 +407,7 @@ For more information, refer to - Added the missing ReferenceGrant resource the kustomization.yaml for the standard channel (#2084, @howardjohn) -- Webhook validation now ensures that BackendRefs can not be specified in the +- Webhook validation now ensures that BackendRefs cannot be specified in the same HTTPRoute rule as a Redirect filter (#2161, @slayer321) # v0.7.1 diff --git a/CHANGELOG/1.0-CHANGELOG.md b/CHANGELOG/1.0-CHANGELOG.md index 25520bb4eb..f879309752 100644 --- a/CHANGELOG/1.0-CHANGELOG.md +++ b/CHANGELOG/1.0-CHANGELOG.md @@ -142,7 +142,7 @@ Of course there's a lot more in this release: - The condition reason `GatewayReasonAddressNotUsable` for `Programmed` has been added to deal with situations where a static address has been provided for a Gateway which is of a supported type, and is syntactically valid, but for some - reason it can not be used for this Gateway (e.g. the address is already in use + reason it cannot be used for this Gateway (e.g. the address is already in use on the network). (#2412 @shaneutt) @@ -332,7 +332,7 @@ Of course there's a lot more in this release: - The condition reason `GatewayReasonAddressNotUsable` for `Programmed` has been added to deal with situations where a static address has been provided for a Gateway which is of a supported type, and is syntactically valid, but for some - reason it can not be used for this Gateway (e.g. the address is already in use + reason it cannot be used for this Gateway (e.g. the address is already in use on the network). (#2412 @shaneutt) diff --git a/apis/v1/grpcroute_types.go b/apis/v1/grpcroute_types.go index 953ba0243b..21beb95e8a 100644 --- a/apis/v1/grpcroute_types.go +++ b/apis/v1/grpcroute_types.go @@ -230,7 +230,7 @@ type GRPCRouteRule struct { // Specifying the same filter multiple times is not supported unless explicitly // indicated in the filter. // - // If an implementation can not support a combination of filters, it must clearly + // If an implementation cannot support a combination of filters, it must clearly // document that limitation. In cases where incompatible or unsupported // filters are specified and cause the `Accepted` condition to be set to status // `False`, implementations may use the `IncompatibleFilters` reason to specify diff --git a/apis/v1/httproute_types.go b/apis/v1/httproute_types.go index a185e3709f..c24a0edeae 100644 --- a/apis/v1/httproute_types.go +++ b/apis/v1/httproute_types.go @@ -210,7 +210,7 @@ type HTTPRouteRule struct { // they are specified. // // Implementations MAY choose to implement this ordering strictly, rejecting - // any combination or order of filters that can not be supported. If implementations + // any combination or order of filters that cannot be supported. If implementations // choose a strict interpretation of filter ordering, they MUST clearly document // that behavior. // @@ -232,7 +232,7 @@ type HTTPRouteRule struct { // // All filters are expected to be compatible with each other except for the // URLRewrite and RequestRedirect filters, which may not be combined. If an - // implementation can not support other combinations of filters, they must clearly + // implementation cannot support other combinations of filters, they must clearly // document that limitation. In cases where incompatible or unsupported // filters are specified and cause the `Accepted` condition to be set to status // `False`, implementations may use the `IncompatibleFilters` reason to specify diff --git a/apis/v1/shared_types.go b/apis/v1/shared_types.go index 3c2459e3fa..cebd836f9f 100644 --- a/apis/v1/shared_types.go +++ b/apis/v1/shared_types.go @@ -675,7 +675,7 @@ type GatewayController string // Invalid values include: // // * example~ - "~" is an invalid character -// * example.com. - can not start or end with "." +// * example.com. - cannot start or end with "." // // +kubebuilder:validation:MinLength=1 // +kubebuilder:validation:MaxLength=253 @@ -705,7 +705,7 @@ type AnnotationValue string // Invalid values include: // // * example~ - "~" is an invalid character -// * example.com. - can not start or end with "." +// * example.com. - cannot start or end with "." // // +kubebuilder:validation:MinLength=1 // +kubebuilder:validation:MaxLength=253 @@ -771,7 +771,7 @@ const ( // (see [RFC 5952](https://tools.ietf.org/html/rfc5952)). // // This type is intended for specific addresses. Address ranges are not - // supported (e.g. you can not use a CIDR range like 127.0.0.0/24 as an + // supported (e.g. you cannot use a CIDR range like 127.0.0.0/24 as an // IPAddress). // // Support: Extended diff --git a/apis/v1alpha2/shared_types.go b/apis/v1alpha2/shared_types.go index af04601e41..2fb84d5f3b 100644 --- a/apis/v1alpha2/shared_types.go +++ b/apis/v1alpha2/shared_types.go @@ -313,7 +313,7 @@ type GatewayController = v1.GatewayController // Invalid values include: // // * example~ - "~" is an invalid character -// * example.com. - can not start or end with "." +// * example.com. - cannot start or end with "." // // +kubebuilder:validation:MinLength=1 // +kubebuilder:validation:MaxLength=253 @@ -360,7 +360,7 @@ const ( // (see [RFC 5952](https://tools.ietf.org/html/rfc5952)). // // This type is intended for specific addresses. Address ranges are not - // supported (e.g. you can not use a CIDR range like 127.0.0.0/24 as an + // supported (e.g. you cannot use a CIDR range like 127.0.0.0/24 as an // IPAddress). // // Support: Extended diff --git a/apis/v1beta1/shared_types.go b/apis/v1beta1/shared_types.go index 2dfbb9264a..3dbcc280fc 100644 --- a/apis/v1beta1/shared_types.go +++ b/apis/v1beta1/shared_types.go @@ -313,7 +313,7 @@ type GatewayController = v1.GatewayController // Invalid values include: // // * example~ - "~" is an invalid character -// * example.com. - can not start or end with "." +// * example.com. - cannot start or end with "." // // +kubebuilder:validation:MinLength=1 // +kubebuilder:validation:MaxLength=253 @@ -360,7 +360,7 @@ const ( // (see [RFC 5952](https://tools.ietf.org/html/rfc5952)). // // This type is intended for specific addresses. Address ranges are not - // supported (e.g. you can not use a CIDR range like 127.0.0.0/24 as an + // supported (e.g. you cannot use a CIDR range like 127.0.0.0/24 as an // IPAddress). // // Support: Extended diff --git a/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml index e30ff85b77..ea833146b1 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml @@ -1113,7 +1113,7 @@ spec: Specifying the same filter multiple times is not supported unless explicitly indicated in the filter. - If an implementation can not support a combination of filters, it must clearly + If an implementation cannot support a combination of filters, it must clearly document that limitation. In cases where incompatible or unsupported filters are specified and cause the `Accepted` condition to be set to status `False`, implementations may use the `IncompatibleFilters` reason to specify diff --git a/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml index 78126dd7e3..a13b030aa8 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml @@ -1369,7 +1369,7 @@ spec: they are specified. Implementations MAY choose to implement this ordering strictly, rejecting - any combination or order of filters that can not be supported. If implementations + any combination or order of filters that cannot be supported. If implementations choose a strict interpretation of filter ordering, they MUST clearly document that behavior. @@ -1391,7 +1391,7 @@ spec: All filters are expected to be compatible with each other except for the URLRewrite and RequestRedirect filters, which may not be combined. If an - implementation can not support other combinations of filters, they must clearly + implementation cannot support other combinations of filters, they must clearly document that limitation. In cases where incompatible or unsupported filters are specified and cause the `Accepted` condition to be set to status `False`, implementations may use the `IncompatibleFilters` reason to specify @@ -4435,7 +4435,7 @@ spec: they are specified. Implementations MAY choose to implement this ordering strictly, rejecting - any combination or order of filters that can not be supported. If implementations + any combination or order of filters that cannot be supported. If implementations choose a strict interpretation of filter ordering, they MUST clearly document that behavior. @@ -4457,7 +4457,7 @@ spec: All filters are expected to be compatible with each other except for the URLRewrite and RequestRedirect filters, which may not be combined. If an - implementation can not support other combinations of filters, they must clearly + implementation cannot support other combinations of filters, they must clearly document that limitation. In cases where incompatible or unsupported filters are specified and cause the `Accepted` condition to be set to status `False`, implementations may use the `IncompatibleFilters` reason to specify diff --git a/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml b/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml index 70e58b59d7..f889c8bba7 100644 --- a/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml +++ b/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml @@ -1044,7 +1044,7 @@ spec: Specifying the same filter multiple times is not supported unless explicitly indicated in the filter. - If an implementation can not support a combination of filters, it must clearly + If an implementation cannot support a combination of filters, it must clearly document that limitation. In cases where incompatible or unsupported filters are specified and cause the `Accepted` condition to be set to status `False`, implementations may use the `IncompatibleFilters` reason to specify diff --git a/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml b/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml index d553e0dee0..3b61c35ffb 100644 --- a/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml +++ b/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml @@ -1300,7 +1300,7 @@ spec: they are specified. Implementations MAY choose to implement this ordering strictly, rejecting - any combination or order of filters that can not be supported. If implementations + any combination or order of filters that cannot be supported. If implementations choose a strict interpretation of filter ordering, they MUST clearly document that behavior. @@ -1322,7 +1322,7 @@ spec: All filters are expected to be compatible with each other except for the URLRewrite and RequestRedirect filters, which may not be combined. If an - implementation can not support other combinations of filters, they must clearly + implementation cannot support other combinations of filters, they must clearly document that limitation. In cases where incompatible or unsupported filters are specified and cause the `Accepted` condition to be set to status `False`, implementations may use the `IncompatibleFilters` reason to specify @@ -4051,7 +4051,7 @@ spec: they are specified. Implementations MAY choose to implement this ordering strictly, rejecting - any combination or order of filters that can not be supported. If implementations + any combination or order of filters that cannot be supported. If implementations choose a strict interpretation of filter ordering, they MUST clearly document that behavior. @@ -4073,7 +4073,7 @@ spec: All filters are expected to be compatible with each other except for the URLRewrite and RequestRedirect filters, which may not be combined. If an - implementation can not support other combinations of filters, they must clearly + implementation cannot support other combinations of filters, they must clearly document that limitation. In cases where incompatible or unsupported filters are specified and cause the `Accepted` condition to be set to status `False`, implementations may use the `IncompatibleFilters` reason to specify diff --git a/conformance/apis/v1/conformancereport.go b/conformance/apis/v1/conformancereport.go index 94e5e8e064..9eb23704fd 100644 --- a/conformance/apis/v1/conformancereport.go +++ b/conformance/apis/v1/conformancereport.go @@ -90,19 +90,19 @@ type Implementation struct { func (i *Implementation) Validate() error { // TODO: add data validation https://github.com/kubernetes-sigs/gateway-api/issues/2178 if i.Organization == "" { - return errors.New("implementation's organization can not be empty") + return errors.New("implementation's organization cannot be empty") } if i.Project == "" { - return errors.New("implementation's project can not be empty") + return errors.New("implementation's project cannot be empty") } if i.URL == "" { - return errors.New("implementation's url can not be empty") + return errors.New("implementation's url cannot be empty") } if i.Version == "" { - return errors.New("implementation's version can not be empty") + return errors.New("implementation's version cannot be empty") } if len(i.Contact) == 0 { - return errors.New("implementation's contact can not be empty") + return errors.New("implementation's contact cannot be empty") } return nil } diff --git a/geps/gep-922/index.md b/geps/gep-922/index.md index a1afba7965..23b6153111 100644 --- a/geps/gep-922/index.md +++ b/geps/gep-922/index.md @@ -51,7 +51,7 @@ and/or removing old ones as part of a new bundle. ## Limitations of Webhook and CRD Validation CRD and webhook validation is not the final validation i.e. webhook is “nice UX” but not schema enforcement. This validation is intended to provide immediate -feedback to users when they provide an invalid configuration, but can not +feedback to users when they provide an invalid configuration, but cannot completely be relied on because it: * Is not guaranteed to be present or up to date in all clusters. diff --git a/site-src/api-types/grpcroute.md b/site-src/api-types/grpcroute.md index 0bb4a9b5f7..560d7fe2ef 100644 --- a/site-src/api-types/grpcroute.md +++ b/site-src/api-types/grpcroute.md @@ -185,7 +185,7 @@ Conformance levels are defined by the filter type: Specifying a core filter multiple times has unspecified or custom conformance. -If an implementation can not support a combinations of filters, they must clearly +If an implementation cannot support a combinations of filters, they must clearly document that limitation. In cases where incompatible or unsupported filters are specified and cause the `Accepted` condition to be set to status `False`, implementations may use the `IncompatibleFilters` reason to specify diff --git a/site-src/api-types/httproute.md b/site-src/api-types/httproute.md index 6f63506f02..46374e1973 100644 --- a/site-src/api-types/httproute.md +++ b/site-src/api-types/httproute.md @@ -198,7 +198,7 @@ implementation-specific conformance. All filters are expected to be compatible with each other except for the URLRewrite and RequestRedirect filters, which may not be combined. If an -implementation can not support other combinations of filters, they must clearly +implementation cannot support other combinations of filters, they must clearly document that limitation. In cases where incompatible or unsupported filters are specified and cause the `Accepted` condition to be set to status `False`, implementations may use the `IncompatibleFilters` reason to specify From fcf6976874f1b5be24aeda63bc5a3744f1acc809 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:09:58 -0400 Subject: [PATCH 07/61] spelling: case-insensitive Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- apis/v1/httproute_types.go | 4 +-- .../gateway.networking.k8s.io_grpcroutes.yaml | 16 ++++----- .../gateway.networking.k8s.io_httproutes.yaml | 36 +++++++++---------- .../gateway.networking.k8s.io_grpcroutes.yaml | 16 ++++----- .../gateway.networking.k8s.io_httproutes.yaml | 36 +++++++++---------- 5 files changed, 54 insertions(+), 54 deletions(-) diff --git a/apis/v1/httproute_types.go b/apis/v1/httproute_types.go index c24a0edeae..005d51f8a1 100644 --- a/apis/v1/httproute_types.go +++ b/apis/v1/httproute_types.go @@ -596,7 +596,7 @@ type HTTPHeaderMatch struct { Type *HeaderMatchType `json:"type,omitempty"` // Name is the name of the HTTP Header to be matched. Name matching MUST be - // case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + // case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). // // If multiple entries specify equivalent header names, only the first // entry with an equivalent name MUST be considered for a match. Subsequent @@ -947,7 +947,7 @@ const ( // HTTPHeader represents an HTTP Header name and value as defined by RFC 7230. type HTTPHeader struct { // Name is the name of the HTTP Header to be matched. Name matching MUST be - // case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + // case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). // // If multiple entries specify equivalent header names, the first entry with // an equivalent name MUST be considered for a match. Subsequent entries diff --git a/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml index ea833146b1..a8df1d9d5e 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml @@ -542,7 +542,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -617,7 +617,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -828,7 +828,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -903,7 +903,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1196,7 +1196,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1270,7 +1270,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1480,7 +1480,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1554,7 +1554,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries diff --git a/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml index a13b030aa8..4088c596cb 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml @@ -534,7 +534,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -609,7 +609,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -973,7 +973,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1048,7 +1048,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1474,7 +1474,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1548,7 +1548,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1911,7 +1911,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1985,7 +1985,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -2285,7 +2285,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, only the first entry with an equivalent name MUST be considered for a match. Subsequent @@ -3600,7 +3600,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -3675,7 +3675,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4039,7 +4039,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4114,7 +4114,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4540,7 +4540,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4614,7 +4614,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4977,7 +4977,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -5051,7 +5051,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -5351,7 +5351,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, only the first entry with an equivalent name MUST be considered for a match. Subsequent diff --git a/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml b/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml index f889c8bba7..4331775179 100644 --- a/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml +++ b/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml @@ -515,7 +515,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -590,7 +590,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -759,7 +759,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -834,7 +834,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1127,7 +1127,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1201,7 +1201,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1369,7 +1369,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1443,7 +1443,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries diff --git a/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml b/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml index 3b61c35ffb..3d810c1e6b 100644 --- a/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml +++ b/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml @@ -507,7 +507,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -582,7 +582,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -904,7 +904,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -979,7 +979,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1405,7 +1405,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1479,7 +1479,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1800,7 +1800,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -1874,7 +1874,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -2174,7 +2174,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, only the first entry with an equivalent name MUST be considered for a match. Subsequent @@ -3258,7 +3258,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -3333,7 +3333,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -3655,7 +3655,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -3730,7 +3730,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4156,7 +4156,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4230,7 +4230,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4551,7 +4551,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4625,7 +4625,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries @@ -4925,7 +4925,7 @@ spec: name: description: |- Name is the name of the HTTP Header to be matched. Name matching MUST be - case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). + case-insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). If multiple entries specify equivalent header names, only the first entry with an equivalent name MUST be considered for a match. Subsequent From 3a8e19ec07eeb2f7c6561fa8143086429af52146 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:10:09 -0400 Subject: [PATCH 08/61] spelling: case-sensitive Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- apis/v1/httproute_types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apis/v1/httproute_types.go b/apis/v1/httproute_types.go index 005d51f8a1..8037c4f17b 100644 --- a/apis/v1/httproute_types.go +++ b/apis/v1/httproute_types.go @@ -487,7 +487,7 @@ const ( PathMatchExact PathMatchType = "Exact" // Matches based on a URL path prefix split by `/`. Matching is - // case sensitive and done on a path element by element basis. A + // case-sensitive and done on a path element by element basis. A // path element refers to the list of labels in the path split by // the `/` separator. When specified, a trailing `/` is ignored. // From 74899a998659feaa4bb930032233f49d05c89349 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:58:54 -0400 Subject: [PATCH 09/61] spelling: certificate Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- apis/v1alpha3/backendtlspolicy_types.go | 2 +- .../gateway.networking.k8s.io_backendtlspolicies.yaml | 2 +- geps/gep-1897/index.md | 4 ++-- site-src/api-types/backendtlspolicy.md | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apis/v1alpha3/backendtlspolicy_types.go b/apis/v1alpha3/backendtlspolicy_types.go index 83f3b2df26..cca1ce73fe 100644 --- a/apis/v1alpha3/backendtlspolicy_types.go +++ b/apis/v1alpha3/backendtlspolicy_types.go @@ -102,7 +102,7 @@ type BackendTLSPolicyValidation struct { // // If CACertificateRefs is empty or unspecified, then WellKnownCACertificates must be // specified. Only one of CACertificateRefs or WellKnownCACertificates may be specified, - // not both. If CACertifcateRefs is empty or unspecified, the configuration for + // not both. If CACertificateRefs is empty or unspecified, the configuration for // WellKnownCACertificates MUST be honored instead if supported by the implementation. // // References to a resource in a different namespace are invalid for the diff --git a/config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml b/config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml index 7cdd9f301e..319823cc3c 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml @@ -152,7 +152,7 @@ spec: If CACertificateRefs is empty or unspecified, then WellKnownCACertificates must be specified. Only one of CACertificateRefs or WellKnownCACertificates may be specified, - not both. If CACertifcateRefs is empty or unspecified, the configuration for + not both. If CACertificateRefs is empty or unspecified, the configuration for WellKnownCACertificates MUST be honored instead if supported by the implementation. References to a resource in a different namespace are invalid for the diff --git a/geps/gep-1897/index.md b/geps/gep-1897/index.md index 9562a085da..09f6195fa5 100644 --- a/geps/gep-1897/index.md +++ b/geps/gep-1897/index.md @@ -216,9 +216,9 @@ specified as ""). The use and definition of system certificates is implementati these certificates are obtained from the underlying operating system. CACertificateRefs contains one or more references to Kubernetes objects that contain PEM-encoded TLS certificates, which are used to establish a TLS handshake between the gateway and backend pod. References to a resource in a different namespace are invalid. -If ClientCertifcateRefs is unspecified, then WellKnownCACertificates must be set to "System" for a valid configuration. +If ClientCertificateRefs is unspecified, then WellKnownCACertificates must be set to "System" for a valid configuration. If WellKnownCACertificates is unspecified, then CACertificateRefs must be specified with at least one entry for a valid configuration. -If WellKnownCACertficates is set to "System" and there are no system trusted certificates or the implementation doesn't define system +If WellKnownCACertificates is set to "System" and there are no system trusted certificates or the implementation doesn't define system trusted certificates, then the associated TLS connection must fail. The `Hostname` field is required and is to be used to configure the SNI the Gateway should use to connect to the backend. diff --git a/site-src/api-types/backendtlspolicy.md b/site-src/api-types/backendtlspolicy.md index 7a2e568388..617ff1f865 100644 --- a/site-src/api-types/backendtlspolicy.md +++ b/site-src/api-types/backendtlspolicy.md @@ -37,10 +37,10 @@ The specification of a [BackendTLSPolicy][backendtlspolicy] consists of: WellKnownCACertificates. - [Hostname][hostname] - Defines the Server Name Indication (SNI) that the Gateway uses to connect to the backend. - [CACertificateRefs][caCertificateRefs] - Defines one or more references to objects that contain PEM-encoded TLS certificates, -which are used to establish a TLS handshake between the Gateway and backend Pod. Either CACertficateRefs or +which are used to establish a TLS handshake between the Gateway and backend Pod. Either CACertificateRefs or WellKnownCACertificates may be specified, but not both. - [WellKnownCACertificates][wellKnownCACertificates] - Specifies whether system CA certificates may be used in the TLS -handshake between the Gateway and backend Pod. Either CACertficateRefs or WellKnownCACertificates may be specified, but not both. +handshake between the Gateway and backend Pod. Either CACertificateRefs or WellKnownCACertificates may be specified, but not both. The following chart outlines the object definitions and relationship: ```mermaid @@ -57,7 +57,7 @@ flowchart LR spec -->targetRefs & validation status -->ancestorStatus targetRefs -->service - note[choose only one
caCerticateRefs OR wellKnownCACertificates
] + note[choose only one
caCertificateRefs OR wellKnownCACertificates
] style note fill:#fff validation -.- note ``` @@ -117,7 +117,7 @@ The BackendTLSPolicyValidation must contain a certificate reference of some kind certificate to use for backend TLS, CACertificateRefs and WellKnownCACertificates. Only one of these may be used per BackendTLSPolicyValidation. -##### CACertficateRefs +##### CACertificateRefs CACertificateRefs refer to one or more PEM-encoded TLS certificates. From 282dc8260b8f861666ff4fe4a5fce53536fc8c5a Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:59:03 -0400 Subject: [PATCH 10/61] spelling: certificates Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-91/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-91/index.md b/geps/gep-91/index.md index cd5d50ea14..a7a1a6a9e9 100644 --- a/geps/gep-91/index.md +++ b/geps/gep-91/index.md @@ -149,7 +149,7 @@ spec: This section highlights use cases that may be covered in a future iteration of this GEP * Using system CA certificates as the trust anchor to validate the certificates presented by the frontend client. -* Supporting a mode where validating client certficates is optional, useful for debugging and migrating to strict TLS. +* Supporting a mode where validating client certificates is optional, useful for debugging and migrating to strict TLS. * Supporting an optional `subjectAltNames` field within `FrontendTLSValidation` that can be used to specify one or more alternate names to verify the subject identity in the certificate presented by the client. This field falls under Authorization, the initial focus here is on Client Authentication and will be revisited when Authorization is tackled as a whole in the project. * Specifying the verification depth in the client certificate chain. This is being deferred because the default verification depth differs across implementations. From 723566200d49bfbe48bf13b5b5f4518469c701cb Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:00:58 -0400 Subject: [PATCH 11/61] spelling: configuration Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-91/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-91/index.md b/geps/gep-91/index.md index a7a1a6a9e9..a1d14fbda2 100644 --- a/geps/gep-91/index.md +++ b/geps/gep-91/index.md @@ -37,7 +37,7 @@ This table highlights the support. Please feel free to add any missing implement * Introduce a `FrontendValidation` field of type `FrontendTLSValidation` within [GatewayTLSConfig][] that can be used to validate the peer (frontend) with which the TLS connection is being made. * Introduce a `caCertificateRefs` field within `FrontendTLSValidation` that can be used to specify a list of CA Certificates that can be used as a trust anchor to validate the certificates presented by the client. -* This new field is mutually exclusive with the [BackendTLSPolicy][] configuation which is used to validate the TLS certificate presented by the backend peer on the connection between the Gateway and the backend, and this GEP is adding support for validating the TLS certificate presented by the frontend client on the connection between the Gateway and the frontend. Both these configurations can coexist at the same time without affecting one another. +* This new field is mutually exclusive with the [BackendTLSPolicy][] configuration which is used to validate the TLS certificate presented by the backend peer on the connection between the Gateway and the backend, and this GEP is adding support for validating the TLS certificate presented by the frontend client on the connection between the Gateway and the frontend. Both these configurations can coexist at the same time without affecting one another. * Also introduce a `ObjectReference` structure that can be used to specify `caCertificateRefs` references. #### GO From 5abd1820bce6f592260ced2da901fee24fcb4fdb Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:02:03 -0400 Subject: [PATCH 12/61] spelling: criteria Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-820/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-820/index.md b/geps/gep-820/index.md index e683060ed8..78b92a9424 100644 --- a/geps/gep-820/index.md +++ b/geps/gep-820/index.md @@ -52,7 +52,7 @@ The following fields and all associated documentation will be removed: - HTTPRouteMatch.ExtensionRef - TCPRouteMatch.ExtensionRef will be removed. This results in a struct without any members: TCPRouteMatch. The struct will be kept as it is expected that - more match criterias might be added to L4 routes. + more match criteria might be added to L4 routes. - Do the same to UDPRoute and TLSRoute From ef2cf478a9804313d72fdeba1bda2766aece8e13 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:02:32 -0400 Subject: [PATCH 13/61] spelling: deterministically Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1619/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1619/index.md b/geps/gep-1619/index.md index 389d0a72cf..12316812e7 100644 --- a/geps/gep-1619/index.md +++ b/geps/gep-1619/index.md @@ -978,7 +978,7 @@ spec: This is an invalid configuration as two separate sessions cannot have the same cookie name. Implementations SHOULD address this scenario in manner they deem appropriate. Implementations MAY choose to reject the configuration, or they -MAY non-deterministicly allow one cookie to work (e.g. whichever cookie is configured first). +MAY non-deterministically allow one cookie to work (e.g. whichever cookie is configured first). #### Traffic Splitting with route rule inline sessionPersistence field From cc1a882696020a6c75be5f493ad0740f75a2bbfe Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:02:45 -0400 Subject: [PATCH 14/61] spelling: discoverability Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-713/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-713/index.md b/geps/gep-713/index.md index e547a12c53..f6b51e7c4c 100644 --- a/geps/gep-713/index.md +++ b/geps/gep-713/index.md @@ -552,7 +552,7 @@ that _every_ Policy update does not require a status update. Because Policy Attachment is a pattern for APIs, not an API, and needs to address all the problems above, the strategy this GEP proposes is to define a range of -options for increasing the discoverabilty of Policy resources, and provide +options for increasing the discoverability of Policy resources, and provide guidelines for when they should be used. It's likely that at some stage, the Gateway API CRDs will include some Policy From 3b722b72aab7a38a5d99bc1f8bc192be28324aa8 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:03:09 -0400 Subject: [PATCH 15/61] spelling: docs Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- site-src/implementations.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site-src/implementations.md b/site-src/implementations.md index f642f17deb..9fd4d823c7 100644 --- a/site-src/implementations.md +++ b/site-src/implementations.md @@ -290,12 +290,12 @@ HAProxy Kubernetes Ingress Controller is an open-source project maintained by HA [Consul][consul], by [HashiCorp][hashicorp], is an open source control plane for multi-cloud networking. A single Consul deployment can span bare metal, VM and container environments. -Consul service mesh works on any Kubernetes distribution, connects multiple clusters, and Consul CRDs provide a Kubernetes native workflow to manage traffic patterns and permissions in the mesh. [Consul API Gateway][consul-api-gw-doocs] supports Gateway API for managing North-South traffic. +Consul service mesh works on any Kubernetes distribution, connects multiple clusters, and Consul CRDs provide a Kubernetes native workflow to manage traffic patterns and permissions in the mesh. [Consul API Gateway][consul-api-gw-docs] supports Gateway API for managing North-South traffic. -Please see the [Consul API Gateway documentation][consul-api-gw-doocs] for current information on the supported version and features of the Gateway API. +Please see the [Consul API Gateway documentation][consul-api-gw-docs] for current information on the supported version and features of the Gateway API. [consul]:https://consul.io -[consul-api-gw-doocs]:https://www.consul.io/docs/api-gateway +[consul-api-gw-docs]:https://www.consul.io/docs/api-gateway [hashicorp]:https://www.hashicorp.com ### Istio From 0aa20bf7571ef08a5cc83eab0d826cc52715b442 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:04:09 -0400 Subject: [PATCH 16/61] spelling: encapsulated Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1016/index.md | 2 +- site-src/api-types/grpcroute.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/geps/gep-1016/index.md b/geps/gep-1016/index.md index afd96ef57d..8ce35205c0 100644 --- a/geps/gep-1016/index.md +++ b/geps/gep-1016/index.md @@ -50,7 +50,7 @@ lower layer protocol already exists. We propose the following criteria for such an addition. - Users of the encapsulated protocol would miss out on significant conventional features from their ecosystem if forced to route at a lower layer. -- Users of the enapsulated protocol would experience a degraded user experience if forced to route at a lower layer. +- Users of the encapsulated protocol would experience a degraded user experience if forced to route at a lower layer. - The encapsulated protocol has a significant user base, particularly in the Kubernetes community. gRPC meets _all_ of these criteria and is therefore, we contend, a strong diff --git a/site-src/api-types/grpcroute.md b/site-src/api-types/grpcroute.md index 560d7fe2ef..4e528bf783 100644 --- a/site-src/api-types/grpcroute.md +++ b/site-src/api-types/grpcroute.md @@ -33,7 +33,7 @@ level, it is acceptable to introduce a route resource at the higher layer when the following criteria are met: - Users of the encapsulated protocol would miss out on significant conventional features from their ecosystem if forced to route at a lower layer. -- Users of the enapsulated protocol would experience a degraded user experience if forced to route at a lower layer. +- Users of the encapsulated protocol would experience a degraded user experience if forced to route at a lower layer. - The encapsulated protocol has a significant user base, particularly in the Kubernetes community. gRPC meets all of these criteria, so the decision was made to include `GRPCRoute`in Gateway API. From f1a68bc155b389eacbb66b40d5a448552f1032ad Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:22:26 -0400 Subject: [PATCH 17/61] spelling: feature Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- conformance/utils/suite/suite_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conformance/utils/suite/suite_test.go b/conformance/utils/suite/suite_test.go index b94f879539..1a020c3475 100644 --- a/conformance/utils/suite/suite_test.go +++ b/conformance/utils/suite/suite_test.go @@ -181,7 +181,7 @@ func TestGetAPIVersionAndChannel(t *testing.T) { } const ( - coreFeature features.FeatureName = "coreFature" + coreFeature features.FeatureName = "coreFeature" extendedFeature features.FeatureName = "extendedFeature" testProfileName ConformanceProfileName = "testProfile" From fd0ab7e35e1bdc7d6dfdd5ab51e9877e30708663 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:04:49 -0400 Subject: [PATCH 18/61] spelling: filesystem Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- site-src/guides/grpc-routing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site-src/guides/grpc-routing.md b/site-src/guides/grpc-routing.md index acba8f1105..a0740e6e4a 100644 --- a/site-src/guides/grpc-routing.md +++ b/site-src/guides/grpc-routing.md @@ -69,7 +69,7 @@ missing or does not have the value `canary` then it will be forwarded to `bar-sv Reflection](https://github.com/grpc/grpc/blob/v1.49.1/doc/server-reflection.md) is required to use interactive clients such as [`grpcurl`](https://github.com/fullstorydev/grpcurl) without having a local copy -of the target service's protocol buffers present on your local filesysem. To +of the target service's protocol buffers present on your local filesystem. To enable this, first ensure that you have a gRPC reflection server listening on your application pods, then add the reflection method to your `GRPCRoute`. This is likely to be useful in development and staging environments, but this should From f791dbdc6891b8587cf4346a40923528eb985600 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:05:08 -0400 Subject: [PATCH 19/61] spelling: format Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1731/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1731/index.md b/geps/gep-1731/index.md index f7785e13d5..0eedeb3ddf 100644 --- a/geps/gep-1731/index.md +++ b/geps/gep-1731/index.md @@ -354,7 +354,7 @@ type HTTPRouteRetry struct { // +kubebuilder:validation:Maximum:=999 type HTTPRouteRetryStatusCode int -// Duration is a string value representing a duration in time. The foramat is +// Duration is a string value representing a duration in time. The format is // as specified in GEP-2257, a strict subset of the syntax parsed by Golang // time.ParseDuration. // From bdeb813fe56745f985d2c77a2efbd3ae4b52693e Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:43:28 -0400 Subject: [PATCH 20/61] spelling: frankbu Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1762/metadata.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1762/metadata.yaml b/geps/gep-1762/metadata.yaml index c38ad6a101..2f5677ef7d 100644 --- a/geps/gep-1762/metadata.yaml +++ b/geps/gep-1762/metadata.yaml @@ -5,7 +5,7 @@ name: In Cluster Gateway Deployments status: Standard authors: - howardjohn - - frakbu + - frankbu relationships: extendedBy: - number: 1867 From f88fa6d5710250b2e9a07562da8926f6990122b8 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:10:21 -0400 Subject: [PATCH 21/61] spelling: github Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- conformance/apis/v1/conformancereport.go | 4 ++-- conformance/reports/README.md | 2 +- geps/gep-1709/index.md | 4 ++-- geps/gep-1731/metadata.yaml | 4 ++-- geps/gep-2648/metadata.yaml | 4 ++-- geps/gep-2649/metadata.yaml | 2 +- geps/gep-2659/index.md | 2 +- geps/gep-696/metadata.yaml | 4 ++-- pkg/gep/gepdetail.go | 2 +- site-src/contributing/enhancement-requests.md | 2 +- site-src/faq.md | 4 ++-- site-src/guides/implementers.md | 2 +- 12 files changed, 18 insertions(+), 18 deletions(-) diff --git a/conformance/apis/v1/conformancereport.go b/conformance/apis/v1/conformancereport.go index 9eb23704fd..7f4f4d5325 100644 --- a/conformance/apis/v1/conformancereport.go +++ b/conformance/apis/v1/conformancereport.go @@ -76,10 +76,10 @@ type Implementation struct { // Contact is contact information for the maintainers so that Gateway API // maintainers can get ahold of them as needed. Ideally this should be - // Github usernames (in the form of `@`) or team names (in the + // GitHub usernames (in the form of `@`) or team names (in the // form of `@/`), but when that's not possible it can be email // addresses. - // Rather than Github usernames or email addresses you can provide a URL to the relevant + // Rather than GitHub usernames or email addresses you can provide a URL to the relevant // support pages for the project. Ideally this would be something like the issue creation page // on a repository, but for projects without a publicly exposed repository a general support // page URL can be provided. diff --git a/conformance/reports/README.md b/conformance/reports/README.md index 98e8ffc34a..241ffc9d66 100644 --- a/conformance/reports/README.md +++ b/conformance/reports/README.md @@ -110,7 +110,7 @@ comply with the following rules: - `contact`: it indicates the GitHub usernames of those who are responsible for maintaining this file, so they can be easily contacted when needed (e.g. for relevant release announcements regarding conformance, etc.). Optionally, it - can be an email address or a support URL (e.g. Github new issue page). + can be an email address or a support URL (e.g. GitHub new issue page). - `url`: it must be a valid url for a GitHub repository, or any other website with information related to the project. - `version`: it must be a snapshot of the project, which means it can be a commit, diff --git a/geps/gep-1709/index.md b/geps/gep-1709/index.md index 102a00b2ae..9914da2549 100644 --- a/geps/gep-1709/index.md +++ b/geps/gep-1709/index.md @@ -368,11 +368,11 @@ profiles: > theoretically have multiple projects and should submit separate reports for > each of them. -> **NOTE**: The `contact` field indicates the Github usernames or team +> **NOTE**: The `contact` field indicates the GitHub usernames or team > names of those who are responsible for maintaining this file, so they can be > easily contacted when needed (e.g. for relevant release announcements > regarding conformance, e.t.c.). Optionally, it can be an email address or -> a support URL (e.g. Github new issue page). +> a support URL (e.g. GitHub new issue page). The above report describes an implementation that just released `v1`, uses gateway API `v0.8.0` `experimental` channel, and has `HTTP` `core` and `extended` and `TCP` diff --git a/geps/gep-1731/metadata.yaml b/geps/gep-1731/metadata.yaml index beb073820f..9b8fee555a 100644 --- a/geps/gep-1731/metadata.yaml +++ b/geps/gep-1731/metadata.yaml @@ -4,7 +4,7 @@ number: 1731 name: HTTPRoute Retries status: Experimental # Any authors who contribute to the GEP in any way should be listed here using -# their Github handle. +# their GitHub handle. authors: - mikemorris relationships: @@ -28,7 +28,7 @@ relationships: name: HTTPRoute Timeouts description: Covers some overlapping considerations around when requests should be retried. # references is a list of hyperlinks to relevant external references. -# It's intended to be used for storing Github discussions, Google docs, etc. +# It's intended to be used for storing GitHub discussions, Google docs, etc. references: - https://www.rfc-editor.org/rfc/rfc9110 - https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml diff --git a/geps/gep-2648/metadata.yaml b/geps/gep-2648/metadata.yaml index fe9fe84336..7e9b54a867 100644 --- a/geps/gep-2648/metadata.yaml +++ b/geps/gep-2648/metadata.yaml @@ -4,7 +4,7 @@ number: 2648 name: Direct Policy Attachment status: Provisional # Any authors who contribute to the GEP in any way should be listed here using -# their Github handle. +# their GitHub handle. authors: - youngnick - robscott @@ -14,7 +14,7 @@ relationships: number: 713 description: Split out Direct Policy Attachment into its own GEP # references is a list of hyperlinks to relevant external references. -# It's intended to be used for storing Github discussions, Google docs, etc. +# It's intended to be used for storing GitHub discussions, Google docs, etc. references: - "https://github.com/kubernetes-sigs/gateway-api/discussions/2927" # changelog is a list of hyperlinks to PRs that make changes to the GEP, in diff --git a/geps/gep-2649/metadata.yaml b/geps/gep-2649/metadata.yaml index b6eda3b455..403a0c72ec 100644 --- a/geps/gep-2649/metadata.yaml +++ b/geps/gep-2649/metadata.yaml @@ -12,7 +12,7 @@ relationships: number: 713 description: Split out Inherited Policy Attachment # references is a list of hyperlinks to relevant external references. -# It's intended to be used for storing Github discussions, Google docs, etc. +# It's intended to be used for storing GitHub discussions, Google docs, etc. references: - "https://github.com/kubernetes-sigs/gateway-api/discussions/2927" # changelog is a list of hyperlinks to PRs that make changes to the GEP, in diff --git a/geps/gep-2659/index.md b/geps/gep-2659/index.md index b2838a7caf..57fbd19890 100644 --- a/geps/gep-2659/index.md +++ b/geps/gep-2659/index.md @@ -127,7 +127,7 @@ relationships: # covered by an existing relationship. seeAlso: {} # references is a list of hyperlinks to relevant external references. -# It's intended to be used for storing Github discussions, Google docs, etc. +# It's intended to be used for storing GitHub discussions, Google docs, etc. references: {} # featureNames is a list of the feature names introduced by the GEP, if there # are any. This will allow us to track which feature was introduced by which GEP. diff --git a/geps/gep-696/metadata.yaml b/geps/gep-696/metadata.yaml index efcc0d2f03..6bc1cfeb5a 100644 --- a/geps/gep-696/metadata.yaml +++ b/geps/gep-696/metadata.yaml @@ -4,7 +4,7 @@ number: 696 name: GEP template status: Completed # Any authors who contribute to the GEP in any way should be listed here using -# their Github handle. +# their GitHub handle. authors: - bowei - robscott @@ -25,7 +25,7 @@ relationships: # covered by an existing relationship. seeAlso: {} # references is a list of hyperlinks to relevant external references. -# It's intended to be used for storing Github discussions, Google docs, etc. +# It's intended to be used for storing GitHub discussions, Google docs, etc. references: {} # featureNames is a list of the feature names introduced by the GEP, if there # are any. This will allow us to track which feature was introduced by which GEP. diff --git a/pkg/gep/gepdetail.go b/pkg/gep/gepdetail.go index dd79302971..a8c2d1c714 100644 --- a/pkg/gep/gepdetail.go +++ b/pkg/gep/gepdetail.go @@ -56,7 +56,7 @@ type GEPDetail struct { // Valid values are provided in the constants for the GEPStatus type. Status GEPStatus `json:"status"` - // The GEP's authors, listed as their Github handles. + // The GEP's authors, listed as their GitHub handles. Authors []string `json:"authors"` // Relationships describes the possible relationships between this GEP and diff --git a/site-src/contributing/enhancement-requests.md b/site-src/contributing/enhancement-requests.md index de693a5e14..6244e8c788 100644 --- a/site-src/contributing/enhancement-requests.md +++ b/site-src/contributing/enhancement-requests.md @@ -41,7 +41,7 @@ request for enhancement if that enhancement is non-trivial (which we will define as either: _implicates changes to the API specification_ OR _has some kind of end-user impact_). -Please use our [Github Discussions][discussion] forum as the initial place to +Please use our [GitHub Discussions][discussion] forum as the initial place to start, and feel free to bring that discussion up for synchronous conversation in one of our [community meetings][meetings]. If the created request doesn't include reference to a discussion and/or recordings of discussion in our diff --git a/site-src/faq.md b/site-src/faq.md index fa8b72a27e..4610d7d962 100644 --- a/site-src/faq.md +++ b/site-src/faq.md @@ -41,8 +41,8 @@ using an explicit object reference. to use. #### Where can I find Gateway API releases? -Gateway API releases are tags of the [Github -repository](https://github.com/kubernetes-sigs/gateway-api). The [Github +Gateway API releases are tags of the [GitHub +repository](https://github.com/kubernetes-sigs/gateway-api). The [GitHub releases](https://github.com/kubernetes-sigs/gateway-api/releases) page shows all the releases. diff --git a/site-src/guides/implementers.md b/site-src/guides/implementers.md index eed5e62ead..1c82a8eeaf 100644 --- a/site-src/guides/implementers.md +++ b/site-src/guides/implementers.md @@ -101,7 +101,7 @@ Gateway API conformance is version-specific. An implementation that passes conformance for version N may not pass conformance for version N+1 without changes. Implementations SHOULD submit a report from the conformance testing suite back -to the Gateway API Github repo containing details of their testing. +to the Gateway API GitHub repo containing details of their testing. The conformance suite output includes the Gateway API version supported. From d996a814e6cfef2894c9635dc18cda0bcb4f490f Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:25:04 -0400 Subject: [PATCH 22/61] spelling: grpc Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1911/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1911/index.md b/geps/gep-1911/index.md index ed25229444..cdcd8a2803 100644 --- a/geps/gep-1911/index.md +++ b/geps/gep-1911/index.md @@ -116,7 +116,7 @@ This was dropped in favour of supporting Kubernetes Standard Application Protoco ### Multiple Protocol Meta-resources Rather than bundle protocol details into a single resource an alternative would be to create distinct meta resources. -ie. `HTTP2Backend`, `GPRCBackend`, `WebsocketBackend`. +ie. `HTTP2Backend`, `GRPCBackend`, `WebsocketBackend`. The advantages of this approach are: From f0ffbb75cc52d1b39e7275878ea4ec2062feb6e8 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:45:04 -0400 Subject: [PATCH 23/61] spelling: grpcroute Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- site-src/api-types/grpcroute.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site-src/api-types/grpcroute.md b/site-src/api-types/grpcroute.md index 4e528bf783..d18ce92398 100644 --- a/site-src/api-types/grpcroute.md +++ b/site-src/api-types/grpcroute.md @@ -272,7 +272,7 @@ Multiple GRPCRoutes can be attached to a single Gateway resource. Importantly, only one Route rule may match each request. For more information on how conflict resolution applies to merging, refer to the [API specification][grpcrouterule]. -[grpcroute]: /reference/spec/#gateway.networking.k8s.io/v1.GRPCPRoute +[grpcroute]: /reference/spec/#gateway.networking.k8s.io/v1.GRPCRoute [grpcrouterule]: /reference/spec/#gateway.networking.k8s.io/v1.GRPCRouteRule [hostname]: /reference/spec/#gateway.networking.k8s.io/v1.Hostname [rfc-3986]: https://tools.ietf.org/html/rfc3986 From bd52f921ea447acf779b95ec36a9a75dc83e5189 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:08:23 -0400 Subject: [PATCH 24/61] spelling: has Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- site-src/blog/2023/0829-mesh-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site-src/blog/2023/0829-mesh-support.md b/site-src/blog/2023/0829-mesh-support.md index 3b8b7741ae..14b5f101de 100644 --- a/site-src/blog/2023/0829-mesh-support.md +++ b/site-src/blog/2023/0829-mesh-support.md @@ -1,7 +1,7 @@ --- description: > We are excited to announce the v0.8.0 release of Gateway API, where service - mesh support has has now reached Experimental status, we've introduced CEL + mesh support has now reached Experimental status, we've introduced CEL validation and a Mesh conformance profile, and more! --- From 341db08f44b6b1280eb12531d2a16402d70024db Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:27:24 -0400 Subject: [PATCH 25/61] spelling: have Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- CHANGELOG/0.x-CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG/0.x-CHANGELOG.md b/CHANGELOG/0.x-CHANGELOG.md index 88c87dd7fc..e4186a7f8a 100644 --- a/CHANGELOG/0.x-CHANGELOG.md +++ b/CHANGELOG/0.x-CHANGELOG.md @@ -1089,7 +1089,7 @@ In this release, we've made two release channels available, `experimental` and `standard`. The `experimental` channel contains all resources and fields, while `standard` -contains only resources that mave moved to beta status. +contains only resources that have moved to beta status. We've also added a way to flag particular fields within a resource as experimental, and any fields marked in this way are only present in the @@ -1274,7 +1274,7 @@ In this release, we've made two release channels available, `experimental` and `standard`. The `experimental` channel contains all resources and fields, while `standard` -contains only resources that mave moved to beta status. +contains only resources that have moved to beta status. We've also added a way to flag particular fields within a resource as experimental, and any fields marked in this way are only present in the From 771f5427a737eaccc8cf2e2655d4852b35635225 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:46:57 -0400 Subject: [PATCH 26/61] spelling: http-route Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1731/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/geps/gep-1731/index.md b/geps/gep-1731/index.md index 0eedeb3ddf..91231cdc35 100644 --- a/geps/gep-1731/index.md +++ b/geps/gep-1731/index.md @@ -391,21 +391,21 @@ Basic support for configuring retries in HTTPRoute up to a specified maximum cou Retrying requests based on HTTP status codes will be gated under the following features: -* `SupportHTTPRRouteRetryBackendTimeout` +* `SupportHTTPRouteRetryBackendTimeout` * Will test that backend requests that exceed a BackendRequest timeout duration are retried if a `retry` stanza is configured. -* `SupportHTTPRRouteRetryBackoff` +* `SupportHTTPRouteRetryBackoff` * Backoff will only be tested that a retry does not start before the duration specified for conformance, not that the backoff duration is precise. * Not currently supportable by NGINX or HAProxy. -* `SupportHTTPRRouteRetryCodes` +* `SupportHTTPRouteRetryCodes` * Only 500, 502, 503 and 504 will be tested for conformance. * Traefik does not seem to support specifying error codes, and will only retry on backend timeouts. -* `SupportHTTPRRouteRetryConnectionError` +* `SupportHTTPRouteRetryConnectionError` * Will test that connections interrupted by a TCP failure, disconnect or reset are retried if a `retry` stanza is configured. From c70af0a3237c6b5b6ed0be17a57fef213e0b73aa Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:45:58 -0400 Subject: [PATCH 27/61] spelling: httpproxy Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1282/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1282/index.md b/geps/gep-1282/index.md index c8a54f74a1..dead0babfa 100644 --- a/geps/gep-1282/index.md +++ b/geps/gep-1282/index.md @@ -53,7 +53,7 @@ We've got the following feature requests and discussions in the Gateway API repo - [#1285](https://github.com/kubernetes-sigs/gateway-api/discussions/1285) has a more specific discussion about how different ingress implementations allow this to be configured today, whether that's with the Ingress resource or their own custom one. The great roundup that Candace did is reproduced in the next few bullet points. * Istio uses a [DestinationRule resource with ClientTLSSettings](https://istio.io/latest/docs/reference/config/networking/destination-rule/#ClientTLSSettings) to capture TLS details, and the DestinationRule resource also holds traffic policy information like load balancing algorithm, connection pool size, and so on. * Openshift’s Route resource allows the [configuration of reencryption](https://docs.openshift.com/container-platform/4.10/networking/routes/secured-routes.html#nw-ingress-creating-a-reencrypt-route-with-a-custom-certificate_secured-routes) specifically, along with custom certificate details. - * Contour’s HTTPProxy captures TLS details using an Envoy client certificate, destination CA certificate, and optional SubjectName which sets what Envoy should expect to see from the backend service, all inside the HTTPProxy resource. It also requires either a Protocol field inside the HTTProxy, or an annotation on the Service that tells Contour that the service expects TLS. This is [all documented](https://projectcontour.io/docs/v1.21.1/config/upstream-tls/), but I should note that Contour’s docs use the Envoy convention where a backend in Gateway parlance is called an Upstream (which may be confusing if you’re not used to it). + * Contour’s HTTPProxy captures TLS details using an Envoy client certificate, destination CA certificate, and optional SubjectName which sets what Envoy should expect to see from the backend service, all inside the HTTPProxy resource. It also requires either a Protocol field inside the HTTPProxy, or an annotation on the Service that tells Contour that the service expects TLS. This is [all documented](https://projectcontour.io/docs/v1.21.1/config/upstream-tls/), but I should note that Contour’s docs use the Envoy convention where a backend in Gateway parlance is called an Upstream (which may be confusing if you’re not used to it). * Linkerd uses a [Server resource](https://linkerd.io/2.11/reference/authorization-policy/#server) (which is functionally pretty similar to Service in that it associates a name with a Pod selector, but also has other details like if the service supports Proxy protocol), along with a ServerAuthorization resource that specifies some constructs that sit more at the service mesh level, including identity and access control. In terms of other implementations existing use cases for features like this: From ae52a6bdc35d4c5aa81cf762e3fb96429ba27b23 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:37:48 -0400 Subject: [PATCH 28/61] spelling: httpredirect Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- ...tredirect-hostname.yaml => invalid-httpredirect-hostname.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename hack/invalid-examples/standard/httproute/{invalid-httredirect-hostname.yaml => invalid-httpredirect-hostname.yaml} (100%) diff --git a/hack/invalid-examples/standard/httproute/invalid-httredirect-hostname.yaml b/hack/invalid-examples/standard/httproute/invalid-httpredirect-hostname.yaml similarity index 100% rename from hack/invalid-examples/standard/httproute/invalid-httredirect-hostname.yaml rename to hack/invalid-examples/standard/httproute/invalid-httpredirect-hostname.yaml From 6d6f2a41761150faf375472283fb1629fe1e8aff Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:07:39 -0400 Subject: [PATCH 29/61] spelling: https Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- conformance/echo-basic/grpc/grpc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conformance/echo-basic/grpc/grpc.go b/conformance/echo-basic/grpc/grpc.go index ffb55189b9..e2f1b88ab8 100644 --- a/conformance/echo-basic/grpc/grpc.go +++ b/conformance/echo-basic/grpc/grpc.go @@ -55,7 +55,7 @@ type serverConfig struct { // Controlled by TLS_SERVER_PRIVKEY env var TLSServerPrivKey string - // Controlled by HTPPS_PORT env var + // Controlled by HTTPS_PORT env var HTTPSPort int } From c294db456e01561ef4b09550580696d37a037890 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:47:14 -0400 Subject: [PATCH 30/61] spelling: implementation Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE.md b/RELEASE.md index 307f33f519..d72758367e 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -70,7 +70,7 @@ The following steps must be done by one of the [Gateway API maintainers][gateway - Run the `make build-install-yaml` command which will generate install files in the `release/` directory. Attach these files to the GitHub release. - Update the `README.md` and `site-src/guides/index.md` files to point links and examples to the new release. -- Update the implementation table path (`nav.Implementations.Comparison`) in the nav of `mkdocs.yml` to point to the latest release file (for example Implementation Comparison points to `implmenetation-table-v1.2.0.md`). Add the now past version under `Past Version Comparisons`, and edit the text blurb in `mkdocs-generate-conformance.py` to also reflect the added past version. +- Update the implementation table path (`nav.Implementations.Comparison`) in the nav of `mkdocs.yml` to point to the latest release file (for example Implementation Comparison points to `implementation-table-v1.2.0.md`). Add the now past version under `Past Version Comparisons`, and edit the text blurb in `mkdocs-generate-conformance.py` to also reflect the added past version. #### For an **RC** release: - Update `pkg/consts/consts.go` with the new semver tag (like `v1.2.0-rc1`) and any updates to the API review URL. From ff59babe7a7abdd70c9bf3bb159ed4461a4573a3 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:47:19 -0400 Subject: [PATCH 31/61] spelling: improvements Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- CHANGELOG/1.2-TEAM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG/1.2-TEAM.md b/CHANGELOG/1.2-TEAM.md index f52ba70025..ebd6283ded 100644 --- a/CHANGELOG/1.2-TEAM.md +++ b/CHANGELOG/1.2-TEAM.md @@ -7,7 +7,7 @@ | BackendProtocol Support | @dprotaso | | HTTPRoute Retries | @mikemorris | | Percentage-based request mirroring | @jakebennert | -| Backend TLS Config improvments | @mkosieradzki, @LiorLieberman | +| Backend TLS Config improvements | @mkosieradzki, @LiorLieberman | | Named Route Rules | @guicassolato, @howardjohn | | Conformance Profiles and Reports | @mlavacca, @shaneutt, @xtineskim | | Gateway API Maintainers | @mlavacca, @robscott, @shaneutt, @youngnick | From d9ef37e15ed713744eb32100a04a1bd37d226b2b Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:28:47 -0400 Subject: [PATCH 32/61] spelling: in Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-724/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-724/index.md b/geps/gep-724/index.md index bb1e9854f9..5fdd108f8b 100644 --- a/geps/gep-724/index.md +++ b/geps/gep-724/index.md @@ -618,7 +618,7 @@ bar namespace. Unfortunately that would be very difficult to recreate with ReferenceGrant. ReferenceGrant is fundamentally about trusting references from resource of kind -Foo in to resources of kind Bar. Names and section names are intentionally +Foo in resources of kind Bar. Names and section names are intentionally excluded. If we added both of those concepts to ReferenceGrant, this would be possible, but quite complex and verbose. This is what the example from above would look like with this approach: From 506eab3d1fc6e5817ee5d8eff3e543ae82a730cc Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:26:08 -0400 Subject: [PATCH 33/61] spelling: infrastructure Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- pkg/features/gateway.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/features/gateway.go b/pkg/features/gateway.go index a90a32a4b3..7fc1a20db0 100644 --- a/pkg/features/gateway.go +++ b/pkg/features/gateway.go @@ -58,7 +58,7 @@ const ( SupportGatewayHTTPListenerIsolation FeatureName = "GatewayHTTPListenerIsolation" // SupportGatewayInfrastructureAnnotations option indicates support for - // spec.infrastructure.annotations and spec.infrastrucutre.labels + // spec.infrastructure.annotations and spec.infrastructure.labels SupportGatewayInfrastructurePropagation FeatureName = "GatewayInfrastructurePropagation" ) From 847382929fbbb223f8792306a057770e2d0ab1c1 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:16:46 -0400 Subject: [PATCH 34/61] spelling: into Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1364/index.md | 2 +- geps/gep-1619/index.md | 2 +- geps/gep-713/index.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/geps/gep-1364/index.md b/geps/gep-1364/index.md index 5afa356347..0ff89c5007 100644 --- a/geps/gep-1364/index.md +++ b/geps/gep-1364/index.md @@ -418,7 +418,7 @@ For many implementations (certainly for Envoy-based ones), getting this informat correctly and avoiding races on applying it is surprisingly difficult. For this reason, this GEP proposes that we exclude the `Ready` condition from Core -conformance, and make it a feature that implementations may opt in to - making it +conformance, and make it a feature that implementations may opt into - making it an Extended condition. It will have the following behavior: diff --git a/geps/gep-1619/index.md b/geps/gep-1619/index.md index 12316812e7..a1e41138f2 100644 --- a/geps/gep-1619/index.md +++ b/geps/gep-1619/index.md @@ -1069,7 +1069,7 @@ TODO ### Open Questions - What happens when session persistence causes traffic splitting scenarios to overload a backend? -- Should we add status somewhere when a user gets in to a "risky" configuration with session persistence? +- Should we add status somewhere when a user gets into a "risky" configuration with session persistence? - Should there be an API configuration field that specifies how already established sessions are handled? - How do implementations drain established sessions during backend upgrades without disruption? - Do we need a "session draining timeout" as documented by [A55: xDS-Based Stateful Session Affinity for Proxyless gRPC](https://github.com/grpc/proposal/blob/master/A55-xds-stateful-session-affinity.md#background) diff --git a/geps/gep-713/index.md b/geps/gep-713/index.md index f6b51e7c4c..fe0a6455a0 100644 --- a/geps/gep-713/index.md +++ b/geps/gep-713/index.md @@ -786,7 +786,7 @@ This solution: - is low cost in terms of apiserver updates (because it's only on the GatewayClass, and only on implementation startup) - provides a standard place for all users to look for relevant objects -- ties in to the Conformance Profiles design and other efforts about GatewayClass +- ties into the Conformance Profiles design and other efforts about GatewayClass status #### Standard status stanza From 0b7960862f2bd79277fdcec97c96bced37de9b82 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:47:24 -0400 Subject: [PATCH 35/61] spelling: intuitive Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-957/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-957/index.md b/geps/gep-957/index.md index f4de43e304..577076a16d 100644 --- a/geps/gep-957/index.md +++ b/geps/gep-957/index.md @@ -120,7 +120,7 @@ spec: Port matching can be supported if SectionName accepts port numbers in addition to listener names. This approach results in a less explicit API when a ParentRef points to a resource that is not `Gateway`. For example, an implementation may -attach a route to an `Mesh` CRD. In this case, it's less inituitive to set +attach a route to an `Mesh` CRD. In this case, it's less intuitive to set `ParentRef.SectionName` to `443` to express `route all traffic whose destination port is 443 to ...`. It also complicates the validation on SectionName in order to differentiate between a listener name and a port number. From f80438f73e68ec7590e50039ea84309eacfcebdb Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:10:56 -0400 Subject: [PATCH 36/61] spelling: its Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1709/index.md | 2 +- geps/gep-1911/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/geps/gep-1709/index.md b/geps/gep-1709/index.md index 9914da2549..c145975277 100644 --- a/geps/gep-1709/index.md +++ b/geps/gep-1709/index.md @@ -358,7 +358,7 @@ profiles: > **WARNING**: It is an important clarification that this is NOT a full > Kubernetes API. It uses `TypeMeta` for some fields that made sense to re-use -> and were familiar, but otherwise has it's own structure. It is not a [Custom +> and were familiar, but otherwise has its own structure. It is not a [Custom > Resource Definition (CRD)][crd] nor will it be made available along with our > CRDs. It will be used only by conformance test tooling. diff --git a/geps/gep-1911/index.md b/geps/gep-1911/index.md index cdcd8a2803..d0db118a75 100644 --- a/geps/gep-1911/index.md +++ b/geps/gep-1911/index.md @@ -48,7 +48,7 @@ At the moment there exists three defined constants: ### New Protocols & Reserved Prefix -To add support for a new protocol it should first become a Kubernetes Standard Application Protocol by updating the [KEP-3726][kep-3726]. [KEP-3726][kep-3726] also states the `appProtocol` field accepts a domain-prefixed implementation specific value. Thus, if the suggested protocol is not suited to have a `kubernetes.io/*` prefix, then the Gateway API MAY support the new protocol using it's own prefix `gateway.networking.k8s.io/*`. Please make a PR to this GEP. +To add support for a new protocol it should first become a Kubernetes Standard Application Protocol by updating the [KEP-3726][kep-3726]. [KEP-3726][kep-3726] also states the `appProtocol` field accepts a domain-prefixed implementation specific value. Thus, if the suggested protocol is not suited to have a `kubernetes.io/*` prefix, then the Gateway API MAY support the new protocol using its own prefix `gateway.networking.k8s.io/*`. Please make a PR to this GEP. For example we may want to add a sentinel `appProtocol` value that prevents Gateway implementations from discovering the protocol of the application. Instead they should just refer to the Service's `protocol` field. Such a constant was rejected upstream (https://github.com/kubernetes/enhancements/pull/4106) but as an example it could be defined in a future addition to this GEP as `gateway.networking.k8s.io/no-sniff`. From dd6ea6c475ec2eff3e8aa60fc083456f6996cc19 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:47:51 -0400 Subject: [PATCH 37/61] spelling: linked Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1731/metadata.yaml | 2 +- geps/gep-2659/index.md | 2 +- geps/gep-696/metadata.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/geps/gep-1731/metadata.yaml b/geps/gep-1731/metadata.yaml index 9b8fee555a..0d183dc274 100644 --- a/geps/gep-1731/metadata.yaml +++ b/geps/gep-1731/metadata.yaml @@ -13,7 +13,7 @@ relationships: # set back to this GEP, and MUST be moved to Declined. obsoletes: {} obsoletedBy: {} - # extends indicates that a GEP extends the linkned GEP, adding more detail + # extends indicates that a GEP extends the linked GEP, adding more detail # or additional implementation. The extended GEP MUST have its extendedBy # field set back to this GEP. extends: {} diff --git a/geps/gep-2659/index.md b/geps/gep-2659/index.md index 57fbd19890..1ea2d7b9a0 100644 --- a/geps/gep-2659/index.md +++ b/geps/gep-2659/index.md @@ -118,7 +118,7 @@ relationships: # set back to this GEP, and MUST be moved to Declined. obsoletes: {} obsoletedBy: {} - # extends indicates that a GEP extends the linkned GEP, adding more detail + # extends indicates that a GEP extends the linked GEP, adding more detail # or additional implementation. The extended GEP MUST have its extendedBy # field set back to this GEP. extends: {} diff --git a/geps/gep-696/metadata.yaml b/geps/gep-696/metadata.yaml index 6bc1cfeb5a..cd15a89cd4 100644 --- a/geps/gep-696/metadata.yaml +++ b/geps/gep-696/metadata.yaml @@ -16,7 +16,7 @@ relationships: # set back to this GEP, and MUST be moved to Declined. obsoletes: {} obsoletedBy: {} - # extends indicates that a GEP extends the linkned GEP, adding more detail + # extends indicates that a GEP extends the linked GEP, adding more detail # or additional implementation. The extended GEP MUST have its extendedBy # field set back to this GEP. extends: {} From f2b2f1557d550998067f21ea33fa34dbaef6cf3e Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:48:03 -0400 Subject: [PATCH 38/61] spelling: maintainers Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-2659/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-2659/index.md b/geps/gep-2659/index.md index 1ea2d7b9a0..3e11ff071a 100644 --- a/geps/gep-2659/index.md +++ b/geps/gep-2659/index.md @@ -87,7 +87,7 @@ Memorandum GEPs after this GEP is merged. ### Addition of YAML metadata file -The core Gateway API mainatainers were hoping not to need metadata YAMLs for a +The core Gateway API maintainers were hoping not to need metadata YAMLs for a while, but the addition of relationships has turbocharged the need for machine parseable GEP metadata. From 96373b809638b199e10bc8abb574713016c67597 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:48:07 -0400 Subject: [PATCH 39/61] spelling: maintenance Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1686/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1686/index.md b/geps/gep-1686/index.md index d80bdfa042..bc903efc94 100644 --- a/geps/gep-1686/index.md +++ b/geps/gep-1686/index.md @@ -25,7 +25,7 @@ GAMMA intends to introduce a "Mesh" [conformance profile](https://gateway-api.si This approach will enable service meshes to certify that an implementation follows the GAMMA spec without requiring a North/South implementation, and importantly avoid any expectation that North/South Gateway API implementations expand their scope to understand GAMMA and E/W traffic flows. -Leveraging existing tests for common functionality between N/S and E/W implementations will both ensure consistency across Gateway API implementations and help limit the maintence burden for the conformance testing suite. +Leveraging existing tests for common functionality between N/S and E/W implementations will both ensure consistency across Gateway API implementations and help limit the maintenance burden for the conformance testing suite. ### Support Levels From d71825baf597b3b692bbe19e74c93bddafaa0590 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:48:17 -0400 Subject: [PATCH 40/61] spelling: maximum Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1731/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-1731/index.md b/geps/gep-1731/index.md index 91231cdc35..cb479ed126 100644 --- a/geps/gep-1731/index.md +++ b/geps/gep-1731/index.md @@ -272,7 +272,7 @@ type HTTPRouteRetry struct { // Codes []HTTPRouteRetryStatusCode `json:"codes,omitempty"` - // Attempts specifies the maxmimum number of times an individual request + // Attempts specifies the maximum number of times an individual request // from the gateway to a backend should be retried. // // If the maximum number of retries has been attempted without a successful From 264f5a2d5ad9c3b87822509c9d1843e2acdb5498 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:30:17 -0400 Subject: [PATCH 41/61] spelling: negotiated Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- conformance/echo-basic/grpcecho.proto | 4 ++-- conformance/echo-basic/grpcechoserver/grpcecho.pb.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conformance/echo-basic/grpcecho.proto b/conformance/echo-basic/grpcecho.proto index 86c3fe6aed..df744e5b12 100644 --- a/conformance/echo-basic/grpcecho.proto +++ b/conformance/echo-basic/grpcecho.proto @@ -46,13 +46,13 @@ message TLSAssertions { // The TLS version used by the connection, e.g. "TLSv1.3" string version = 1; - // The negotatiated protocol. + // The negotiated protocol. string negotiated_protocol = 2; // The server name indication extension sent by the client. string server_name = 3; - // The cipher suite negotatiated for the connection, e.g. "TLS_EDCHE_ECDSA_WITH_AES_128_GCM_SHA256" + // The cipher suite negotiated for the connection, e.g. "TLS_EDCHE_ECDSA_WITH_AES_128_GCM_SHA256" string cipher_suite = 4; // The parsed certificates sent by the peer, in the order in which they were sent. diff --git a/conformance/echo-basic/grpcechoserver/grpcecho.pb.go b/conformance/echo-basic/grpcechoserver/grpcecho.pb.go index 9585b7760b..88207f3fe4 100644 --- a/conformance/echo-basic/grpcechoserver/grpcecho.pb.go +++ b/conformance/echo-basic/grpcechoserver/grpcecho.pb.go @@ -177,11 +177,11 @@ type TLSAssertions struct { // The TLS version used by the connection, e.g. "TLSv1.3" Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - // The negotatiated protocol. + // The negotiated protocol. NegotiatedProtocol string `protobuf:"bytes,2,opt,name=negotiated_protocol,json=negotiatedProtocol,proto3" json:"negotiated_protocol,omitempty"` // The server name indication extension sent by the client. ServerName string `protobuf:"bytes,3,opt,name=server_name,json=serverName,proto3" json:"server_name,omitempty"` - // The cipher suite negotatiated for the connection, e.g. "TLS_EDCHE_ECDSA_WITH_AES_128_GCM_SHA256" + // The cipher suite negotiated for the connection, e.g. "TLS_EDCHE_ECDSA_WITH_AES_128_GCM_SHA256" CipherSuite string `protobuf:"bytes,4,opt,name=cipher_suite,json=cipherSuite,proto3" json:"cipher_suite,omitempty"` // The parsed certificates sent by the peer, in the order in which they were sent. PeerCertificates []string `protobuf:"bytes,5,rep,name=peer_certificates,json=peerCertificates,proto3" json:"peer_certificates,omitempty"` From 84d09b1325efe1734e8e27d0eaf44974fbe0cdd5 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:30:37 -0400 Subject: [PATCH 42/61] spelling: networking Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-713/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-713/index.md b/geps/gep-713/index.md index fe0a6455a0..be5cbd56b3 100644 --- a/geps/gep-713/index.md +++ b/geps/gep-713/index.md @@ -868,7 +868,7 @@ contains `status` information. ```yaml kind: EffectivePolicy -apiVersion: gateway.networkking.k8s.io/v1alpha2 +apiVersion: gateway.networking.k8s.io/v1alpha2 metadata: name: targeted-object namespace: targeted-object-namespace From fc1f2e12353b6ee3c94c27723ce1ad9216a67439 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:10:38 -0400 Subject: [PATCH 43/61] spelling: nonexistent Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- apis/v1/shared_types.go | 2 +- apis/v1alpha2/tcproute_types.go | 2 +- apis/v1alpha2/tlsroute_types.go | 2 +- apis/v1alpha2/udproute_types.go | 2 +- .../gateway.networking.k8s.io_grpcroutes.yaml | 2 +- .../gateway.networking.k8s.io_httproutes.yaml | 4 ++-- .../gateway.networking.k8s.io_tcproutes.yaml | 4 ++-- .../gateway.networking.k8s.io_tlsroutes.yaml | 4 ++-- .../gateway.networking.k8s.io_udproutes.yaml | 4 ++-- .../gateway.networking.k8s.io_grpcroutes.yaml | 2 +- .../gateway.networking.k8s.io_httproutes.yaml | 4 ++-- geps/gep-1016/index.md | 2 +- geps/gep-1364/index.md | 12 ++++++------ 13 files changed, 23 insertions(+), 23 deletions(-) diff --git a/apis/v1/shared_types.go b/apis/v1/shared_types.go index cebd836f9f..ea581ee22f 100644 --- a/apis/v1/shared_types.go +++ b/apis/v1/shared_types.go @@ -469,7 +469,7 @@ type RouteParentStatus struct { // There are a number of cases where the "Accepted" condition may not be set // due to lack of controller visibility, that includes when: // - // * The Route refers to a non-existent parent. + // * The Route refers to a nonexistent parent. // * The Route is of a type that the controller does not support. // * The Route is in a namespace the controller does not have access to. // diff --git a/apis/v1alpha2/tcproute_types.go b/apis/v1alpha2/tcproute_types.go index b79253dd33..e383af495d 100644 --- a/apis/v1alpha2/tcproute_types.go +++ b/apis/v1alpha2/tcproute_types.go @@ -67,7 +67,7 @@ type TCPRouteRule struct { Name *SectionName `json:"name,omitempty"` // BackendRefs defines the backend(s) where matching requests should be - // sent. If unspecified or invalid (refers to a non-existent resource or a + // sent. If unspecified or invalid (refers to a nonexistent resource or a // Service with no endpoints), the underlying implementation MUST actively // reject connection attempts to this backend. Connection rejections must // respect weight; if an invalid backend is requested to have 80% of diff --git a/apis/v1alpha2/tlsroute_types.go b/apis/v1alpha2/tlsroute_types.go index 26dfde77c7..f21fe3fc50 100644 --- a/apis/v1alpha2/tlsroute_types.go +++ b/apis/v1alpha2/tlsroute_types.go @@ -108,7 +108,7 @@ type TLSRouteRule struct { Name *SectionName `json:"name,omitempty"` // BackendRefs defines the backend(s) where matching requests should be - // sent. If unspecified or invalid (refers to a non-existent resource or + // sent. If unspecified or invalid (refers to a nonexistent resource or // a Service with no endpoints), the rule performs no forwarding; if no // filters are specified that would result in a response being sent, the // underlying implementation must actively reject request attempts to this diff --git a/apis/v1alpha2/udproute_types.go b/apis/v1alpha2/udproute_types.go index 9e7fe3ff80..c7e92b92b4 100644 --- a/apis/v1alpha2/udproute_types.go +++ b/apis/v1alpha2/udproute_types.go @@ -67,7 +67,7 @@ type UDPRouteRule struct { Name *SectionName `json:"name,omitempty"` // BackendRefs defines the backend(s) where matching requests should be - // sent. If unspecified or invalid (refers to a non-existent resource or a + // sent. If unspecified or invalid (refers to a nonexistent resource or a // Service with no endpoints), the underlying implementation MUST actively // reject connection attempts to this backend. Packet drops must // respect weight; if an invalid backend is requested to have 80% of diff --git a/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml index a8df1d9d5e..67398a0a07 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml @@ -1992,7 +1992,7 @@ spec: There are a number of cases where the "Accepted" condition may not be set due to lack of controller visibility, that includes when: - * The Route refers to a non-existent parent. + * The Route refers to a nonexistent parent. * The Route is of a type that the controller does not support. * The Route is in a namespace the controller does not have access to. items: diff --git a/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml index 4088c596cb..25ad33e603 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml @@ -2848,7 +2848,7 @@ spec: There are a number of cases where the "Accepted" condition may not be set due to lack of controller visibility, that includes when: - * The Route refers to a non-existent parent. + * The Route refers to a nonexistent parent. * The Route is of a type that the controller does not support. * The Route is in a namespace the controller does not have access to. items: @@ -5914,7 +5914,7 @@ spec: There are a number of cases where the "Accepted" condition may not be set due to lack of controller visibility, that includes when: - * The Route refers to a non-existent parent. + * The Route refers to a nonexistent parent. * The Route is of a type that the controller does not support. * The Route is in a namespace the controller does not have access to. items: diff --git a/config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml index b37d6641f4..0b18d4f99d 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml @@ -300,7 +300,7 @@ spec: backendRefs: description: |- BackendRefs defines the backend(s) where matching requests should be - sent. If unspecified or invalid (refers to a non-existent resource or a + sent. If unspecified or invalid (refers to a nonexistent resource or a Service with no endpoints), the underlying implementation MUST actively reject connection attempts to this backend. Connection rejections must respect weight; if an invalid backend is requested to have 80% of @@ -497,7 +497,7 @@ spec: There are a number of cases where the "Accepted" condition may not be set due to lack of controller visibility, that includes when: - * The Route refers to a non-existent parent. + * The Route refers to a nonexistent parent. * The Route is of a type that the controller does not support. * The Route is in a namespace the controller does not have access to. items: diff --git a/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml index 63a046f38c..081d974bd2 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml @@ -360,7 +360,7 @@ spec: backendRefs: description: |- BackendRefs defines the backend(s) where matching requests should be - sent. If unspecified or invalid (refers to a non-existent resource or + sent. If unspecified or invalid (refers to a nonexistent resource or a Service with no endpoints), the rule performs no forwarding; if no filters are specified that would result in a response being sent, the underlying implementation must actively reject request attempts to this @@ -560,7 +560,7 @@ spec: There are a number of cases where the "Accepted" condition may not be set due to lack of controller visibility, that includes when: - * The Route refers to a non-existent parent. + * The Route refers to a nonexistent parent. * The Route is of a type that the controller does not support. * The Route is in a namespace the controller does not have access to. items: diff --git a/config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml b/config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml index 25a712a798..4c58a8da0d 100644 --- a/config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml +++ b/config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml @@ -300,7 +300,7 @@ spec: backendRefs: description: |- BackendRefs defines the backend(s) where matching requests should be - sent. If unspecified or invalid (refers to a non-existent resource or a + sent. If unspecified or invalid (refers to a nonexistent resource or a Service with no endpoints), the underlying implementation MUST actively reject connection attempts to this backend. Packet drops must respect weight; if an invalid backend is requested to have 80% of @@ -497,7 +497,7 @@ spec: There are a number of cases where the "Accepted" condition may not be set due to lack of controller visibility, that includes when: - * The Route refers to a non-existent parent. + * The Route refers to a nonexistent parent. * The Route is of a type that the controller does not support. * The Route is in a namespace the controller does not have access to. items: diff --git a/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml b/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml index 4331775179..3af65518e2 100644 --- a/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml +++ b/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml @@ -1781,7 +1781,7 @@ spec: There are a number of cases where the "Accepted" condition may not be set due to lack of controller visibility, that includes when: - * The Route refers to a non-existent parent. + * The Route refers to a nonexistent parent. * The Route is of a type that the controller does not support. * The Route is in a namespace the controller does not have access to. items: diff --git a/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml b/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml index 3d810c1e6b..cf3724e2a3 100644 --- a/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml +++ b/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml @@ -2547,7 +2547,7 @@ spec: There are a number of cases where the "Accepted" condition may not be set due to lack of controller visibility, that includes when: - * The Route refers to a non-existent parent. + * The Route refers to a nonexistent parent. * The Route is of a type that the controller does not support. * The Route is in a namespace the controller does not have access to. items: @@ -5298,7 +5298,7 @@ spec: There are a number of cases where the "Accepted" condition may not be set due to lack of controller visibility, that includes when: - * The Route refers to a non-existent parent. + * The Route refers to a nonexistent parent. * The Route is of a type that the controller does not support. * The Route is in a namespace the controller does not have access to. items: diff --git a/geps/gep-1016/index.md b/geps/gep-1016/index.md index 8ce35205c0..08576730ca 100644 --- a/geps/gep-1016/index.md +++ b/geps/gep-1016/index.md @@ -424,7 +424,7 @@ type GRPCRouteRule struct { // BackendRefs defines the backend(s) where matching requests should be // sent. - // If unspecified or invalid (refers to a non-existent resource or a Service + // If unspecified or invalid (refers to a nonexistent resource or a Service // with no endpoints), the rule performs no forwarding. If there are also no // filters specified that would result in a response being sent, a gRPC `UNAVAILABLE` // status is returned. `UNAVAILABLE` responses must be sent so that the overall diff --git a/geps/gep-1364/index.md b/geps/gep-1364/index.md index 0ff89c5007..25c879f907 100644 --- a/geps/gep-1364/index.md +++ b/geps/gep-1364/index.md @@ -323,13 +323,13 @@ Note that some classes of inter-resource reference failure do _not_ cause a reso to become unattached and stop being accepted (that is, to have the `Accepted` condition set to `status: false`). -* Non-existent Service backends - if the backend does not exist on a HTTPRoute that +* Nonexistent Service backends - if the backend does not exist on a HTTPRoute that is otherwise okay, then the data plane must generate 500s for traffic that matches that HTTPRoute. In this case, the `Accepted` Condition must be true, and the `ResolvedRefs` Condition must be false, with reasons and messages indicating that the backend services do not exist. * HTTPRoutes with *all* backends in other namespaces, but not permitted by ReferenceGrants. -In this case, the "non-existent service backends" rules apply, and 500s must be +In this case, the "nonexistent service backends" rules apply, and 500s must be generated. In this case, again, the `Accepted` condition is true, and the `ResolvedRefs` Condition is false, with reasons and messages indicating that the backend services are not reachable. @@ -359,21 +359,21 @@ Examples of Conditions: * HTTPRoute with one match with one backend that is valid. `Accepted` is true, `ResolvedRefs` is true. -* HTTPRoute with one match with one backend that is a non-existent Service backend. +* HTTPRoute with one match with one backend that is a nonexistent Service backend. The `Accepted` Condition is true, the `ResolvedRefs` condition is false, with a reason of `BackendNotFound`. `Accepted` is true in this case because the data path must respond to requests that would be sent to that backend with a 500 response. -* HTTPRoute with one match with two backends, one of which is a non-existent Service +* HTTPRoute with one match with two backends, one of which is a nonexistent Service backend. The `Accepted` Condition is true, the `ResolvedRefs` condition is false. `Accepted` is true in this case because the data path must respond to a percentage -of the requests matching the rule corresponding to the weighting of the non-existent +of the requests matching the rule corresponding to the weighting of the nonexistent backend (which would be fifty percent unless weights are applied). * HTTPRoute with one match with one backend that is in a different namespace, and does _not_ have a ReferenceGrant permitting that access. The `Accepted` condition is true, and the `ResolvedRefs` Condition is false, with a reason of `RefNotPermitted`. As before, `Accepted` is true because in this case, the data path must be programmed with 500s for the match. -* TCPRoute with one match with a backend that is a non-existent Service. `Accepted` +* TCPRoute with one match with a backend that is a nonexistent Service. `Accepted` is false, and `ResolvedRefs` is false. `Accepted` is false in this case because there is not enough information to program any rules to handle the traffic in the underlying data plane - TCP doesn't have a way to say "this is a valid destination From 2ddf6edb754d00389b9c13d309a9af052d2905a4 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:11:19 -0400 Subject: [PATCH 44/61] spelling: or Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- conformance/apis/v1/result.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conformance/apis/v1/result.go b/conformance/apis/v1/result.go index f3a826c4a2..0fbaec6570 100644 --- a/conformance/apis/v1/result.go +++ b/conformance/apis/v1/result.go @@ -29,7 +29,7 @@ var ( // tests passing without any failures, but some were skipped. Partial Result = "partial" - // Failure indicates that the test run concluded in one ore more tests + // Failure indicates that the test run concluded in one or more tests // failing to complete successfully. Failure Result = "failure" ) From 0a3553f68558ad43b5b3e0a2855fccd84906d8a6 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:49:59 -0400 Subject: [PATCH 45/61] spelling: overridden Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1742/index.md | 2 +- geps/gep-3155/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/geps/gep-1742/index.md b/geps/gep-1742/index.md index 39ab142b86..2019b5e505 100644 --- a/geps/gep-1742/index.md +++ b/geps/gep-1742/index.md @@ -476,7 +476,7 @@ Timeouts could be configured using policy attachments or in objects other than ` Instead of configuring timeouts directly on an API object, they could be configured using policy attachments. The advantage to this approach would be that timeout policies can be not only -configured for an `HTTPRouteRule`, but can also be added/overriden at a more fine +configured for an `HTTPRouteRule`, but can also be added/overridden at a more fine (e.g., `HTTPBackendRef`) or coarse (e.g. `HTTPRoute`) level of granularity. The downside, however, is complexity introduced for the most common use case, adding a simple diff --git a/geps/gep-3155/index.md b/geps/gep-3155/index.md index 8652b3b13b..2fb1089295 100644 --- a/geps/gep-3155/index.md +++ b/geps/gep-3155/index.md @@ -64,7 +64,7 @@ type GatewayBackendTLS struct { // ClientCertificateRef can reference to standard Kubernetes resources, i.e. // Secret, or implementation-specific custom resources. // - // This setting can be overriden on the service level by use of BackendTLSPolicy. + // This setting can be overridden on the service level by use of BackendTLSPolicy. ClientCertificateRef SecretObjectReference `json:"clientCertificateRef,omitempty"` } ``` From a5b0dec58b56b0cdbba2f75ff66f51c270771623 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:50:11 -0400 Subject: [PATCH 46/61] spelling: possible Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-2648/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-2648/index.md b/geps/gep-2648/index.md index ae3ebf389c..05a0a44667 100644 --- a/geps/gep-2648/index.md +++ b/geps/gep-2648/index.md @@ -300,7 +300,7 @@ const ( Implementations that use Direct Policy objects SHOULD put a Condition into `status.Conditions` of any objects affected by a Direct Policy, if that field is present. Ideally, there should be a set of Conditions that can be namespaced -by the implementing controller, but if that is not posisble, use the guidance below. +by the implementing controller, but if that is not possible, use the guidance below. If they do, that Condition MUST have a `type` ending in `PolicyAffected` (like `gateway.networking.k8s.io/PolicyAffected`), From f4ee83e9843c3bd3e99d701b524a956813e01d8a Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:11:27 -0400 Subject: [PATCH 47/61] spelling: preexisting Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- Makefile | 6 +++--- geps/gep-3171/index.md | 2 +- site-src/contributing/devguide.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 7ef6a2a4a7..4bde1cc5e5 100644 --- a/Makefile +++ b/Makefile @@ -92,16 +92,16 @@ test.crds-validation: conformance: go test ${GO_TEST_FLAGS} -v ./conformance -run TestConformance -args ${CONFORMANCE_FLAGS} -# Install CRD's and example resources to a pre-existing cluster. +# Install CRD's and example resources to a preexisting cluster. .PHONY: install install: crd example -# Install the CRD's to a pre-existing cluster. +# Install the CRD's to a preexisting cluster. .PHONY: crd crd: kubectl kustomize config/crd | kubectl apply -f - -# Install the example resources to a pre-existing cluster. +# Install the example resources to a preexisting cluster. .PHONY: example example: hack/install-examples.sh diff --git a/geps/gep-3171/index.md b/geps/gep-3171/index.md index bb035a96ea..a7e030a871 100644 --- a/geps/gep-3171/index.md +++ b/geps/gep-3171/index.md @@ -17,7 +17,7 @@ Successfully implement the feature. [Request Mirroring](https://gateway-api.sigs.k8s.io/guides/http-request-mirroring/) is a feature that allows a user to mirror requests going to some backend A along to some other specified backend B. Right now Request Mirroring is an all or nothing feature – either 100% of request are mirrored, or 0% are. Percentage-based Request Mirroring will allow users to specify a percentage of requests they'd like mirrored as opposed to every single request. -This feature is already [supported by Envoy](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-msg-config-route-v3-routeaction-requestmirrorpolicy), so adding it for the Gateway API would enable better integration between the two products. There's also an existing user desire for this feature on the [HAProxy side](https://www.haproxy.com/blog/haproxy-traffic-mirroring-for-real-world-testing) and [NGINX side](https://alex.dzyoba.com/blog/nginx-mirror/). Since Request Mirroring is already supported by the Gateway API, Percentage-based Request Mirroring would a clear improvement on this pre-existing feature. +This feature is already [supported by Envoy](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-msg-config-route-v3-routeaction-requestmirrorpolicy), so adding it for the Gateway API would enable better integration between the two products. There's also an existing user desire for this feature on the [HAProxy side](https://www.haproxy.com/blog/haproxy-traffic-mirroring-for-real-world-testing) and [NGINX side](https://alex.dzyoba.com/blog/nginx-mirror/). Since Request Mirroring is already supported by the Gateway API, Percentage-based Request Mirroring would a clear improvement on this preexisting feature. ## Existing Support in Implementations diff --git a/site-src/contributing/devguide.md b/site-src/contributing/devguide.md index 6b571769d7..2deeeae09e 100644 --- a/site-src/contributing/devguide.md +++ b/site-src/contributing/devguide.md @@ -82,7 +82,7 @@ ensuring the field name will not be reused. ### Deploy the Code -Use the following command to deploy CRDs to the pre-existing `Kind` cluster. +Use the following command to deploy CRDs to the preexisting `Kind` cluster. ```shell make crd From e6f1606b1a8d4f7b538debc5158dca0e60bd2f5a Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:50:21 -0400 Subject: [PATCH 48/61] spelling: prominence Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-713/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-713/index.md b/geps/gep-713/index.md index be5cbd56b3..b77dfc5d84 100644 --- a/geps/gep-713/index.md +++ b/geps/gep-713/index.md @@ -585,7 +585,7 @@ plugin. ##### Design considerations -This is already part of the API pattern, but is being lifted to more prominience +This is already part of the API pattern, but is being lifted to more prominence here. #### Standard status struct From a36f67cf7dc1b4a70ec226fb1f5d36feb0973f0d Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:50:27 -0400 Subject: [PATCH 49/61] spelling: protocol Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- pkg/features/httproute.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/features/httproute.go b/pkg/features/httproute.go index 28c3997622..c080defe7a 100644 --- a/pkg/features/httproute.go +++ b/pkg/features/httproute.go @@ -92,7 +92,7 @@ const ( // This option indicates support for HTTPRoute with a backendref with an appProtocol 'kubernetes.io/h2c' (extended conformance) SupportHTTPRouteBackendProtocolH2C FeatureName = "HTTPRouteBackendProtocolH2C" - // This option indicates support for HTTPRoute with a backendref with an appProtoocol 'kubernetes.io/ws' (extended conformance) + // This option indicates support for HTTPRoute with a backendref with an appProtocol 'kubernetes.io/ws' (extended conformance) SupportHTTPRouteBackendProtocolWebSocket FeatureName = "HTTPRouteBackendProtocolWebSocket" ) From 8580fef91359f296ea2f69b6bc87a46f9a3841d3 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:50:38 -0400 Subject: [PATCH 50/61] spelling: recommend Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-995/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-995/index.md b/geps/gep-995/index.md index e74c9ae07e..de95280c6a 100644 --- a/geps/gep-995/index.md +++ b/geps/gep-995/index.md @@ -50,7 +50,7 @@ If specified, the name of a route rule MUST comply with the [`SectionName`](http To preserve backward compatibility with previous version of the affected APIs, the `name` field for route rules should be introduced in the API as optional – i.e., end-user are not forced to add it to their existing or new route objects. -Implementations MAY recomend the usage of the `name` field for enabling specific features, such as for supporting policy attachment targetting individual route rules, and more assertive log messages and/or status reporting that include on the name of the rule. However, because as by API design the presence of the field is optional, implementations MUST take into account that a value may sometimes not be available. For such cases, implementations are free to decide whether to provide the feature depending the `name` field, if the feature is not required for Core compliance, or to enable the feature relying on another method of referencing of choice. +Implementations MAY recommend the usage of the `name` field for enabling specific features, such as for supporting policy attachment targetting individual route rules, and more assertive log messages and/or status reporting that include on the name of the rule. However, because as by API design the presence of the field is optional, implementations MUST take into account that a value may sometimes not be available. For such cases, implementations are free to decide whether to provide the feature depending the `name` field, if the feature is not required for Core compliance, or to enable the feature relying on another method of referencing of choice. ### Default value From 06c41b86154c6fc92fc73a79d1f2bb34e407491d Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:46:59 -0400 Subject: [PATCH 51/61] spelling: reference-grant Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-724/images/724-alt1.png | Bin 33208 -> 35155 bytes geps/gep-724/images/724-alt2.png | Bin 31549 -> 33591 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/geps/gep-724/images/724-alt1.png b/geps/gep-724/images/724-alt1.png index 6c2c44ea7dca6eb5b8b4bf63daa70f3c016dd3e5..69d00e9d8ee0f3cb115ca8457009e0f097d28810 100644 GIT binary patch literal 35155 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
    9|>7ksA5{%okHZnIx{ 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 H>-YZvRCp0Y literal 33208 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%0DjTnD`r1%uYwW!x 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 U?k@#i!~i2MA|qV(MbG#D0}=mb%K!iX literal 31549 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 From dc1346a8b2964ae519f97c16f246de55c9913758 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:50:46 -0400 Subject: [PATCH 52/61] spelling: referent Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-709/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/geps/gep-709/index.md b/geps/gep-709/index.md index a4a8d21379..1a2ea88f5f 100644 --- a/geps/gep-709/index.md +++ b/geps/gep-709/index.md @@ -132,7 +132,7 @@ type ReferenceGrantSpec struct { // ReferenceGrantFrom describes trusted namespaces and kinds. type ReferenceGrantFrom struct { - // Group is the group of the referrent. + // Group is the group of the referent. // // Support: Core // @@ -140,7 +140,7 @@ type ReferenceGrantFrom struct { // +kubebuilder:validation:MaxLength=253 Group string `json:"group"` - // Kind is the kind of the referrent. Although implementations may support + // Kind is the kind of the referent. Although implementations may support // additional resources, the following Route types are part of the "Core" // support level for this field: // @@ -153,7 +153,7 @@ type ReferenceGrantFrom struct { // +kubebuilder:validation:MaxLength=253 Kind string `json:"kind"` - // Namespace is the namespace of the referrent. + // Namespace is the namespace of the referent. // // Support: Core // @@ -165,7 +165,7 @@ type ReferenceGrantFrom struct { // ReferenceGrantTo describes what Kinds are allowed as targets of the // references. type ReferenceGrantTo struct { - // Group is the group of the referrent. + // Group is the group of the referent. // // Support: Core // @@ -173,7 +173,7 @@ type ReferenceGrantTo struct { // +kubebuilder:validation:MaxLength=253 Group string `json:"group"` - // Kind is the kind of the referrent. Although implementations may support + // Kind is the kind of the referent. Although implementations may support // additional resources, the following types are part of the "Core" // support level for this field: // From a0bf37d3bf466c88581f9b9da9c04f1b18e6b127 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:50:57 -0400 Subject: [PATCH 53/61] spelling: release Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- .openvex/templates/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.openvex/templates/README.md b/.openvex/templates/README.md index d724e1d0e7..3961ecf784 100644 --- a/.openvex/templates/README.md +++ b/.openvex/templates/README.md @@ -14,7 +14,7 @@ vexctl add --in-place main.openvex.json pkg:oci/test CVE-2014-1234567 fixed That will add a new VEX statement expressing that the impact of CVE-2014-1234567 is under investigation in the test image. When cutting a new release, for `pkg:oci/test` the new file will be -incorporated to the relase's VEX data. +incorporated to the release's VEX data. ## Read more about OpenVEX From 312caba3636c98f0fb8962b57d6a5d366a7e2eb1 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:49:50 -0400 Subject: [PATCH 54/61] spelling: route-override Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-746/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-746/index.md b/geps/gep-746/index.md index 475a0ae8f3..4c0f33be9a 100644 --- a/geps/gep-746/index.md +++ b/geps/gep-746/index.md @@ -176,7 +176,7 @@ type TLSRouteOverrideType string const ( // Allows the parameter to be configured from all routes. - TLSROuteOVerrideAllow TLSRouteOverrideType = "Allow" + TLSRouteOverrideAllow TLSRouteOverrideType = "Allow" // Prohibits the parameter from being configured from any route. TLSRouteOverrideDeny TLSRouteOverrideType = "Deny" From bba9534e328d2cb89431e98aab7511b84808b64b Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:53:36 -0400 Subject: [PATCH 55/61] spelling: stabilizing Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-713/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-713/index.md b/geps/gep-713/index.md index b77dfc5d84..9d8875cf09 100644 --- a/geps/gep-713/index.md +++ b/geps/gep-713/index.md @@ -54,7 +54,7 @@ more resources, and are consequently harder to understand and require a more complex status design. Splitting these two design patterns apart into separate GEPs is intended to -allow proceeding with stablizing the simpler (Direct) case while we work on +allow proceeding with stabilizing the simpler (Direct) case while we work on solving the status problem for the more complex (Inherited) case. Direct Attached Policies are further specified in the addendum GEP GEP-2648, From bafaf00f2dc9bae3f191a41b77ce6d11a2ba724a Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:51:48 -0400 Subject: [PATCH 56/61] spelling: substituted Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- site-src/guides/simple-gateway.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site-src/guides/simple-gateway.md b/site-src/guides/simple-gateway.md index a49bce55c0..0697dfc928 100644 --- a/site-src/guides/simple-gateway.md +++ b/site-src/guides/simple-gateway.md @@ -15,7 +15,7 @@ match all HTTP traffic and directs it to a single Service named `foo-svc`. The Gateway represents the instantiation of a logical load balancer and the GatewayClass defines the load balancer template when users create a Gateway. The example Gateway is templated from a hypothetical `example` -GatewayClass, which is meant to be a placeholder and substitued by users. Here +GatewayClass, which is meant to be a placeholder and substituted by users. Here is a list of available [Gateway Implementation](https://gateway-api.sigs.k8s.io/implementations/) that can be used to determine the correct GatewayClass based on the specific From 242f441e3f870d081c1d4bbb9fa3b8cd8e2121d5 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 21 Oct 2024 11:58:08 -0400 Subject: [PATCH 57/61] spelling: targeting Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-995/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-995/index.md b/geps/gep-995/index.md index de95280c6a..162cc4d676 100644 --- a/geps/gep-995/index.md +++ b/geps/gep-995/index.md @@ -50,7 +50,7 @@ If specified, the name of a route rule MUST comply with the [`SectionName`](http To preserve backward compatibility with previous version of the affected APIs, the `name` field for route rules should be introduced in the API as optional – i.e., end-user are not forced to add it to their existing or new route objects. -Implementations MAY recommend the usage of the `name` field for enabling specific features, such as for supporting policy attachment targetting individual route rules, and more assertive log messages and/or status reporting that include on the name of the rule. However, because as by API design the presence of the field is optional, implementations MUST take into account that a value may sometimes not be available. For such cases, implementations are free to decide whether to provide the feature depending the `name` field, if the feature is not required for Core compliance, or to enable the feature relying on another method of referencing of choice. +Implementations MAY recommend the usage of the `name` field for enabling specific features, such as for supporting policy attachment targeting individual route rules, and more assertive log messages and/or status reporting that include on the name of the rule. However, because as by API design the presence of the field is optional, implementations MUST take into account that a value may sometimes not be available. For such cases, implementations are free to decide whether to provide the feature depending the `name` field, if the feature is not required for Core compliance, or to enable the feature relying on another method of referencing of choice. ### Default value From 58e6025894d04a8f66cd2cfd098ffb27476734ad Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:08:55 -0400 Subject: [PATCH 58/61] spelling: the Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-1686/index.md | 2 +- geps/gep-2162/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/geps/gep-1686/index.md b/geps/gep-1686/index.md index bc903efc94..22ecb477ef 100644 --- a/geps/gep-1686/index.md +++ b/geps/gep-1686/index.md @@ -80,7 +80,7 @@ producer). - Assert that traffic from a client in a different `Namespace` is routed by the `HTTPRoute` -A consumer `HTTPRoute` is in the same `Namespace` as the the request sender (the +A consumer `HTTPRoute` is in the same `Namespace` as the request sender (the consumer), a different `Namespace` as the `parentRef` `Service`. - Given a consumer `HTTPRoute` diff --git a/geps/gep-2162/index.md b/geps/gep-2162/index.md index 43f5d052d1..7a106e200e 100644 --- a/geps/gep-2162/index.md +++ b/geps/gep-2162/index.md @@ -123,7 +123,7 @@ Every feature should: #### Conformance test names -Conformance tests file names should try to follow the the `pascal-case-name.go` format. +Conformance tests file names should try to follow the `pascal-case-name.go` format. For example for `HTTPRoutePortRedirect` - the test file would be `httproute-port-redirect.go`. We should treat this guidance as "best effort" because we might have test files that check the combination of several features and can't follow the same format. From a16f55869369984532db692c9bd271164b8ceeb3 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:56:17 -0400 Subject: [PATCH 59/61] spelling: validationutil Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- apis/v1/util/validation/gatewayclass_test.go | 4 ++-- apis/v1beta1/util/validation/gatewayclass_test.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apis/v1/util/validation/gatewayclass_test.go b/apis/v1/util/validation/gatewayclass_test.go index d211b1fcd7..f5cdb1d0d6 100644 --- a/apis/v1/util/validation/gatewayclass_test.go +++ b/apis/v1/util/validation/gatewayclass_test.go @@ -20,7 +20,7 @@ import ( "testing" gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" - validationtutils "sigs.k8s.io/gateway-api/apis/v1beta1/util/validation" + validationutil "sigs.k8s.io/gateway-api/apis/v1beta1/util/validation" ) func TestIsControllerNameValid(t *testing.T) { @@ -58,7 +58,7 @@ func TestIsControllerNameValid(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - isValid := validationtutils.IsControllerNameValid(tc.controllerName) + isValid := validationutil.IsControllerNameValid(tc.controllerName) if isValid != tc.isvalid { t.Errorf("Expected validity %t, got %t", tc.isvalid, isValid) } diff --git a/apis/v1beta1/util/validation/gatewayclass_test.go b/apis/v1beta1/util/validation/gatewayclass_test.go index 175d4f9a30..128de4947e 100644 --- a/apis/v1beta1/util/validation/gatewayclass_test.go +++ b/apis/v1beta1/util/validation/gatewayclass_test.go @@ -20,7 +20,7 @@ import ( "testing" gatewayv1b1 "sigs.k8s.io/gateway-api/apis/v1beta1" - validationtutils "sigs.k8s.io/gateway-api/apis/v1beta1/util/validation" + validationutil "sigs.k8s.io/gateway-api/apis/v1beta1/util/validation" ) func TestIsControllerNameValid(t *testing.T) { @@ -58,7 +58,7 @@ func TestIsControllerNameValid(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - isValid := validationtutils.IsControllerNameValid(tc.controllerName) + isValid := validationutil.IsControllerNameValid(tc.controllerName) if isValid != tc.isvalid { t.Errorf("Expected validity %t, got %t", tc.isvalid, isValid) } From 0dcea2fb8ccaac91e6e596b850d7c53d340ca794 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:09:28 -0400 Subject: [PATCH 60/61] spelling: which Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/gep-2162/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/gep-2162/index.md b/geps/gep-2162/index.md index 7a106e200e..1000e3eea1 100644 --- a/geps/gep-2162/index.md +++ b/geps/gep-2162/index.md @@ -179,7 +179,7 @@ Once the GatewayClass features support are is published into the status we could ### Add Gateway API Version field to the GatewayClass Status -We got some feedback that it will be useful to indicate what what Gateway API version the implementation supports. So when we have supported features published in the GatewayClass Status, users will also be able to understand that those are the supported features for a specific Gateway API version. +We got some feedback that it will be useful to indicate which Gateway API version the implementation supports. So when we have supported features published in the GatewayClass Status, users will also be able to understand that those are the supported features for a specific Gateway API version. This work is likely to require its own small GEP but ideally what this field would mean is that an implementation supports Max(vX.X). From e9aac3da70ae6d9d14d7867a6e286e8713493de3 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Fri, 18 Oct 2024 04:02:40 -0400 Subject: [PATCH 61/61] Reword simplify prototyping description Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- geps/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geps/overview.md b/geps/overview.md index 74fed4288c..cf331cd94d 100644 --- a/geps/overview.md +++ b/geps/overview.md @@ -59,7 +59,7 @@ of stability of the change described in the GEP: * **Provisional:** The goals described by this GEP have consensus but implementation details have not been agreed to yet. - * **Prototyping:** An extension of `Provisional` which can be opted in to in + * **Prototyping:** An optional extension of `Provisional` in order to indicate to the community that there are some active practical tests and experiments going on which are intended to be a part of the development of this GEP. This may include APIs or code, but that content _must_ not be