Added windows hostProcess cni skip
Signed-off-by: Peri Thompson <perit@vmware.com>
This commit is contained in:
		| @@ -59,4 +59,7 @@ const ( | |||||||
|  |  | ||||||
| 	// PodAnnotations are the annotations of the pod | 	// PodAnnotations are the annotations of the pod | ||||||
| 	PodAnnotations = "io.kubernetes.cri.pod-annotations" | 	PodAnnotations = "io.kubernetes.cri.pod-annotations" | ||||||
|  |  | ||||||
|  | 	// WindowsHostProcess is used by hcsshim to identify windows pods that are running HostProcesses | ||||||
|  | 	WindowsHostProcess = "microsoft.com/hostprocess-container" | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -17,6 +17,8 @@ | |||||||
| package server | package server | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"strconv" | ||||||
|  |  | ||||||
| 	"github.com/containerd/containerd/oci" | 	"github.com/containerd/containerd/oci" | ||||||
| 	imagespec "github.com/opencontainers/image-spec/specs-go/v1" | 	imagespec "github.com/opencontainers/image-spec/specs-go/v1" | ||||||
| 	runtimespec "github.com/opencontainers/runtime-spec/specs-go" | 	runtimespec "github.com/opencontainers/runtime-spec/specs-go" | ||||||
| @@ -118,6 +120,7 @@ func (c *criService) containerSpec( | |||||||
| 		customopts.WithAnnotation(annotations.SandboxName, sandboxConfig.GetMetadata().GetName()), | 		customopts.WithAnnotation(annotations.SandboxName, sandboxConfig.GetMetadata().GetName()), | ||||||
| 		customopts.WithAnnotation(annotations.ContainerName, containerName), | 		customopts.WithAnnotation(annotations.ContainerName, containerName), | ||||||
| 		customopts.WithAnnotation(annotations.ImageName, imageName), | 		customopts.WithAnnotation(annotations.ImageName, imageName), | ||||||
|  | 		customopts.WithAnnotation(annotations.WindowsHostProcess, strconv.FormatBool(sandboxConfig.GetWindows().GetSecurityContext().GetHostProcess())), | ||||||
| 	) | 	) | ||||||
| 	return c.runtimeSpec(id, ociRuntime.BaseRuntimeSpec, specOpts...) | 	return c.runtimeSpec(id, ociRuntime.BaseRuntimeSpec, specOpts...) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -72,6 +72,7 @@ func getCreateContainerTestData() (*runtime.ContainerConfig, *runtime.PodSandbox | |||||||
| 			SecurityContext: &runtime.WindowsContainerSecurityContext{ | 			SecurityContext: &runtime.WindowsContainerSecurityContext{ | ||||||
| 				RunAsUsername:  "test-user", | 				RunAsUsername:  "test-user", | ||||||
| 				CredentialSpec: "{\"test\": \"spec\"}", | 				CredentialSpec: "{\"test\": \"spec\"}", | ||||||
|  | 				HostProcess:    false, | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| @@ -130,6 +131,9 @@ func getCreateContainerTestData() (*runtime.ContainerConfig, *runtime.PodSandbox | |||||||
|  |  | ||||||
| 		assert.Contains(t, spec.Annotations, annotations.SandboxName) | 		assert.Contains(t, spec.Annotations, annotations.SandboxName) | ||||||
| 		assert.EqualValues(t, spec.Annotations[annotations.SandboxName], "test-sandbox-name") | 		assert.EqualValues(t, spec.Annotations[annotations.SandboxName], "test-sandbox-name") | ||||||
|  |  | ||||||
|  | 		assert.Contains(t, spec.Annotations, annotations.WindowsHostProcess) | ||||||
|  | 		assert.EqualValues(t, spec.Annotations[annotations.WindowsHostProcess], "false") | ||||||
| 	} | 	} | ||||||
| 	return config, sandboxConfig, imageConfig, specCheck | 	return config, sandboxConfig, imageConfig, specCheck | ||||||
| } | } | ||||||
|   | |||||||
| @@ -414,6 +414,9 @@ func (c *criService) loadSandbox(ctx context.Context, cntr containerd.Container) | |||||||
| 		// Don't need to load netns for host network sandbox. | 		// Don't need to load netns for host network sandbox. | ||||||
| 		return sandbox, nil | 		return sandbox, nil | ||||||
| 	} | 	} | ||||||
|  | 	if goruntime.GOOS == "windows" && meta.Config.GetWindows().GetSecurityContext().GetHostProcess() { | ||||||
|  | 		return sandbox, nil | ||||||
|  | 	} | ||||||
| 	sandbox.NetNS = netns.LoadNetNS(meta.NetNSPath) | 	sandbox.NetNS = netns.LoadNetNS(meta.NetNSPath) | ||||||
|  |  | ||||||
| 	// It doesn't matter whether task is running or not. If it is running, sandbox | 	// It doesn't matter whether task is running or not. If it is running, sandbox | ||||||
|   | |||||||
| @@ -110,12 +110,18 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox | |||||||
| 	log.G(ctx).Debugf("Use OCI %+v for sandbox %q", ociRuntime, id) | 	log.G(ctx).Debugf("Use OCI %+v for sandbox %q", ociRuntime, id) | ||||||
|  |  | ||||||
| 	podNetwork := true | 	podNetwork := true | ||||||
| 	// Pod network is always needed on windows. |  | ||||||
| 	if goruntime.GOOS != "windows" && | 	if goruntime.GOOS != "windows" && | ||||||
| 		config.GetLinux().GetSecurityContext().GetNamespaceOptions().GetNetwork() == runtime.NamespaceMode_NODE { | 		config.GetLinux().GetSecurityContext().GetNamespaceOptions().GetNetwork() == runtime.NamespaceMode_NODE { | ||||||
| 		// Pod network is not needed on linux with host network. | 		// Pod network is not needed on linux with host network. | ||||||
| 		podNetwork = false | 		podNetwork = false | ||||||
| 	} | 	} | ||||||
|  | 	if goruntime.GOOS == "windows" && | ||||||
|  | 		config.GetWindows().GetSecurityContext().GetHostProcess() { | ||||||
|  | 		//Windows HostProcess pods can only run on the host network | ||||||
|  | 		podNetwork = false | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if podNetwork { | 	if podNetwork { | ||||||
| 		// If it is not in host network namespace then create a namespace and set the sandbox | 		// If it is not in host network namespace then create a namespace and set the sandbox | ||||||
| 		// handle. NetNSPath in sandbox metadata and NetNS is non empty only for non host network | 		// handle. NetNSPath in sandbox metadata and NetNS is non empty only for non host network | ||||||
|   | |||||||
| @@ -17,6 +17,8 @@ | |||||||
| package server | package server | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"strconv" | ||||||
|  |  | ||||||
| 	"github.com/containerd/containerd" | 	"github.com/containerd/containerd" | ||||||
| 	"github.com/containerd/containerd/oci" | 	"github.com/containerd/containerd/oci" | ||||||
| 	imagespec "github.com/opencontainers/image-spec/specs-go/v1" | 	imagespec "github.com/opencontainers/image-spec/specs-go/v1" | ||||||
| @@ -65,6 +67,7 @@ func (c *criService) sandboxContainerSpec(id string, config *runtime.PodSandboxC | |||||||
| 		customopts.WithAnnotation(annotations.SandboxNamespace, config.GetMetadata().GetNamespace()), | 		customopts.WithAnnotation(annotations.SandboxNamespace, config.GetMetadata().GetNamespace()), | ||||||
| 		customopts.WithAnnotation(annotations.SandboxName, config.GetMetadata().GetName()), | 		customopts.WithAnnotation(annotations.SandboxName, config.GetMetadata().GetName()), | ||||||
| 		customopts.WithAnnotation(annotations.SandboxLogDir, config.GetLogDirectory()), | 		customopts.WithAnnotation(annotations.SandboxLogDir, config.GetLogDirectory()), | ||||||
|  | 		customopts.WithAnnotation(annotations.WindowsHostProcess, strconv.FormatBool(config.GetWindows().GetSecurityContext().GetHostProcess())), | ||||||
| 	) | 	) | ||||||
|  |  | ||||||
| 	return c.runtimeSpec(id, "", specOpts...) | 	return c.runtimeSpec(id, "", specOpts...) | ||||||
|   | |||||||
| @@ -40,6 +40,13 @@ func getRunPodSandboxTestData() (*runtime.PodSandboxConfig, *imagespec.ImageConf | |||||||
| 		LogDirectory: "test-log-directory", | 		LogDirectory: "test-log-directory", | ||||||
| 		Labels:       map[string]string{"a": "b"}, | 		Labels:       map[string]string{"a": "b"}, | ||||||
| 		Annotations:  map[string]string{"c": "d"}, | 		Annotations:  map[string]string{"c": "d"}, | ||||||
|  | 		Windows: &runtime.WindowsPodSandboxConfig{ | ||||||
|  | 			SecurityContext: &runtime.WindowsSandboxSecurityContext{ | ||||||
|  | 				RunAsUsername:  "test-user", | ||||||
|  | 				CredentialSpec: "{\"test\": \"spec\"}", | ||||||
|  | 				HostProcess:    false, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
| 	} | 	} | ||||||
| 	imageConfig := &imagespec.ImageConfig{ | 	imageConfig := &imagespec.ImageConfig{ | ||||||
| 		Env:        []string{"a=b", "c=d"}, | 		Env:        []string{"a=b", "c=d"}, | ||||||
| @@ -70,6 +77,9 @@ func getRunPodSandboxTestData() (*runtime.PodSandboxConfig, *imagespec.ImageConf | |||||||
|  |  | ||||||
| 		assert.Contains(t, spec.Annotations, annotations.SandboxLogDir) | 		assert.Contains(t, spec.Annotations, annotations.SandboxLogDir) | ||||||
| 		assert.EqualValues(t, spec.Annotations[annotations.SandboxLogDir], "test-log-directory") | 		assert.EqualValues(t, spec.Annotations[annotations.SandboxLogDir], "test-log-directory") | ||||||
|  |  | ||||||
|  | 		assert.Contains(t, spec.Annotations, annotations.WindowsHostProcess) | ||||||
|  | 		assert.EqualValues(t, spec.Annotations[annotations.WindowsHostProcess], "false") | ||||||
| 	} | 	} | ||||||
| 	return config, imageConfig, specCheck | 	return config, imageConfig, specCheck | ||||||
| } | } | ||||||
|   | |||||||
| @@ -76,6 +76,9 @@ func (c *criService) getIPs(sandbox sandboxstore.Sandbox) (string, []string, err | |||||||
| 		// responsible for reporting the IP. | 		// responsible for reporting the IP. | ||||||
| 		return "", nil, nil | 		return "", nil, nil | ||||||
| 	} | 	} | ||||||
|  | 	if goruntime.GOOS == "windows" && config.GetWindows().GetSecurityContext().GetHostProcess() { | ||||||
|  | 		return "", nil, nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if closed, err := sandbox.NetNS.Closed(); err != nil { | 	if closed, err := sandbox.NetNS.Closed(); err != nil { | ||||||
| 		return "", nil, errors.Wrap(err, "check network namespace closed") | 		return "", nil, errors.Wrap(err, "check network namespace closed") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Peri Thompson
					Peri Thompson