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
Copy file name to clipboardExpand all lines: keps/sig-network/3726-standard-application-protocols/README.md
+15-17Lines changed: 15 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -139,18 +139,16 @@ 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'
149
147
150
148
### Risks and Mitigations
151
149
152
150
There are no real “risks”, primary concerns are:
153
-
1. End users will not migrate to `k8s.io/<>` values
151
+
1. End users will not migrate to `kubernetes.io/<>` values
154
152
2. It will take long time to implementations align with the new standards
155
153
3. We have no easy way to monitor who is aligned and who is not
156
154
@@ -168,21 +166,18 @@ type ServicePort struct {
168
166
...
169
167
...
170
168
171
-
// Used as a hint for implementations to
172
-
// configure the protocol used between the
173
-
// implementation and the application it exposes.
169
+
// The application protocol for this port.
170
+
// This is used as a hint for implementations to offer richer behavior for protocols that they understand.
174
171
// This field follows standard Kubernetes label syntax.
175
172
// Valid values are either:
176
173
//
177
174
// * Un-prefixed protocol names - reserved for IANA standard service names (as per
178
175
// RFC-6335 and https://www.iana.org/assignments/service-names).
179
176
//
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
177
+
// * Kubernetes-defined prefixed names:
178
+
// * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540
184
179
//
185
-
// * Other protocols should use prefixed names such as
180
+
// * Other protocols should use implementation-defined prefixed names such as
186
181
// mycompany.com/my-custom-protocol.
187
182
// +optional
188
183
AppProtocol *string
@@ -200,18 +195,21 @@ In order to be included in the collection, a new protocol must:
200
195
201
196
<<[UNRESOLVED sig-network ]>>
202
197
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).
198
+
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
199
205
200
The proposed followup work might address this problem also when we turn the field into a list
206
201
207
202
<<[/UNRESOLVED]>>
208
203
209
204
210
205
### 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.
206
+
- 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
207
213
208
It is likely to be an API change but design details TBD.
214
209
210
+
- 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.
211
+
We need to look at combination of `appProtocol: kubernetes.io/raw` and the different supported port protocols (TCP, UDP, SCTP).
212
+
215
213
### Documentation change
216
214
217
215
[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 +280,7 @@ N/A
282
280
283
281
## Drawbacks
284
282
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.
283
+
* 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