Skip to content

Commit 7c9ad58

Browse files
authored
Update gateway listener compatibility doc (#829)
* Reformat api compatibility doc Problem: - The api compatibility includes long lines that makes it difficult to edit and review - Inconsistent indentation Solution: - Reformat the doc * Update gateway api compatibility doc for Gateway listener Problem: Documentation for certificateRefs of Gateway listener was out of date Solution: Update the documentation Note: - Namespace limitations was addressed in e6e149d - Secret rotation was addressed in 890fddb
1 parent 36d5df4 commit 7c9ad58

File tree

1 file changed

+119
-93
lines changed

1 file changed

+119
-93
lines changed

docs/gateway-api-compatibility.md

Lines changed: 119 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -4,139 +4,162 @@ This document describes which Gateway API resources NGINX Kubernetes Gateway sup
44

55
## Summary
66

7-
| Resource | Support Status |
8-
|-|-|
9-
| [GatewayClass](#gatewayclass) | Partially supported |
10-
| [Gateway](#gateway) | Partially supported |
11-
| [HTTPRoute](#httproute) | Partially supported |
12-
| [TLSRoute](#tlsroute) | Not supported |
13-
| [TCPRoute](#tcproute) | Not supported |
14-
| [UDPRoute](#udproute) | Not supported |
15-
| [ReferenceGrant](#referencegrant) | Supported |
16-
| [Custom policies](#custom-policies) | Not supported |
7+
| Resource | Support Status |
8+
|-------------------------------------|---------------------|
9+
| [GatewayClass](#gatewayclass) | Partially supported |
10+
| [Gateway](#gateway) | Partially supported |
11+
| [HTTPRoute](#httproute) | Partially supported |
12+
| [TLSRoute](#tlsroute) | Not supported |
13+
| [TCPRoute](#tcproute) | Not supported |
14+
| [UDPRoute](#udproute) | Not supported |
15+
| [ReferenceGrant](#referencegrant) | Supported |
16+
| [Custom policies](#custom-policies) | Not supported |
1717

1818
## Terminology
1919

2020
We use the following words to describe support status:
21+
2122
- *Supported*. The resource or field is fully supported and conformant to the Gateway API specification.
22-
- *Partially supported*. The resource or field is supported partially or with limitations. It will become fully supported in future releases.
23-
- *Not supported*. The resource or field is not yet supported. It will become partially or fully supported in future releases.
23+
- *Partially supported*. The resource or field is supported partially or with limitations. It will become fully
24+
supported in future releases.
25+
- *Not supported*. The resource or field is not yet supported. It will become partially or fully supported in future
26+
releases.
2427

25-
Note: it might be possible that NGINX Kubernetes Gateway will never support some resources and/or fields of the Gateway API. We will document these decisions on a case by case basis.
28+
Note: it might be possible that NGINX Kubernetes Gateway will never support some resources and/or fields of the Gateway
29+
API. We will document these decisions on a case by case basis.
2630

2731
## Resources
2832

29-
Below we list the resources and the support status of their corresponding fields.
33+
Below we list the resources and the support status of their corresponding fields.
3034

31-
For a description of each field, visit the [Gateway API documentation](https://gateway-api.sigs.k8s.io/references/spec/).
35+
For a description of each field, visit
36+
the [Gateway API documentation](https://gateway-api.sigs.k8s.io/references/spec/).
3237

33-
### GatewayClass
38+
### GatewayClass
3439

35-
> Status: Partially supported.
40+
> Status: Partially supported.
3641
3742
NGINX Kubernetes Gateway supports only a single GatewayClass resource configured via `--gatewayclass` flag
3843
of the [static-mode](./cli-help.md#static-mode) command.
3944

4045
Fields:
46+
4147
* `spec`
4248
* `controllerName` - supported.
4349
* `parametersRef` - not supported.
4450
* `description` - supported.
4551
* `status`
4652
* `conditions` - supported (Condition/Status/Reason):
47-
* `Accepted/True/Accepted`
48-
* `Accepted/False/InvalidParameters`
49-
* `Accepted/False/GatewayClassConflict`: Custom reason for when the GatewayClass references this controller, but a different GatewayClass name is provided to the controller via the command-line argument.
53+
* `Accepted/True/Accepted`
54+
* `Accepted/False/InvalidParameters`
55+
* `Accepted/False/GatewayClassConflict`: Custom reason for when the GatewayClass references this controller, but
56+
a different GatewayClass name is provided to the controller via the command-line argument.
5057

5158
### Gateway
5259

5360
> Status: Partially supported.
5461
55-
NGINX Kubernetes Gateway supports only a single Gateway resource. The Gateway resource must reference NGINX Kubernetes Gateway's corresponding GatewayClass.
62+
NGINX Kubernetes Gateway supports only a single Gateway resource. The Gateway resource must reference NGINX Kubernetes
63+
Gateway's corresponding GatewayClass.
5664
See [static-mode](./cli-help.md#static-mode) command for more info.
5765

5866
Fields:
67+
5968
* `spec`
6069
* `gatewayClassName` - supported.
6170
* `listeners`
6271
* `name` - supported.
6372
* `hostname` - supported.
64-
* `port` - supported.
73+
* `port` - supported.
6574
* `protocol` - partially supported. Allowed values: `HTTP`, `HTTPS`.
6675
* `tls`
67-
* `mode` - partially supported. Allowed value: `Terminate`.
68-
* `certificateRefs` - partially supported. The TLS certificate and key must be stored in a Secret resource of type `kubernetes.io/tls` in the same namespace as the Gateway resource. Only a single reference is supported. You must deploy the Secret before the Gateway resource. Secret rotation (watching for updates) is not supported.
69-
* `options` - not supported.
76+
* `mode` - partially supported. Allowed value: `Terminate`.
77+
* `certificateRefs` - The TLS certificate and key must be stored in a Secret resource of
78+
type `kubernetes.io/tls`. Only a single reference is supported. You must deploy the Secret before the
79+
Gateway resource.
80+
* `options` - not supported.
7081
* `allowedRoutes` - supported.
7182
* `addresses` - not supported.
7283
* `status`
73-
* `addresses` - Pod IPAddress supported.
74-
* `conditions` - Supported (Condition/Status/Reason):
75-
* `Accepted/True/Accepted`
76-
* `Accepted/True/ListenersNotValid`
77-
* `Accepted/False/ListenersNotValid`
78-
* `Accepted/False/Invalid`
79-
* `Accepted/False/UnsupportedValue`: Custom reason for when a value of a field in a Gateway is invalid or not supported.
80-
* `Accepted/False/GatewayConflict`: Custom reason for when the Gateway is ignored due to a conflicting Gateway. NKG only supports a single Gateway.
81-
* `Programmed/True/Programmed`
82-
* `Programmed/False/Invalid`
83-
* `Programmed/False/GatewayConflict`: Custom reason for when the Gateway is ignored due to a conflicting Gateway. NKG only supports a single Gateway.
84-
* `listeners`
85-
* `name` - supported.
86-
* `supportedKinds` - not supported.
87-
* `attachedRoutes` - supported.
84+
* `addresses` - Pod IPAddress supported.
8885
* `conditions` - Supported (Condition/Status/Reason):
89-
* `Accepted/True/Accepted`
90-
* `Accepted/False/UnsupportedProtocol`
91-
* `Accepted/False/InvalidCertificateRef`
92-
* `Accepted/False/ProtocolConflict`
93-
* `Accepted/False/UnsupportedValue`: Custom reason for when a value of a field in a Listener is invalid or not supported.
94-
* `Accepted/False/GatewayConflict`: Custom reason for when the Gateway is ignored due to a conflicting Gateway. NKG only supports a single Gateway.
95-
* `Programmed/True/Programmed`
96-
* `Programmed/False/Invalid`
97-
* `ResolvedRefs/True/ResolvedRefs`
98-
* `ResolvedRefs/False/InvalidCertificateRef`
99-
* `ResolvedRefs/False/InvalidRouteKinds`
100-
* `Conflicted/True/ProtocolConflict`
101-
* `Conflicted/False/NoConflicts`
86+
* `Accepted/True/Accepted`
87+
* `Accepted/True/ListenersNotValid`
88+
* `Accepted/False/ListenersNotValid`
89+
* `Accepted/False/Invalid`
90+
* `Accepted/False/UnsupportedValue`: Custom reason for when a value of a field in a Gateway is invalid or not
91+
supported.
92+
* `Accepted/False/GatewayConflict`: Custom reason for when the Gateway is ignored due to a conflicting Gateway.
93+
NKG only supports a single Gateway.
94+
* `Programmed/True/Programmed`
95+
* `Programmed/False/Invalid`
96+
* `Programmed/False/GatewayConflict`: Custom reason for when the Gateway is ignored due to a conflicting
97+
Gateway. NKG only supports a single Gateway.
98+
* `listeners`
99+
* `name` - supported.
100+
* `supportedKinds` - not supported.
101+
* `attachedRoutes` - supported.
102+
* `conditions` - Supported (Condition/Status/Reason):
103+
* `Accepted/True/Accepted`
104+
* `Accepted/False/UnsupportedProtocol`
105+
* `Accepted/False/InvalidCertificateRef`
106+
* `Accepted/False/ProtocolConflict`
107+
* `Accepted/False/UnsupportedValue`: Custom reason for when a value of a field in a Listener is invalid or
108+
not supported.
109+
* `Accepted/False/GatewayConflict`: Custom reason for when the Gateway is ignored due to a conflicting
110+
Gateway. NKG only supports a single Gateway.
111+
* `Programmed/True/Programmed`
112+
* `Programmed/False/Invalid`
113+
* `ResolvedRefs/True/ResolvedRefs`
114+
* `ResolvedRefs/False/InvalidCertificateRef`
115+
* `ResolvedRefs/False/InvalidRouteKinds`
116+
* `Conflicted/True/ProtocolConflict`
117+
* `Conflicted/False/NoConflicts`
102118

103119
### HTTPRoute
104120

105121
> Status: Partially supported.
106122
107123
Fields:
124+
108125
* `spec`
109-
* `parentRefs` - partially supported. Port not supported.
110-
* `hostnames` - supported.
111-
* `rules`
112-
* `matches`
113-
* `path` - partially supported. Only `PathPrefix` and `Exact` types.
114-
* `headers` - partially supported. Only `Exact` type.
115-
* `queryParams` - partially supported. Only `Exact` type.
116-
* `method` - supported.
117-
* `filters`
118-
* `type` - supported.
119-
* `requestRedirect` - supported except for the experimental `path` field. If multiple filters with `requestRedirect` are configured, NGINX Kubernetes Gateway will choose the first one and ignore the rest.
120-
* `requestHeaderModifier` - supported. If multiple filters with `requestHeaderModifier` are configured, NGINX Kubernetes Gateway will choose the first one and ignore the rest.
121-
* `responseHeaderModifier`, `requestMirror`, `urlRewrite`, `extensionRef` - not supported.
122-
* `backendRefs` - partially supported. Backend ref `filters` are not supported.
126+
* `parentRefs` - partially supported. Port not supported.
127+
* `hostnames` - supported.
128+
* `rules`
129+
* `matches`
130+
* `path` - partially supported. Only `PathPrefix` and `Exact` types.
131+
* `headers` - partially supported. Only `Exact` type.
132+
* `queryParams` - partially supported. Only `Exact` type.
133+
* `method` - supported.
134+
* `filters`
135+
* `type` - supported.
136+
* `requestRedirect` - supported except for the experimental `path` field. If multiple filters
137+
with `requestRedirect` are configured, NGINX Kubernetes Gateway will choose the first one and ignore the
138+
rest.
139+
* `requestHeaderModifier` - supported. If multiple filters with `requestHeaderModifier` are configured,
140+
NGINX Kubernetes Gateway will choose the first one and ignore the rest.
141+
* `responseHeaderModifier`, `requestMirror`, `urlRewrite`, `extensionRef` - not supported.
142+
* `backendRefs` - partially supported. Backend ref `filters` are not supported.
123143
* `status`
124-
* `parents`
125-
* `parentRef` - supported.
126-
* `controllerName` - supported.
127-
* `conditions` - partially supported. Supported (Condition/Status/Reason):
128-
* `Accepted/True/Accepted`
129-
* `Accepted/False/NoMatchingListenerHostname`
130-
* `Accepted/False/NoMatchingParent`
131-
* `Accepted/False/NotAllowedByListeners`
132-
* `Accepted/False/UnsupportedValue`: Custom reason for when the HTTPRoute includes an invalid or unsupported value.
133-
* `Accepted/False/InvalidListener`: Custom reason for when the HTTPRoute references an invalid listener.
134-
* `Accepted/False/GatewayNotProgrammed`: Custom reason for when the Gateway is not Programmed. HTTPRoute may be valid and configured, but will maintain this status as long as the Gateway is not Programmed.
135-
* `ResolvedRefs/True/ResolvedRefs`
136-
* `ResolvedRefs/False/InvalidKind`
137-
* `ResolvedRefs/False/RefNotPermitted`
138-
* `ResolvedRefs/False/BackendNotFound`
139-
* `ResolvedRefs/False/UnsupportedValue`: Custom reason for when one of the HTTPRoute rules has a backendRef with an unsupported value.
144+
* `parents`
145+
* `parentRef` - supported.
146+
* `controllerName` - supported.
147+
* `conditions` - partially supported. Supported (Condition/Status/Reason):
148+
* `Accepted/True/Accepted`
149+
* `Accepted/False/NoMatchingListenerHostname`
150+
* `Accepted/False/NoMatchingParent`
151+
* `Accepted/False/NotAllowedByListeners`
152+
* `Accepted/False/UnsupportedValue`: Custom reason for when the HTTPRoute includes an invalid or unsupported
153+
value.
154+
* `Accepted/False/InvalidListener`: Custom reason for when the HTTPRoute references an invalid listener.
155+
* `Accepted/False/GatewayNotProgrammed`: Custom reason for when the Gateway is not Programmed. HTTPRoute may
156+
be valid and configured, but will maintain this status as long as the Gateway is not Programmed.
157+
* `ResolvedRefs/True/ResolvedRefs`
158+
* `ResolvedRefs/False/InvalidKind`
159+
* `ResolvedRefs/False/RefNotPermitted`
160+
* `ResolvedRefs/False/BackendNotFound`
161+
* `ResolvedRefs/False/UnsupportedValue`: Custom reason for when one of the HTTPRoute rules has a backendRef
162+
with an unsupported value.
140163

141164
### TLSRoute
142165

@@ -156,20 +179,23 @@ Fields:
156179
> Support Level: Core
157180
158181
Fields:
182+
159183
* `spec`
160-
* `to`
161-
* `group` - supported.
162-
* `kind` - supports `Secret` and `Service`.
163-
* `name`- supported.
164-
* `from`
165-
* `group` - supported.
166-
* `kind` - supports `Gateway` and `HTTPRoute`.
167-
* `namespace`- supported.
184+
* `to`
185+
* `group` - supported.
186+
* `kind` - supports `Secret` and `Service`.
187+
* `name`- supported.
188+
* `from`
189+
* `group` - supported.
190+
* `kind` - supports `Gateway` and `HTTPRoute`.
191+
* `namespace`- supported.
168192

169193
### Custom Policies
170194

171195
> Status: Not supported.
172196
173-
Custom policies will be NGINX Kubernetes Gateway-specific CRDs that will allow supporting features like timeouts, load-balancing methods, authentication, etc. - important data-plane features that are not part of the Gateway API spec.
197+
Custom policies will be NGINX Kubernetes Gateway-specific CRDs that will allow supporting features like timeouts,
198+
load-balancing methods, authentication, etc. - important data-plane features that are not part of the Gateway API spec.
174199

175-
While those CRDs are not part of the Gateway API, the mechanism of attaching them to Gateway API resources is part of the Gateway API. See the [Policy Attachment doc](https://gateway-api.sigs.k8s.io/references/policy-attachment/).
200+
While those CRDs are not part of the Gateway API, the mechanism of attaching them to Gateway API resources is part of
201+
the Gateway API. See the [Policy Attachment doc](https://gateway-api.sigs.k8s.io/references/policy-attachment/).

0 commit comments

Comments
 (0)