Skip to content

Commit d05bcf6

Browse files
committed
Add namespace mode targeting to dockershim
1 parent 4d4e111 commit d05bcf6

File tree

2 files changed

+53
-10
lines changed

2 files changed

+53
-10
lines changed

pkg/kubelet/dockershim/security_context.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -146,26 +146,25 @@ func modifyHostConfig(sc *runtimeapi.LinuxContainerSecurityContext, hostConfig *
146146
// modifySandboxNamespaceOptions apply namespace options for sandbox
147147
func modifySandboxNamespaceOptions(nsOpts *runtimeapi.NamespaceOption, hostConfig *dockercontainer.HostConfig, network *knetwork.PluginManager) {
148148
// The sandbox's PID namespace is the one that's shared, so CONTAINER and POD are equivalent for it
149-
modifyCommonNamespaceOptions(nsOpts, hostConfig)
149+
if nsOpts.GetPid() == runtimeapi.NamespaceMode_NODE {
150+
hostConfig.PidMode = namespaceModeHost
151+
}
150152
modifyHostOptionsForSandbox(nsOpts, network, hostConfig)
151153
}
152154

153155
// modifyContainerNamespaceOptions apply namespace options for container
154156
func modifyContainerNamespaceOptions(nsOpts *runtimeapi.NamespaceOption, podSandboxID string, hostConfig *dockercontainer.HostConfig) {
155-
if nsOpts.GetPid() == runtimeapi.NamespaceMode_POD {
157+
switch nsOpts.GetPid() {
158+
case runtimeapi.NamespaceMode_NODE:
159+
hostConfig.PidMode = namespaceModeHost
160+
case runtimeapi.NamespaceMode_POD:
156161
hostConfig.PidMode = dockercontainer.PidMode(fmt.Sprintf("container:%v", podSandboxID))
162+
case runtimeapi.NamespaceMode_TARGET:
163+
hostConfig.PidMode = dockercontainer.PidMode(fmt.Sprintf("container:%v", nsOpts.GetTargetId()))
157164
}
158-
modifyCommonNamespaceOptions(nsOpts, hostConfig)
159165
modifyHostOptionsForContainer(nsOpts, podSandboxID, hostConfig)
160166
}
161167

162-
// modifyCommonNamespaceOptions apply common namespace options for sandbox and container
163-
func modifyCommonNamespaceOptions(nsOpts *runtimeapi.NamespaceOption, hostConfig *dockercontainer.HostConfig) {
164-
if nsOpts.GetPid() == runtimeapi.NamespaceMode_NODE {
165-
hostConfig.PidMode = namespaceModeHost
166-
}
167-
}
168-
169168
// modifyHostOptionsForSandbox applies NetworkMode/UTSMode to sandbox's dockercontainer.HostConfig.
170169
func modifyHostOptionsForSandbox(nsOpts *runtimeapi.NamespaceOption, network *knetwork.PluginManager, hc *dockercontainer.HostConfig) {
171170
if nsOpts.GetIpc() == runtimeapi.NamespaceMode_NODE {

pkg/kubelet/dockershim/security_context_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,27 @@ func TestModifySandboxNamespaceOptions(t *testing.T) {
345345
NetworkMode: "default",
346346
},
347347
},
348+
{
349+
name: "Pod PID NamespaceOption (for sandbox is same as container ns option)",
350+
nsOpt: &runtimeapi.NamespaceOption{
351+
Pid: runtimeapi.NamespaceMode_POD,
352+
},
353+
expected: &dockercontainer.HostConfig{
354+
PidMode: "",
355+
NetworkMode: "default",
356+
},
357+
},
358+
{
359+
name: "Target PID NamespaceOption (invalid for sandbox)",
360+
nsOpt: &runtimeapi.NamespaceOption{
361+
Pid: runtimeapi.NamespaceMode_TARGET,
362+
TargetId: "same-container",
363+
},
364+
expected: &dockercontainer.HostConfig{
365+
PidMode: "",
366+
NetworkMode: "default",
367+
},
368+
},
348369
}
349370
for _, tc := range cases {
350371
dockerCfg := &dockercontainer.HostConfig{}
@@ -395,6 +416,29 @@ func TestModifyContainerNamespaceOptions(t *testing.T) {
395416
PidMode: namespaceModeHost,
396417
},
397418
},
419+
{
420+
name: "Pod PID NamespaceOption",
421+
nsOpt: &runtimeapi.NamespaceOption{
422+
Pid: runtimeapi.NamespaceMode_POD,
423+
},
424+
expected: &dockercontainer.HostConfig{
425+
NetworkMode: dockercontainer.NetworkMode(sandboxNSMode),
426+
IpcMode: dockercontainer.IpcMode(sandboxNSMode),
427+
PidMode: dockercontainer.PidMode(sandboxNSMode),
428+
},
429+
},
430+
{
431+
name: "Target PID NamespaceOption",
432+
nsOpt: &runtimeapi.NamespaceOption{
433+
Pid: runtimeapi.NamespaceMode_TARGET,
434+
TargetId: "some-container",
435+
},
436+
expected: &dockercontainer.HostConfig{
437+
NetworkMode: dockercontainer.NetworkMode(sandboxNSMode),
438+
IpcMode: dockercontainer.IpcMode(sandboxNSMode),
439+
PidMode: dockercontainer.PidMode("container:some-container"),
440+
},
441+
},
398442
}
399443
for _, tc := range cases {
400444
dockerCfg := &dockercontainer.HostConfig{}

0 commit comments

Comments
 (0)