Skip to content

Commit 421cbfe

Browse files
committed
Add expanded DNS configuration KEP#2595
1 parent 841863e commit 421cbfe

File tree

2 files changed

+329
-0
lines changed

2 files changed

+329
-0
lines changed
Lines changed: 283 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,283 @@
1+
# KEP-2595: Expanded DNS Configuration
2+
3+
<!-- toc -->
4+
- [Release Signoff Checklist](#release-signoff-checklist)
5+
- [Summary](#summary)
6+
- [Motivation](#motivation)
7+
- [Goals](#goals)
8+
- [Non-Goals](#non-goals)
9+
- [Proposal](#proposal)
10+
- [User Stories (Optional)](#user-stories-optional)
11+
- [Story 1](#story-1)
12+
- [Story 2](#story-2)
13+
- [Notes/Constraints/Caveats (Optional)](#notesconstraintscaveats-optional)
14+
- [Risks and Mitigations](#risks-and-mitigations)
15+
- [Design Details](#design-details)
16+
- [Test Plan](#test-plan)
17+
- [Graduation Criteria](#graduation-criteria)
18+
- [Alpha -&gt; Beta Graduation](#alpha---beta-graduation)
19+
- [Beta -&gt; GA Graduation](#beta---ga-graduation)
20+
- [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy)
21+
- [Version Skew Strategy](#version-skew-strategy)
22+
- [Production Readiness Review Questionnaire](#production-readiness-review-questionnaire)
23+
- [Feature Enablement and Rollback](#feature-enablement-and-rollback)
24+
- [Rollout, Upgrade and Rollback Planning](#rollout-upgrade-and-rollback-planning)
25+
- [Monitoring Requirements](#monitoring-requirements)
26+
- [Dependencies](#dependencies)
27+
- [Scalability](#scalability)
28+
- [Troubleshooting](#troubleshooting)
29+
- [Implementation History](#implementation-history)
30+
- [Drawbacks](#drawbacks)
31+
- [Alternatives](#alternatives)
32+
- [Infrastructure Needed (Optional)](#infrastructure-needed-optional)
33+
<!-- /toc -->
34+
35+
## Release Signoff Checklist
36+
37+
Items marked with (R) are required *prior to targeting to a milestone / release*.
38+
39+
- [ ] (R) Enhancement issue in release milestone, which links to KEP dir in [kubernetes/enhancements] (not the initial KEP PR)
40+
- [ ] (R) KEP approvers have approved the KEP status as `implementable`
41+
- [ ] (R) Design details are appropriately documented
42+
- [ ] (R) Test plan is in place, giving consideration to SIG Architecture and SIG Testing input (including test refactors)
43+
- [ ] (R) Graduation criteria is in place
44+
- [ ] (R) Production readiness review completed
45+
- [ ] (R) Production readiness review approved
46+
- [ ] "Implementation History" section is up-to-date for milestone
47+
- [ ] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io]
48+
- [ ] Supporting documentation—e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes
49+
50+
[kubernetes.io]: https://kubernetes.io/
51+
[kubernetes/enhancements]: https://git.k8s.io/enhancements
52+
[kubernetes/kubernetes]: https://git.k8s.io/kubernetes
53+
[kubernetes/website]: https://git.k8s.io/website
54+
55+
## Summary
56+
57+
Allow kubernetes to have expanded DNS(Domain Name System) configuration.
58+
59+
## Motivation
60+
61+
Kubernetes today limits DNS configuration according to [the obsolete
62+
criteria](https://access.redhat.com/solutions/58028). As recent DNS resolvers
63+
allow an arbitrary number of search paths, a new feature gate
64+
`ExpandedDNSConfig` will be introduced. With this feature, kubernetes allows
65+
more DNS search paths and longer list of DNS search paths to keep up with recent
66+
DNS resolvers.
67+
68+
Confirmed that expanded DNS configuration is supported by
69+
- `glibc 2.17-323`
70+
- `glibc 2.28`
71+
- `musl libc 1.22`
72+
- `pure Go 1.10 resolver`
73+
- `pure Go 1.16 resolver`
74+
75+
### Goals
76+
77+
- Make `kube-apiserver` allow expanded DNS configuration when validating Pod's
78+
or PodTemplate's `DNSConfig`
79+
- Make `kubelet` allow expanded DNS configuration when validating `resolvConf`
80+
- Make `kubelet` allow expanded DNS configuration when validating actual DNS
81+
resolver configuration composed of `cluster domain suffixes`(e.g.
82+
default.svc.cluster.local, svc.cluster.local, cluster.local), kubelet's
83+
`resolvConf` and Pod's `DNSConfig`
84+
85+
### Non-Goals
86+
87+
- Remove limitation on DNS search paths completely
88+
- Let cluster administrators limit the number of search paths or the length of
89+
DNS search path list to an arbitrary number
90+
91+
## Proposal
92+
93+
- Expand `MaxDNSSearchPaths` to 32
94+
- Expand `MaxDNSSearchListChars` to 2048
95+
96+
### User Stories (Optional)
97+
98+
#### Story 1
99+
100+
#### Story 2
101+
102+
### Notes/Constraints/Caveats (Optional)
103+
104+
This enhancement relaxes the validation of `Pod` and `PodTemplate`. Once the
105+
feature is activated, it must be carefully disabled. Otherwise, the objects left
106+
over from the previous version which have the expanded DNS configuration can be
107+
problematic.
108+
109+
### Risks and Mitigations
110+
111+
There may be some environments(DNS resolver or others) that break without
112+
current limitations. At this point, it is fair to open a bug, so they can fix it.
113+
114+
## Design Details
115+
116+
- Declare and define `MaxDNSSearchPathsExpanded` to `32` and
117+
`MaxDNSSearchListCharsExpanded` to `2048`
118+
- Add the feature gate `ExpandedDNSConfig` (see [Feature Enablement and
119+
Rollback](#feature-enablement-and-rollback))
120+
- If the feature gate `ExpandedDNSConfig` is enabled, replace
121+
`MaxDNSSearchPaths` with `MaxDNSSearchPathsExpanded` and replace
122+
`MaxDNSSearchListChars` with `MaxDNSSearchListCharsExpanded` to allow expanded
123+
DNS configuration
124+
125+
### Test Plan
126+
127+
- Add unit tests of validating expanded DNS config
128+
129+
### Graduation Criteria
130+
131+
#### Alpha -> Beta Graduation
132+
133+
- Address feedback from alpha
134+
- Sufficient testing
135+
136+
#### Beta -> GA Graduation
137+
138+
- Address feedback from beta
139+
- Sufficient number of users using the feature
140+
- Close on any remaining open issues & bugs
141+
142+
### Upgrade / Downgrade Strategy
143+
144+
N/A
145+
146+
### Version Skew Strategy
147+
148+
In clusters with a replicated control plane, all kube-apiservers should enable
149+
or disable the expanded DNS configuration feature.
150+
151+
## Production Readiness Review Questionnaire
152+
153+
### Feature Enablement and Rollback
154+
155+
- **How can this feature be enabled / disabled in a live cluster?**
156+
- [x] Feature gate (also fill in values in `kep.yaml`)
157+
- Feature gate name: `ExpandedDNSConfig`
158+
- Components depending on the feature gate:
159+
- `kubelet`
160+
- `kube-apiserver`
161+
- [ ] Other
162+
- Describe the mechanism:
163+
- Will enabling / disabling the feature require downtime of the control
164+
plane?
165+
- Will enabling / disabling the feature require downtime or reprovisioning
166+
of a node? (Do not assume `Dynamic Kubelet Config` feature is enabled).
167+
168+
- **Does enabling the feature change any default behavior?**
169+
170+
Enabling this feature allows kubernetes to have objects(Pod or PodTemplate) with
171+
the expanded DNS configuration.
172+
173+
- **Can the feature be disabled once it has been enabled (i.e. can we roll back the enablement)?**
174+
175+
Yes, the feature can be disabled by disabling the feature gate.
176+
177+
Once the feature is disabled, kube-apiserver will reject the pod having expanded
178+
DNS configuration and kubelet will create a resolver configuration excluding the
179+
overage.
180+
181+
- **What happens if we reenable the feature if it was previously rolled back?**
182+
183+
It should continue to work as expected.
184+
185+
- **Are there any tests for feature enablement/disablement?**
186+
187+
We will add unit tests.
188+
189+
### Rollout, Upgrade and Rollback Planning
190+
191+
- **How can a rollout fail? Can it impact already running workloads?**
192+
193+
N/A
194+
195+
- **What specific metrics should inform a rollback?**
196+
197+
N/A
198+
199+
- **Were upgrade and rollback tested? Was the upgrade->downgrade->upgrade path tested?**
200+
201+
N/A
202+
203+
- **Is the rollout accompanied by any deprecations and/or removals of features, APIs, fields of API types, flags, etc.?**
204+
205+
N/A
206+
207+
### Monitoring Requirements
208+
209+
- **How can an operator determine if the feature is in use by workloads?**
210+
211+
N/A
212+
213+
- **What are the SLIs (Service Level Indicators) an operator can use to determine the health of the service?**
214+
- [ ] Metrics
215+
- Metric name:
216+
- [Optional] Aggregation method:
217+
- Components exposing the metric:
218+
- [ ] Other (treat as last resort)
219+
- Details:
220+
221+
N/A
222+
223+
- **What are the reasonable SLOs (Service Level Objectives) for the above SLIs?**
224+
225+
N/A
226+
227+
- **Are there any missing metrics that would be useful to have to improve observability of this feature?**
228+
229+
N/A
230+
231+
### Dependencies
232+
233+
- **Does this feature depend on any specific services running in the cluster?**
234+
235+
N/A
236+
237+
### Scalability
238+
239+
- **Will enabling / using this feature result in any new API calls?**
240+
241+
N/A
242+
243+
- **Will enabling / using this feature result in introducing new API types?**
244+
245+
N/A
246+
247+
- **Will enabling / using this feature result in any new calls to the cloud provider?**
248+
249+
N/A
250+
251+
- **Will enabling / using this feature result in increasing size or count of the existing API objects?**
252+
253+
N/A
254+
255+
- **Will enabling / using this feature result in increasing time taken by any operations covered by existing SLIs/SLOs?**
256+
257+
N/A
258+
259+
- **Will enabling / using this feature result in non-negligible increase of resource usage (CPU, RAM, disk, IO, ...) in any components?**
260+
261+
N/A
262+
263+
### Troubleshooting
264+
265+
- **How does this feature react if the API server and/or etcd is unavailable?**
266+
267+
- **What are other known failure modes?**
268+
269+
- **What steps should be taken if SLOs are not being met to determine the problem?**
270+
271+
## Implementation History
272+
273+
- 2021-03-26: [Initial
274+
discussion at #100583](https://github.com/kubernetes/kubernetes/pull/100583)
275+
276+
## Drawbacks
277+
278+
## Alternatives
279+
280+
- Remove the limitation of DNS search paths completely
281+
- Make `MaxDNSSearchPaths` and `MaxDNSSearchListChars` configurable
282+
283+
## Infrastructure Needed (Optional)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
title: Expanded DNS Configuration
2+
kep-number: 2595
3+
authors:
4+
- "@gjkim42"
5+
owning-sig: sig-network
6+
participating-sigs:
7+
- sig-node
8+
status: provisional
9+
creation-date: 2021-04-02
10+
reviewers:
11+
- "@thockin"
12+
- "@liggitt"
13+
- "@aojea"
14+
- "@sftim"
15+
approvers:
16+
- "@thockin"
17+
prr-approvers:
18+
- TBD
19+
see-also:
20+
replaces:
21+
22+
# The target maturity stage in the current dev cycle for this KEP.
23+
stage: alpha
24+
25+
# The most recent milestone for which work toward delivery of this KEP has been
26+
# done. This can be the current (upcoming) milestone, if it is being actively
27+
# worked on.
28+
latest-milestone: "v1.22"
29+
30+
# The milestone at which this feature was, or is targeted to be, at each stage.
31+
milestone:
32+
alpha: "v1.22"
33+
beta: "x.y"
34+
GA: "x.y"
35+
36+
# The following PRR answers are required at alpha release
37+
# List the feature gate name and the components for which it must be enabled
38+
feature-gates:
39+
- name: ExpandedDNSConfig
40+
components:
41+
- kube-apiserver
42+
- kubelet
43+
disable-supported: true
44+
45+
# The following PRR answers are required at beta release
46+
metrics:

0 commit comments

Comments
 (0)