Skip to content

Commit 85839c8

Browse files
bexxmoddLiorLiebermanrobscott
authored
Updated index.md to reflect changes in GEP-2162 (#3898)
* Updated index doc and corrected formatting. * Update geps/gep-2162/index.md Co-authored-by: Lior Lieberman <[email protected]> * Added details about Mesh and staying compliant. * Wording update. * TODO for what GWC reports. * Added mesh stuff. * Update geps/gep-2162/index.md Co-authored-by: Lior Lieberman <[email protected]> * Update geps/gep-2162/index.md Co-authored-by: Lior Lieberman <[email protected]> * Update geps/gep-2162/index.md Co-authored-by: Lior Lieberman <[email protected]> * Update geps/gep-2162/index.md Co-authored-by: Lior Lieberman <[email protected]> * Update geps/gep-2162/index.md Co-authored-by: Lior Lieberman <[email protected]> * Added summary paragraph for Staying Compliant section. * Update geps/gep-2162/index.md Co-authored-by: Rob Scott <[email protected]> * Update geps/gep-2162/index.md Co-authored-by: Rob Scott <[email protected]> * Formatting changes. * Added info that suite will throw an error if Mesh features are added to GWC. * Apply suggestions from code review Co-authored-by: Lior Lieberman <[email protected]> * Update geps/gep-2162/index.md Co-authored-by: Lior Lieberman <[email protected]> * Link issue for populating mesh features in its crd. * Update geps/gep-2162/index.md Co-authored-by: Rob Scott <[email protected]> * Update geps/gep-2162/index.md Co-authored-by: Rob Scott <[email protected]> --------- Co-authored-by: Lior Lieberman <[email protected]> Co-authored-by: Rob Scott <[email protected]>
1 parent bb58b0d commit 85839c8

File tree

1 file changed

+36
-16
lines changed

1 file changed

+36
-16
lines changed

geps/gep-2162/index.md

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# GEP-2162: Supported features in GatewayClass Status
22

33
* Issue: [#2162](https://github.com/kubernetes-sigs/gateway-api/issues/2162)
4-
* Status: Experimental
4+
* Status: Standard
55

66
## TLDR
77

8-
This GEP proposes to enhance the [GatewayClassStatus](https://github.com/kubernetes-sigs/gateway-api/blob/f2cd9bb92b4ff392416c40d6148ff7f76b30e649/apis/v1beta1/gatewayclass_types.go#L185) to include a list of Gateway API features supported by the installed GatewayClass.
8+
This GEP proposes to enhance the [GatewayClassStatus](https://github.com/kubernetes-sigs/gateway-api/blob/f2cd9bb92b4ff392416c40d6148ff7f76b30e649/apis/v1beta1/gatewayclass_types.go#L185) to include a list of Gateway API features supported by the installed GatewayClass.
99

1010
## Goals
1111

@@ -17,16 +17,12 @@ This GEP proposes to enhance the [GatewayClassStatus](https://github.com/kuberne
1717

1818
* Provide foundation for tools to block or warn when unsupported features are used.
1919

20-
2120
## Non-Goals
2221

2322
* Validate correctness of supported features published by the implementation.
24-
Meaning we don't intend to verify whether the supported features reported by
25-
the implementation are indeed supported.
23+
Meaning we don't intend to verify whether the supported features reported by the implementation are indeed supported.
2624

27-
However, the supported features in the status of the GatewayClass should
28-
make it very easy for any individual to run conformance tests against the
29-
GatewayClass using our conformance tooling.
25+
However, the supported features in the status of the GatewayClass should make it easy for any individual to run conformance tests against the GatewayClass using our conformance tooling.
3026

3127
## Introduction
3228

@@ -45,15 +41,14 @@ Implementations **must** publish the supported features before Accepting the Gat
4541

4642
Implementations are free to decide how they manage this information. A common approach could be to maintain static lists of supported features or using predefined sets.
4743

48-
Note: implementations must keep the published list sorted in ascending alphabetical order.
44+
> Note: implementations must keep the published list sorted in ascending alphabetical order.
4945
5046
## API
5147

5248
This GEP proposes API changes describes as follow:
5349

5450
* Update the `GatewayClassStatus` struct to include a string-represented list of `SupportedFeatures`.
5551

56-
5752
```go
5853
// GatewayClassStatus is the current status for the GatewayClass.
5954
type GatewayClassStatus struct {
@@ -106,6 +101,12 @@ status:
106101
- HTTPRouteQueryParamMatching
107102

108103
```
104+
105+
### SupportedFeatures Guidance in GatewayClass
106+
107+
Only Gateway related features should be published on GatewayClass. The rest, i.e Mesh features should not be published under GatewayClass, and will likely to be published on the new Mesh resource CRD when it is ready [ref](https://github.com/kubernetes-sigs/gateway-api/pull/3950).
108+
Mesh features published on GatewayClassStatus will be ignored by the conformance test suite along with a warning.
109+
109110
## Standardize features and conformance tests names
110111

111112
Before we add the supported features into our API, it is necessary to establish standardized naming and formatting conventions.
@@ -116,7 +117,7 @@ Before we add the supported features into our API, it is necessary to establish
116117

117118
Every feature should:
118119

119-
1. Start with the resource name. i.e HTTPRouteXXX
120+
1. Start with the resource name. i.e HTTPRouteXXX.
120121
2. Follow the PascalCase convention. Note that the resource name in the string should come as is and not be converted to PascalCase, i.e HTTPRoutePortRedirect and not HttpRoutePortRedirect.
121122
3. Not exceed 128 characters.
122123
4. Contain only letters and numbers
@@ -130,21 +131,40 @@ We should treat this guidance as "best effort" because we might have test files
130131

131132
In any case, the conformance tests file names should be meaningful and easy to understand.
132133

134+
#### Conformance report
135+
136+
In order for to verify that the list of features reported are indeed supported by GatewayClass tests will be run based on the features from the GatewayClassStatus.
137+
If the source of Gateway features are not inferred and manually provided the conformance suite will block the report from being submitted.
138+
139+
#### Reporting Mesh features
140+
141+
As Mesh doesn't have a good place (yet) to populate SupportedFeatures, its features can be tested for compliance by using Conformance Profiles, or manually, providing features for test using `--supported-features` flag.
142+
Until mesh features are posted on the Mesh resource CRD, the conformance suite will determine if conformance run is for [Mesh features](https://github.com/kubernetes-sigs/gateway-api/issues/3984) and will NOT block the report if provided manually.
143+
144+
#### Staying Compliant
145+
146+
SupportedFeatures will become available starting 1.4 release as a standard feature, which means that all Gateway implementations will be expected to define and populate SupportedFeatures in the GatewayClass' Status.
147+
The conformance test suite will be based on inferring supported features from GatewayClassStatus,
148+
meaning if you want to generate passing report, features should be populated there.
149+
There will be a grace period until the 1.5 release, after which all Gateway Conformance Reports will need to be generated based on the SupportedFeatures field in GatewayClass status (with the exception of Mesh features described above).
150+
151+
The core purpose of conformance tests for GatewayClass is to verify that reported features are truly supported.
152+
While the community currently operates on a trust-based system for conformance reports, programmatically inferring features from the GatewayClass status field creates a strong, verifiable link between an implementation's claims and the test results.
153+
Having this connection between supported features and conformance tests, helps improve the UX and make it easier for implementers to run the correct conformance tests.
133154

134155
## Followups
135156

136157
Before we make the changes we need to;
137158

138159
1. Change the names of the supported features and conformance tests that don't conform with the formatting rules.
139160

140-
141161
## Alternatives
142162

143163
### Re-using ConformanceProfiles structs
144164

145165
We could use the same structs as we do in conformance profile object, more specifically, the [ProfileReport](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/apis/v1alpha1/profilereport.go#LL24C6-L24C19) struct.
146166

147-
Though it would be nice to have only one place to update, these structs seems to include much more data relevant to the conformance report but not for our use case.
167+
Though it would be nice to have only one place to update, these structs seems to include much more data relevant to the conformance report but not for our use case.
148168

149169
That said, conformance profiles are still at experimental stage, we could explore the option to create a shared struct that will be used both for the conformance reports and for the GatewayClass status.
150170

@@ -158,8 +178,7 @@ However, having the supported features published in the GatewayClass Status adds
158178
* We could build a mechanism or a tool to block or warn when unsupported features are used.
159179
* Users will be able to select the GatewayClass that suits their needs without having to refer to documentation or conformance reports.
160180

161-
This does not cover a future piece of work we want to implement which is to warn/block users from applying a Gateway API object if the installed GWC doesn't support it. (originally suggested in [#1804](https://github.com/kubernetes-sigs/gateway-api/issues/1804)).
162-
181+
This does not cover a future piece of work we want to implement which is to warn/block users from applying a Gateway API object if the installed GWC doesn't support it. (originally suggested in [#1804](https://github.com/kubernetes-sigs/gateway-api/issues/1804)).
163182

164183
## References
165184

@@ -169,6 +188,7 @@ This does not cover a future piece of work we want to implement which is to warn
169188
## Future Work
170189

171190
### Research the development of an unsupported feature warning/blocking mechanism
191+
172192
Once the GatewayClass features support are is published into the status we could look into;
173193

174194
1. Using the supported features in the webhook to validate or block attempts to apply manifests with unsupported features.
@@ -181,7 +201,7 @@ Once the GatewayClass features support are is published into the status we could
181201

182202
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.
183203

184-
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).
204+
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).
185205

186206
The value of it is to provide a better user experience and also more foundation for tools to be able to warn for example when a GatewayClass and CRDs have mismatched versions.
187207

0 commit comments

Comments
 (0)