You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -139,18 +139,17 @@ The [documentation](https://kubernetes.io/docs/concepts/services-networking/serv
139
139
140
140
This KEP proposes to declare standard Kubernetes protocol names for common protocols that are not IANA standard service names.
141
141
142
-
Those common protocols will be well defined strings prefixed with ‘k8s.io’.
143
-
`k8s.io/h2c` as an example.
142
+
Those common protocols will be well defined strings prefixed with ‘kubernetes.io’.
143
+
`kubernetes.io/h2c` as an example.
144
144
145
145
### New Standard Protocols
146
-
- 'k8s.io/http2'
147
-
- 'k8s.io/grpc'
148
-
- 'k8s.io/tcp'
146
+
- 'kubernetes.io/h2c'
147
+
- 'kubernetes.io/grpc'
149
148
150
149
### Risks and Mitigations
151
150
152
151
There are no real “risks”, primary concerns are:
153
-
1. End users will not migrate to `k8s.io/<>` values
152
+
1. End users will not migrate to `kubernetes.io/<>` values
154
153
2. It will take long time to implementations align with the new standards
155
154
3. We have no easy way to monitor who is aligned and who is not
156
155
@@ -168,21 +167,19 @@ type ServicePort struct {
168
167
...
169
168
...
170
169
171
-
// Used as a hint for implementations to
172
-
// configure the protocol used between the
173
-
// implementation and the application it exposes.
174
-
// This field follows standard Kubernetes label syntax.
175
-
// Valid values are either:
176
-
//
177
-
// * Un-prefixed protocol names - reserved for IANA standard service names (as per
178
-
// RFC-6335 and https://www.iana.org/assignments/service-names).
179
-
//
180
-
// * Kubernetes standard names:
181
-
// * 'k8s.io/http2' - http2 over cleartext, aka 'h2c'. https://www.rfc-editor.org/rfc/rfc7540
182
-
// * 'k8s.io/grpc' - grpc traffic - see https://github.com/grpc/grpc/blob/v1.51.1/doc/PROTOCOL-HTTP2.md
183
-
// * 'k8s.io/tcp' - plain tcp traffic
184
-
//
185
-
// * Other protocols should use prefixed names such as
170
+
// The application protocol for this port.
171
+
// This is used as a hint for implementations to offer richer behavior for protocols that they understand.
172
+
// This field follows standard Kubernetes label syntax.
173
+
// Valid values are either:
174
+
//
175
+
// * Un-prefixed protocol names - reserved for IANA standard service names (as per
176
+
// RFC-6335 and https://www.iana.org/assignments/service-names).
177
+
//
178
+
// * Kubernetes-defined prefixed names:
179
+
// * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540
180
+
// * 'kubernetes.io/grpc' - gRPC over HTTP/2 as described in https://github.com/grpc/grpc/blob/v1.51.1/doc/PROTOCOL-HTTP2.md
181
+
//
182
+
// * Other protocols should use implementation-defined prefixed names such as
186
183
// mycompany.com/my-custom-protocol.
187
184
// +optional
188
185
AppProtocol *string
@@ -200,18 +197,21 @@ In order to be included in the collection, a new protocol must:
200
197
201
198
<<[UNRESOLVED sig-network ]>>
202
199
203
-
if we require two implementations to support a protocol before we include it in the standard collection (i.e k8s.io prefixed collection) we create a situation where we force them to support their own domain prefixed values and k8s.io-prefixed values, have their users migrate to the k8s.io values once they are included, and also the k8s.io ones might end up not be quite the same definition as the implementation specific ones (as we see in the GKE & Istio example).
200
+
if we require two implementations to support a protocol before we include it in the standard collection (i.e kubernetes.io prefixed collection) we create a situation where we force them to support their own domain prefixed values and kubernetes.io-prefixed values, have their users migrate to the kubernetes.io values once they are included, and also the kubernetes.io ones might end up not be quite the same definition as the implementation specific ones (as we see in the GKE & Istio example).
204
201
205
202
The proposed followup work might address this problem also when we turn the field into a list
206
203
207
204
<<[/UNRESOLVED]>>
208
205
209
206
210
207
### Followup work
211
-
To support implementations interoperability with different domain prefixed protocols (or a mix domain prefixed and non prefixed protocol) for the same port we need to turn `AppProtocol` to a list.
208
+
- To support implementations interoperability with different domain prefixed protocols (or a mix domain prefixed and non prefixed protocol) for the same port we need to turn `AppProtocol` to a list.
212
209
213
210
It is likely to be an API change but design details TBD.
214
211
212
+
- Some implementations are trying to guess the application protocol in absence of `appProtocol`. We should consider adding a new protocol like `kubernetes.io/raw` to the collection that would instructs implementations to process requests as raw.
213
+
We need to look at combination of `appProtocol: kubernetes.io/raw` and the different supported port protocols (TCP, UDP, SCTP).
214
+
215
215
### Documentation change
216
216
217
217
[kubernetes website](https://github.com/kubernetes/website/blob/main/content/en/docs/concepts/services-networking/service.md#application-protocol) will be changed accordingly
@@ -282,7 +282,7 @@ N/A
282
282
283
283
## Drawbacks
284
284
285
-
* The collection of the standard protocols can become stale fairly quick when new protocols are implemented before we decide to declare them as part of k8s.io common collection. That can lead to a the current state again where implementations already implement support without a prefix (although they should not) OR with a domain prefix.
285
+
* The collection of the standard protocols can become stale fairly quick when new protocols are implemented before we decide to declare them as part of kubernetes.io common collection. That can lead to a the current state again where implementations already implement support without a prefix (although they should not) OR with a domain prefix.
0 commit comments