Skip to content

Commit 35268e5

Browse files
committed
Add Pod Security Standards to User Namespaces KEP
This KEP update outlines the required changes for Pod Security Standards in relation to the User Namespaces support. Planned graduation to beta is v1.28, which is now reflected in `kep.yaml` as well. Updating the PRR for it will follow in another PR. Signed-off-by: Sascha Grunert <[email protected]>
1 parent 7cb9920 commit 35268e5

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

keps/sig-node/127-user-namespaces/README.md

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
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)
@@ -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.
329329
During alpha, to make sure we don't exhaust the host UID namespace, we will
330330
limit the number of pods using user namespaces to `min(maxPods, 1024)`. This
331331
leaves 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+
The Pod Security will relax in a controlled way for pods which enable user
435+
namespaces. This behavior can be controlled by an API Server Feature Gate, which
436+
allows an early opt-in for end users. The overall burden to ensure that all
437+
nodes will honor user namespaces is on the cluster admin, though. The relaxation
438+
in detail means, that if user namespaces are enabled, then the following fields
439+
won't be restricted any more because they always have to refer to the user
440+
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

427465
Here is a list of considerations raised in PRs discussion that hasn't yet
@@ -547,20 +585,27 @@ use container runtime versions that have the needed changes.
547585
### Graduation Criteria
548586

549587
##### Alpha
588+
550589
- Support with idmap mounts
590+
- Gather and address feedback from the community
591+
- Add API Server feature flag to integrate into [Pod Security Standards (PSS)](#pod-security-standards-pss-integration)
592+
- Changing restrictions on the what volumes will be allowed
551593

552594
##### Beta
553595

554596
- Make plans on whether, when, and how to enable by default
597+
598+
###### Open Questions
599+
555600
- Should we reconsider making the mappings smaller by default?
556601
- Should we allow any way for users to for "more" IDs mapped? If yes, how many more and how?
557602
- Should we allow the user to ask for specific mappings?
558603
- Get review from VM container runtimes maintainers
559-
- Gather and address feedback from the community
560604

561605
##### GA
562606

563607
- Gather and address feedback from the community
608+
- Fully integrate into [Pod Security Standards (PSS)](#pod-security-standards-pss-integration)
564609

565610
### Upgrade / Downgrade Strategy
566611

keps/sig-node/127-user-namespaces/kep.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ kep-number: 127
33
authors:
44
- "@rata"
55
- "@giuseppe"
6+
- "@saschagrunert"
67
owning-sig: sig-node
78
participating-sigs: []
89
status: implementable
@@ -15,7 +16,7 @@ approvers:
1516
- "@derekwaynecarr"
1617

1718
stage: alpha
18-
latest-milestone: "v1.27"
19+
latest-milestone: "v1.28"
1920
milestone:
2021
alpha: "v1.25"
2122

0 commit comments

Comments
 (0)