Skip to content

Commit ec47fa9

Browse files
author
Laszlo Janosi
authored
Mixed Protocol LB KEP updates (kubernetes#2058)
* Mixed Protocol LB KEP updates Migrated to the new format Status set to implementable Some more test plan details added * fix review comments * fix review comments * add line feeds * update toc
1 parent 0b4d044 commit ec47fa9

File tree

2 files changed

+233
-47
lines changed

2 files changed

+233
-47
lines changed

keps/sig-network/20200103-mixed-protocol-lb.md renamed to keps/sig-network/1435-mixed-protocol-lb/README.md

Lines changed: 188 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,4 @@
1-
---
2-
title: Different protocols in the same Service definition with type=LoadBalancer
3-
authors:
4-
- "@janosi"
5-
owning-sig: sig-network
6-
participating-sigs:
7-
- sig-cloud-provider
8-
reviewers:
9-
- "@thockin"
10-
- "@dcbw"
11-
- "@andrewsykim"
12-
approvers:
13-
- "@thockin"
14-
editor: TBD
15-
creation-date: 2020-01-03
16-
last-updated: 2020-07-09
17-
status: provisional
18-
see-also:
19-
replaces:
20-
superseded-by:
21-
---
22-
23-
# different protocols in the same service definition with type=loadbalancer
24-
25-
## Table of Contents
1+
# KEP-1435: different protocols in the same service definition with type=loadbalancer
262

273
<!-- toc -->
284
- [Release Signoff Checklist](#release-signoff-checklist)
@@ -55,30 +31,52 @@ superseded-by:
5531
- [Kube-proxy](#kube-proxy)
5632
- [Test Plan](#test-plan)
5733
- [Graduation Criteria](#graduation-criteria)
34+
- [Alpha Graduation](#alpha-graduation)
35+
- [Alpha -&gt; Beta Graduation](#alpha---beta-graduation)
36+
- [Beta -&gt; GA Graduation](#beta---ga-graduation)
37+
- [Removing a Deprecated Flag](#removing-a-deprecated-flag)
5838
- [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy)
5939
- [Downgrade Strategy](#downgrade-strategy)
6040
- [Version Skew Strategy](#version-skew-strategy)
41+
- [Production Readiness Review Questionnaire](#production-readiness-review-questionnaire)
42+
- [Feature Enablement and Rollback](#feature-enablement-and-rollback)
43+
- [Rollout, Upgrade and Rollback Planning](#rollout-upgrade-and-rollback-planning)
44+
- [Monitoring Requirements](#monitoring-requirements)
45+
- [Dependencies](#dependencies)
46+
- [Scalability](#scalability)
47+
- [Troubleshooting](#troubleshooting)
6148
- [Implementation History](#implementation-history)
62-
- [Drawbacks [optional]](#drawbacks-optional)
63-
- [Alternatives [optional]](#alternatives-optional)
64-
- [Infrastructure Needed [optional]](#infrastructure-needed-optional)
49+
- [Drawbacks](#drawbacks)
50+
- [Alternatives](#alternatives)
51+
- [Infrastructure Needed (Optional)](#infrastructure-needed-optional)
6552
<!-- /toc -->
6653

6754
## Release Signoff Checklist
6855

69-
- [ ] kubernetes/enhancements issue in release milestone, which links to KEP (this should be a link to the KEP location in kubernetes/enhancements, not the initial KEP PR) https://github.com/kubernetes/enhancements/issues/1435
70-
- [ ] KEP approvers have set the KEP status to `implementable`
71-
- [ ] Design details are appropriately documented
72-
- [ ] Test plan is in place, giving consideration to SIG Architecture and SIG Testing input
73-
- [ ] Graduation criteria is in place
56+
Items marked with (R) are required *prior to targeting to a milestone / release*.
57+
58+
- [ ] (R) Enhancement issue in release milestone, which links to KEP dir in [kubernetes/enhancements] (not the initial KEP PR)
59+
- [ ] (R) KEP approvers have approved the KEP status as `implementable`
60+
- [ ] (R) Design details are appropriately documented
61+
- [ ] (R) Test plan is in place, giving consideration to SIG Architecture and SIG Testing input
62+
- [ ] (R) Graduation criteria is in place
63+
- [ ] (R) Production readiness review completed
64+
- [ ] Production readiness review approved
7465
- [ ] "Implementation History" section is up-to-date for milestone
7566
- [ ] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io]
76-
- [ ] Supporting documentation e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes
67+
- [ ] Supporting documentation—e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes
68+
69+
70+
[kubernetes.io]: https://kubernetes.io/
71+
[kubernetes/enhancements]: https://git.k8s.io/enhancements
72+
[kubernetes/kubernetes]: https://git.k8s.io/kubernetes
73+
[kubernetes/website]: https://git.k8s.io/website
7774

7875
## Summary
7976

8077
This feature enables the creation of a LoadBalancer Service that has different port definitions with different protocols.
8178

79+
8280
## Motivation
8381

8482
The ultimate goal of this feature is to support users that want to expose their applications via a single IP address but different L4 protocols with a cloud provided load-balancer.
@@ -99,6 +97,7 @@ The goals of this KEP are:
9997

10098
### Non-Goals
10199

100+
N/A
102101

103102
## Proposal
104103

@@ -267,7 +266,6 @@ A user can ask for an internal Load Balancer via a K8s Service definition that
267266

268267
Summary: Tencent Cloud CPI and LBs seem to support mixed protocol Services, and the pricing is not based on the number of protocols per Service.
269268

270-
271269
### Risks and Mitigations
272270

273271
#### Billing perspective
@@ -307,7 +305,7 @@ Our feature does not introduce new values or new fields. It enables the usage of
307305
- Oracle: no risk. The CPI and LB already supports mixed protocols. The same situation like in the case of Alibaba.
308306
- Tencent Cloud: no risk. The CPI and LB already supports mixed protocols. The same situation like in the case of Alibaba.
309307

310-
As stated above we must implement a feature gate based phased introduction for this feature because of its effects. See the `Proposed solution` part for details in this document below.
308+
As stated above we must implement a feature gate based phased introduction for this feature because of its effects. See the `The selected solution for the option control` part for details in this document below.
311309

312310
## Design Details
313311

@@ -475,9 +473,14 @@ In the long term:
475473

476474
The kube-proxy should use the port status information from `Service.status.loadBalancer.ingress` in order not to allow traffic to those ports that could not be opened by the load balancer either.
477475

476+
478477
### Test Plan
479478

480479
There must be e2e cases that test whether CPI implementations handle Service definitions with mixed protocol configuration on a consistent way. I.e. either the cloud LB is set up properly or the Service is rejected by the CPI implementation.
480+
The e2e tests shall check that
481+
- a multi-protocol Service triggers the creation of a multi-protocol cloud load balancer
482+
Optionally, if the CPI supports that:
483+
- the CPI sets the new Conditions and or Port Status in the Load Balancer Service after creating the cloud load balancer
481484

482485
### Graduation Criteria
483486

@@ -487,6 +490,21 @@ From CPI implementation perspective thet feature can be graduated to beta, as th
487490

488491
Graduating to GA means, that the feature flag checking is removed from the code. It means, that all CPI implementations must be ready to deal with Services with mixed protocol configuration - either rejecting such Services properly or managing the cloud load balancers according to the Service definition.
489492

493+
#### Alpha Graduation
494+
495+
- Feature is implemented and controller with a feature flag. The feature flag is disabled by default.
496+
497+
#### Alpha -> Beta Graduation
498+
499+
- We shall have test results or real life usage results from the affected clouds that prove that the enabling of this feature does not break their load balancer management and functionality.
500+
501+
#### Beta -> GA Graduation
502+
503+
TBD
504+
505+
#### Removing a Deprecated Flag
506+
507+
TBD
490508

491509
### Upgrade / Downgrade Strategy
492510

@@ -504,20 +522,143 @@ Version skew is possible among the following components in this case: K8s API se
504522

505523
Once this feature is implemented in the API server there is a chance that the CPI implementation has to deal with load balancer Services with mixed protocol configuration anytime, even if the API server is downgraded later. The CPI implementation shall be prepared for this, i.e. the CPI implementation cannot expect anymore that the API Server (or any other component, like the Service Controller) filters out such Service definitions. If the CPI implementation wants to have such filtering it has to implement that on its own. In this case the CPI implementation shall be upgraded before the feature is enabled on the API server. In case of a rollback of the API Server such Services can still exist in the cluster, so the CPI implementation should not be downgraded to a version that does not implement that filtering. This is the reason why the CPI implementations shall be updated (if necessary) to be able to deal with such Service definitions already in the first release of this feature.
506524

525+
## Production Readiness Review Questionnaire
526+
527+
### Feature Enablement and Rollback
528+
529+
_This section must be completed when targeting alpha to a release._
530+
531+
* **How can this feature be enabled / disabled in a live cluster?**
532+
- [x] Feature gate (also fill in values in `kep.yaml`)
533+
- Feature gate name: MixedProtocolLBSVC
534+
- Components depending on the feature gate: Kubernetes API Server
535+
536+
* **Does enabling the feature change any default behavior?**
537+
538+
When the feature is enabled the Services with mixed protocols are not rejected anymore by the Kuber API server, and it is up to the CPI to handle those.
539+
Please see the analysis at `API change and upgrade/downgrade situations`
540+
541+
* **Can the feature be disabled once it has been enabled (i.e. can we roll back
542+
the enablement)?**
543+
544+
Yes.
545+
546+
* **What happens if we reenable the feature if it was previously rolled back?**
547+
548+
Nothing serious, as this feature removes a restriction in the API Server. I.e. this direction does not introduce problems.
549+
550+
* **Are there any tests for feature enablement/disablement?**
551+
552+
TBD
553+
554+
### Rollout, Upgrade and Rollback Planning
555+
556+
_This section must be completed when targeting beta graduation to a release._
557+
558+
* **How can a rollout fail? Can it impact already running workloads?**
559+
560+
TBD
561+
562+
* **What specific metrics should inform a rollback?**
563+
564+
TBD
565+
566+
* **Were upgrade and rollback tested? Was the upgrade->downgrade->upgrade path tested?**
567+
568+
TBD
569+
570+
### Monitoring Requirements
571+
572+
_This section must be completed when targeting beta graduation to a release._
573+
574+
* **How can an operator determine if the feature is in use by workloads?**
575+
576+
TBD
577+
578+
* **What are the SLIs (Service Level Indicators) an operator can use to determine
579+
the health of the service?**
580+
- [ ] Metrics
581+
- Metric name:
582+
- [Optional] Aggregation method:
583+
- Components exposing the metric:
584+
- [ ] Other (treat as last resort)
585+
- Details:
586+
587+
* **What are the reasonable SLOs (Service Level Objectives) for the above SLIs?**
588+
589+
TBD
590+
591+
* **Are there any missing metrics that would be useful to have to improve observability
592+
of this feature?**
593+
594+
TBD
595+
596+
### Dependencies
597+
598+
_This section must be completed when targeting beta graduation to a release._
599+
600+
* **Does this feature depend on any specific services running in the cluster?**
601+
CPIs shall be prepared to handle Service definitions with mixed protocols. Please see the analysis above.
602+
603+
604+
### Scalability
605+
606+
* **Will enabling / using this feature result in any new API calls?**
607+
608+
If a CPI supports the management of the new Conditions and PortStatus in the LoadBalancer Service the managemenof of those fileds will mean additional traffic on the API
609+
610+
* **Will enabling / using this feature result in introducing new API types?**
611+
612+
No
613+
614+
* **Will enabling / using this feature result in any new calls to the cloud
615+
provider?**
616+
617+
If the cloud provider requires more calls to add ports/listeners with different protocols to a load balancer then this feature introduces additional calls
618+
619+
* **Will enabling / using this feature result in increasing size or count of
620+
the existing API objects?**
621+
622+
Yes. As detailed above, the Status of the Service is planned to be extended with new Conditions and PortStatus
623+
624+
* **Will enabling / using this feature result in increasing time taken by any
625+
operations covered by [existing SLIs/SLOs]?**
626+
627+
The setup of more ports/listeners with different protocols may take more time, depending on how the CPI and the cloud provider API is implemented
628+
629+
* **Will enabling / using this feature result in non-negligible increase of
630+
resource usage (CPU, RAM, disk, IO, ...) in any components?**
631+
632+
Not expected.
633+
634+
### Troubleshooting
635+
636+
* **How does this feature react if the API server and/or etcd is unavailable?**
637+
638+
* **What are other known failure modes?**
639+
640+
TBD
641+
642+
* **What steps should be taken if SLOs are not being met to determine the problem?**
643+
644+
TBD
645+
646+
[supported limits]: https://git.k8s.io/community//sig-scalability/configs-and-limits/thresholds.md
647+
[existing SLIs/SLOs]: https://git.k8s.io/community/sig-scalability/slos/slos.md#kubernetes-slisslos
648+
507649
## Implementation History
508650

509-
Major milestones in the life cycle of a KEP should be tracked in `Implementation History`.
510-
Major milestones might include
651+
- the `Proposal` section being merged, signaling agreement on a proposed design: 14th July 2020
652+
653+
## Drawbacks
654+
655+
TBD
511656

512-
- the `Summary` and `Motivation` sections being merged signaling SIG acceptance
513-
- the `Proposal` section being merged signaling agreement on a proposed design
514-
- the date implementation started
515-
- the first Kubernetes release where an initial version of the KEP was available
516-
- the version of Kubernetes where the KEP graduated to general availability
517-
- when the KEP was retired or superseded
657+
## Alternatives
518658

519-
## Drawbacks [optional]
659+
No known alternatives, beside those analysed above.
520660

521-
## Alternatives [optional]
661+
## Infrastructure Needed (Optional)
522662

523-
## Infrastructure Needed [optional]
663+
The Cloud Load Balancer shall support the setup of different protocols on the same IP address in order to utilize the benefits of this feature.
664+
The CPI implementation shall either indicate problems with the Service in the new status fields, or the CPI shall be able to setup the cloud load balancer with the different protocols.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
title: Different protocols in the same service definition with type=loadbalancer
2+
kep-number: 1435
3+
authors:
4+
5+
owning-sig: sig-network
6+
participating-sigs:
7+
- sig-cloud-provider
8+
status: implementable
9+
creation-date: 2020-01-03
10+
reviewers:
11+
- "@thockin"
12+
- "@dcbw"
13+
- "@andrewsykim"
14+
approvers:
15+
- "@thockin"
16+
prr-approvers:
17+
see-also:
18+
replaces:
19+
- "/keps/sig-network/ 20200103-mixed-protocol-lb"
20+
21+
# The target maturity stage in the current dev cycle for this KEP.
22+
stage: alpha
23+
24+
# The most recent milestone for which work toward delivery of this KEP has been
25+
# done. This can be the current (upcoming) milestone, if it is being actively
26+
# worked on.
27+
latest-milestone: "v1.20"
28+
29+
# The milestone at which this feature was, or is targeted to be, at each stage.
30+
milestone:
31+
alpha: "v1.20"
32+
beta: "v1.21"
33+
stable: "v1.22"
34+
35+
# The following PRR answers are required at alpha release
36+
# List the feature gate name and the components for which it must be enabled
37+
feature-gates:
38+
- name: MixedProtocolLBSVC
39+
components:
40+
- kube-apiserver
41+
disable-supported: true
42+
43+
# The following PRR answers are required at beta release
44+
#metrics:
45+
# - my_feature_metric

0 commit comments

Comments
 (0)