2424 - [ Example without idmap mounts] ( #example-without-idmap-mounts )
2525 - [ Example with idmap mounts] ( #example-with-idmap-mounts )
2626 - [ Regarding the previous implementation for volumes] ( #regarding-the-previous-implementation-for-volumes )
27+ - [ Pod Security Standards (PSS) integration] ( #pod-security-standards-pss-integration )
2728 - [ Unresolved] ( #unresolved )
2829 - [ Test Plan] ( #test-plan )
2930 - [ Prerequisite testing updates] ( #prerequisite-testing-updates )
@@ -130,7 +131,7 @@ Here we use UIDs, but the same applies for GIDs.
130131 the pod (not valid in the host).
131132- Benefit from the security hardening that user namespaces provide against some
132133 of the future unknown runtime and kernel vulnerabilities.
133- - Support only stateless pods
134+ - Initially support stateless pods.
134135
135136### Non-Goals
136137
@@ -141,7 +142,6 @@ Here we use UIDs, but the same applies for GIDs.
141142- Implement all the very nice use cases that user namespaces allows. The goal
142143 here is to allow them as incremental improvements, not implement all the
143144 possible ideas related with user namespaces.
144- - Support stateful pods
145145
146146[ kubelet-userns ] : https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2033-kubelet-in-userns-aka-rootless
147147
@@ -329,7 +329,7 @@ way, the Kubelet can read all the allocated mappings if it restarts.
329329During alpha, to make sure we don't exhaust the host UID namespace, we will
330330limit the number of pods using user namespaces to ` min(maxPods, 1024) ` . This
331331leaves us plenty of host UID space free and this limits is probably never hit in
332- practice. See UNRESOLVED for more some UNRESOLVED info we still have on this.
332+ practice. See the [ Unresolved section ] ( #unresolved ) for more details on this.
333333
334334### Handling of stateless volumes
335335
@@ -422,6 +422,44 @@ components that implement the interface.
422422
423423[ kubeletVolumeHost-interface ] : https://github.com/kubernetes/kubernetes/blob/36450ee422d57d53a3edaf960f86b356578fe996/pkg/volume/plugins.go#L322
424424
425+ ### Pod Security Standards (PSS) integration
426+
427+ [ Pod Security Standards] ( https://k8s.io/docs/concepts/security/pod-security-standards )
428+ define three different policies to broadly cover the whole security spectrum of
429+ Kubernetes, while the User Namespaces feature should integrate into them. This
430+ will happen only if the feature is graduated to GA, which _ may_ result in
431+ changing the ` Restricted ` profile to disallow host user namespaces for stateless
432+ Pods.
433+
434+ With graduating the feature to beta, the Pod Security will relax in a controlled
435+ way for pods which enable user namespaces. This behavior can be controlled by an API
436+ Server Feature Gate, which allows an early opt-in for end users. The overall
437+ burden to ensure that all nodes will honor user namespaces is on the cluster
438+ admin, though. The relaxation in detail means, that if user namespaces are
439+ enabled, then the following fields won't be restricted any more because they
440+ always have to refer to the user inside the container:
441+
442+ - ` spec.securityContext.runAsNonRoot `
443+ - ` spec.containers[*].securityContext.runAsNonRoot `
444+ - ` spec.initContainers[*].securityContext.runAsNonRoot `
445+ - ` spec.ephemeralContainers[*].securityContext.runAsNonRoot `
446+ - ` spec.securityContext.runAsUser `
447+ - ` spec.containers[*].securityContext.runAsUser `
448+ - ` spec.initContainers[*].securityContext.runAsUser `
449+ - ` spec.ephemeralContainers[*].securityContext.runAsUser `
450+ - ` spec.containers[*].securityContext.allowPrivilegeEscalation `
451+ - ` spec.initContainers[*].securityContext.allowPrivilegeEscalation `
452+ - ` spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation `
453+ - ` spec.containers[*].securityContext.capabilities.drop `
454+ - ` spec.initContainers[*].securityContext.capabilities.drop `
455+ - ` spec.ephemeralContainers[*].securityContext.capabilities.drop `
456+ - ` spec.containers[*].securityContext.capabilities.add `
457+ - ` spec.initContainers[*].securityContext.capabilities.add `
458+ - ` spec.ephemeralContainers[*].securityContext.capabilities.add `
459+
460+ A serial test will be added to validate the functionality with the enabled
461+ feature gate.
462+
425463### Unresolved
426464
427465Here is a list of considerations raised in PRs discussion that hasn't yet
@@ -551,16 +589,21 @@ use container runtime versions that have the needed changes.
551589
552590##### Beta
553591
554- - Make plans on whether, when, and how to enable by default
592+ - Gather and address feedback from the community
593+ - Add API Server feature flag to integrate into [ Pod Security Standards (PSS)] ( #pod-security-standards-pss-integration )
594+ - Get review from VM container runtimes maintainers
595+ - Changing restrictions on the what volumes will be allowed
596+
597+ ###### Open Questions
598+
555599- Should we reconsider making the mappings smaller by default?
556600- Should we allow any way for users to for "more" IDs mapped? If yes, how many more and how?
557601- Should we allow the user to ask for specific mappings?
558- - Get review from VM container runtimes maintainers
559- - Gather and address feedback from the community
560602
561603##### GA
562604
563605- Gather and address feedback from the community
606+ - Fully integrate into [ Pod Security Standards (PSS)] ( #pod-security-standards-pss-integration )
564607
565608### Upgrade / Downgrade Strategy
566609
0 commit comments