Skip to content

Commit 0a655eb

Browse files
Updating KEP for current dual-stack plan
Signed-off-by: Bridget Kromhout <[email protected]>
1 parent 02aa997 commit 0a655eb

File tree

2 files changed

+66
-23
lines changed

2 files changed

+66
-23
lines changed

keps/sig-network/563-dual-stack/README.md

Lines changed: 53 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,7 +1242,9 @@ v1.20: Relaunched to `Alpha`
12421242
12431243
v1.21: Moved from `Alpha` to `Beta`
12441244
1245-
v1.22: Moved from `Beta` to `Stable`
1245+
v1.22: Gathering beta user feedback and making bugfixes as needed.
1246+
1247+
v1.23: Planning to move from `Beta` to `Stable`
12461248
12471249
## Alternatives
12481250
@@ -1390,10 +1392,17 @@ This capability will move to stable when the following criteria have been met.
13901392
13911393
13921394
* **How can this feature be enabled / disabled in a live cluster?**
1393-
- With this feature moving to stable, the feature will always be enabled.
1394-
- While disabling the feature is not possible, using it is not required. Any
1395-
cluster can be provisioned as single-stack by setting `--cluster-cidr` to
1396-
only one CIDR and ` --service-cluster-ip-range` to only one address block.
1395+
- While the feature is in beta:
1396+
[X] Feature gate (also fill in values in `kep.yaml`)
1397+
- Feature gate name: IPv6DualStack
1398+
- Components depending on the feature gate:
1399+
kube-apiserver, kube-controller-manager, kube-proxy, and kubelet
1400+
1401+
- When this feature moves to stable, the feature will always be enabled.
1402+
- While disabling the feature will not be possible after the move to stable,
1403+
using it is not required. Any cluster can be provisioned as single-stack by
1404+
setting `--cluster-cidr` to only one CIDR and ` --service-cluster-ip-range`
1405+
to only one address block.
13971406
13981407
* **Does enabling the feature change any default behavior?**
13991408
Pods and Services will remain single-stack until cli flags have been modified
@@ -1404,11 +1413,30 @@ This capability will move to stable when the following criteria have been met.
14041413
14051414
* **Can the feature be disabled once it has been enabled (i.e. can we roll back
14061415
the enablement)?**
1407-
As the feature is stable, it is always available. However, it need not be used.
1416+
1417+
Yes. If you decide to turn off dual-stack after turning on:
1418+
1. Ensure all services are converted to single-stack first (downgraded to
1419+
single-stack as described in this KEP)
1420+
2. Remove the CLI parameters.
1421+
3. Disable the feature.
1422+
1423+
Notes:
1424+
1. When the user disables dual-stack from the controller manager,
1425+
endpointSlices will no longer be created for the alternative IP family.
1426+
2. Existing endpointSlices for the alternative family will not be
1427+
automatically removed; this is left to the operator.
1428+
3. Existing dual-stack service configurations will remain in place when
1429+
the feature is disabled, but no routing will happen and no
1430+
endpointSlices will be created while the feature is disabled.
1431+
1432+
- When the feature becomes stable, it will always be available. However, it
1433+
need not be used.
14081434
14091435
* **What happens if we reenable the feature if it was previously rolled back?**
14101436
1411-
The controller manager will automatically update endpoints and endpointSlices
1437+
If the system has no existing dual-stack services, then it will be treated
1438+
as a new enablement. However, if dual-stack services exist in the cluster,
1439+
the controller manager will automatically update endpoints and endpointSlices
14121440
to match the service IP families. When the feature is reenabled, kube-proxy
14131441
will automatically start updating iptables/ipvs rules for the alternative
14141442
ipfamily, for existing and new dual-stack services.
@@ -1420,27 +1448,28 @@ This capability will move to stable when the following criteria have been met.
14201448
iptables rules are fully propagated.
14211449
14221450
* **Are there any tests for feature enablement/disablement?**
1423-
The feature was tested before stable, using integration tests with gate on/off. The
1424-
tests can be found here: https://github.com/kubernetes/kubernetes/tree/master/test/integration/dualstack
1451+
The feature is tested before going stable, using integration tests with gate
1452+
on/off. The tests can be found here: https://github.com/kubernetes/kubernetes/tree/master/test/integration/dualstack
14251453
1426-
The feature was tested on a cloud provider and kind.
1454+
The feature is tested on a cloud provider and kind.
14271455
1. azure dual-stack e2e: https://testgrid.k8s.io/sig-network-dualstack-azure-e2e
14281456
2. kind dual-stack iptables: https://testgrid.k8s.io/sig-network-kind#sig-network-kind,%20dual,%20master
14291457
3. kind dual-stack ipvs: https://testgrid.k8s.io/sig-network-kind#sig-network-kind,%20ipvs,%20master
14301458
14311459
### Rollout, Upgrade and Rollback Planning
14321460
14331461
* **How can a rollout fail? Can it impact already running workloads?**
1434-
14351462
Users **must** avoid changing existing CIDRs for both pods and services.
14361463
Users can only add an alternative ip family to existing CIDRs. Changing
14371464
existing CIDRs will result in nondeterministic failures depending on how the
14381465
cluster networking was configured.
14391466
1440-
Existing workloads are not expected to be impacted during rollout. A component
1441-
restart during rollout might delay generating endpoints and endpointSlices for
1442-
alternative IP families. If there are *new* workloads that depend on the
1443-
endpointSlices, these workloads will fail until the endpoint slices are created.
1467+
Existing workloads are not expected to be impacted during rollout. When you
1468+
disable dual-stack, existing services aren't deleted, but routes for
1469+
alternative families are disabled. A component restart during rollout might
1470+
delay generating endpoints and endpointSlices for alternative IP families.
1471+
If there are *new* workloads that depend on the endpointSlices, these
1472+
workloads will fail until the endpoint slices are created.
14441473
14451474
Because of the nature of the gradual rollout (node by node) of the dual-stack
14461475
feature, endpoints for the alternative IP family will not be created for
@@ -1559,18 +1588,23 @@ resource usage (CPU, RAM, disk, IO, ...) in any components?**
15591588
CNI provider.
15601589
3. Service CIDRs need to be sufficiently large to allow for creation of
15611590
new services.
1591+
4. Dual-stack CLI flags must be configured on the cluster as defined in the [dual-stack docs](https://kubernetes.io/docs/concepts/services-networking/dual-stack/#enable-ipv4-ipv6-dual-stack)
15621592
15631593
* Failure to create dual-stack services. Operator must perform the following steps:
1564-
1. Ensure that the cluster is running a version of Kubernetes with the `IPv6DualStack`
1565-
feature enabled.
1594+
1. Ensure that the cluster has `IPv6DualStack` feature enabled.
15661595
2. Ensure that api-server is correctly configured with multi (dual-stack) service
15671596
CIDRs using `--services-cluster-ip-range` flag.
15681597
15691598
* Failure to route traffic to pod backing a dual-stack service. Operator must perform the following steps:
15701599
1. Ensure that nodes (where the pod is running) are configured for dual-stack
15711600
a. Node is using dual-stack enabled CNI.
1601+
b. kubelet is configured with dual-stack feature flag.
1602+
c. kube-proxy is configured with dual-stack feature flag.
1603+
2. Ensure that api-server is configured for dual-stack
1604+
a. Feature flag is turned on.
15721605
3. Ensure that kube-controller-manager is configured for dual-stack
1573-
a. `--cluster-cidr` cli flag is correctly configured with dual-stack
1606+
a. Feature flag is turned on.
1607+
b. `--cluster-cidr` cli flag is correctly configured with dual-stack
15741608
where applicable.
15751609
4. Operator can ensure that `endpoints` and `endpointSlices` are correctly
15761610
created for the service in question by using kubectl.
@@ -1580,7 +1614,7 @@ resource usage (CPU, RAM, disk, IO, ...) in any components?**
15801614
scaling with dual-stack it may take time to attach all ready endpoints.
15811615
15821616
* CNI changes may affect legacy workloads.
1583-
1. When dual-stack is configured, DNS queries will start returning
1617+
1. When dual-stack is configured and enabled, DNS queries will start returning
15841618
IPv4(A) and IPv6(AAAA).
15851619
2. If a workload doesn't account for being offered both IP families, it
15861620
may fail in unexpected ways. For example, firewall rules may need to be

keps/sig-network/563-dual-stack/kep.yaml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,20 @@ prr-approvers:
1919
- "@johnbelamaric"
2020
editor: TBD
2121
creation-date: "2018-05-21"
22-
last-updated: "2021-04-26"
23-
status: implemented
24-
stage: stable
22+
last-updated: "2021-05-03"
23+
status: implementable
24+
stage: beta
2525
latest-milestone: v1.22
2626
milestone:
2727
alpha: "v1.20"
2828
beta: "v1.21"
29-
stable: "v1.22"
29+
stable: "v1.23"
30+
feature-gates:
31+
- name: IPv6DualStack
32+
components:
33+
- kube-apiserver
34+
- kube-controller-manager
35+
- kubelet
36+
- kube-proxy
37+
disable-supported: true
38+
metrics: []

0 commit comments

Comments
 (0)