Skip to content

Commit ccbaa19

Browse files
authored
Merge pull request #18421 from prezha/privilegedPorts
add default sysctls to allow privileged ports with no capabilities
2 parents c46b9b4 + 715903e commit ccbaa19

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

pkg/minikube/cruntime/containerd.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,21 @@ func generateContainerdConfig(cr CommandRunner, imageRepository string, kv semve
177177
return errors.Wrap(err, "update conf_dir")
178178
}
179179

180+
// enable 'enable_unprivileged_ports' so that containers that run with non-root user can bind to otherwise privilege ports (like coredns v1.11.0+)
181+
// note: 'net.ipv4.ip_unprivileged_port_start' sysctl was marked as safe since kubernetes v1.22 (Aug 4, 2021) (ref: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.22.md#feature-9)
182+
// note: containerd supports 'enable_unprivileged_ports' option since v1.6.0-beta.3 (Nov 19, 2021) (ref: https://github.com/containerd/containerd/releases/tag/v1.6.0-beta.3; https://github.com/containerd/containerd/pull/6170)
183+
// note: minikube bumped containerd version to greater than v1.6.0 on May 19, 2022 (ref: https://github.com/kubernetes/minikube/pull/14152)
184+
if kv.GTE(semver.Version{Major: 1, Minor: 22}) {
185+
// remove any existing 'enable_unprivileged_ports' settings
186+
if _, err := cr.RunCmd(exec.Command("sh", "-c", fmt.Sprintf(`sudo sed -i '/^ *enable_unprivileged_ports = .*/d' %s`, containerdConfigFile))); err != nil {
187+
return errors.Wrap(err, "removing enable_unprivileged_ports")
188+
}
189+
// add 'enable_unprivileged_ports' with value 'true'
190+
if _, err := cr.RunCmd(exec.Command("sh", "-c", fmt.Sprintf(`sudo sed -i -r 's|^( *)\[plugins."io.containerd.grpc.v1.cri"\]|&\n\1 enable_unprivileged_ports = true|' %s`, containerdConfigFile))); err != nil {
191+
return errors.Wrap(err, "configuring enable_unprivileged_ports")
192+
}
193+
}
194+
180195
for _, registry := range insecureRegistry {
181196
addr := registry
182197
if strings.HasPrefix(strings.ToLower(registry), "http://") || strings.HasPrefix(strings.ToLower(registry), "https://") {

pkg/minikube/cruntime/crio.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,24 @@ func generateCRIOConfig(cr CommandRunner, imageRepository string, kv semver.Vers
8989
klog.Warningf("unable to remove /etc/cni/net.mk directory: %v", err)
9090
}
9191

92+
// add 'net.ipv4.ip_unprivileged_port_start=0' sysctl so that containers that run with non-root user can bind to otherwise privilege ports (like coredns v1.11.0+)
93+
// note: 'net.ipv4.ip_unprivileged_port_start' sysctl was marked as safe since Kubernetes v1.22 (Aug 4, 2021) (ref: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.22.md#feature-9)
94+
// note: cri-o supports 'default_sysctls' option since v1.12.0 (Oct 19, 2018) (ref: https://github.com/cri-o/cri-o/releases/tag/v1.12.0; https://github.com/cri-o/cri-o/pull/1721)
95+
if kv.GTE(semver.Version{Major: 1, Minor: 22}) {
96+
// remove any existing 'net.ipv4.ip_unprivileged_port_start' settings
97+
if _, err := cr.RunCmd(exec.Command("sh", "-c", fmt.Sprintf(`sudo sed -i '/^ *"net.ipv4.ip_unprivileged_port_start=.*"/d' %s`, crioConfigFile))); err != nil {
98+
return errors.Wrap(err, "removing net.ipv4.ip_unprivileged_port_start")
99+
}
100+
// insert 'default_sysctls' list, if not already present
101+
if _, err := cr.RunCmd(exec.Command("sh", "-c", fmt.Sprintf(`sudo grep -q "^ *default_sysctls" %s || sudo sed -i '/conmon_cgroup = .*/a default_sysctls = \[\n\]' %s`, crioConfigFile, crioConfigFile))); err != nil {
102+
return errors.Wrap(err, "inserting default_sysctls")
103+
}
104+
// add 'net.ipv4.ip_unprivileged_port_start' to 'default_sysctls' list
105+
if _, err := cr.RunCmd(exec.Command("sh", "-c", fmt.Sprintf(`sudo sed -i -r 's|^default_sysctls *= *\[|&\n "net.ipv4.ip_unprivileged_port_start=0",|' %s`, crioConfigFile))); err != nil {
106+
return errors.Wrap(err, "configuring net.ipv4.ip_unprivileged_port_start")
107+
}
108+
}
109+
92110
return nil
93111
}
94112

0 commit comments

Comments
 (0)