Skip to content

Commit 7d7cf96

Browse files
authored
Merge pull request #4044 from saschagrunert/user-namespaces
[KEP-127] Add Pod Security Standards to User Namespaces KEP
2 parents 9e9e591 + 2cc6dab commit 7d7cf96

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

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

Lines changed: 48 additions & 2 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)
@@ -317,7 +318,7 @@ way, the Kubelet can read all the allocated mappings if it restarts.
317318
During alpha, to make sure we don't exhaust the host UID namespace, we will
318319
limit the number of pods using user namespaces to `min(maxPods, 1024)`. This
319320
leaves us plenty of host UID space free and this limits is probably never hit in
320-
practice. See UNRESOLVED for more some UNRESOLVED info we still have on this.
321+
practice. See the [Unresolved section](#unresolved) for more details on this.
321322

322323
### Handling of volumes
323324

@@ -407,6 +408,44 @@ components that implement the interface.
407408

408409
[kubeletVolumeHost-interface]: https://github.com/kubernetes/kubernetes/blob/36450ee422d57d53a3edaf960f86b356578fe996/pkg/volume/plugins.go#L322
409410

411+
### Pod Security Standards (PSS) integration
412+
413+
[Pod Security Standards](https://k8s.io/docs/concepts/security/pod-security-standards)
414+
define three different policies to broadly cover the whole security spectrum of
415+
Kubernetes, while the User Namespaces feature should integrate into them. This
416+
will happen only if the feature is graduated to GA, which _may_ result in
417+
changing the `Restricted` profile to disallow host user namespaces for stateless
418+
Pods.
419+
420+
The Pod Security will relax in a controlled way for pods which enable user
421+
namespaces. This behavior can be controlled by an API Server Feature Gate, which
422+
allows an early opt-in for end users. The overall burden to ensure that all
423+
nodes will honor user namespaces is on the cluster admin, though. The relaxation
424+
in detail means, that if user namespaces are enabled, then the following fields
425+
won't be restricted any more because they always have to refer to the user
426+
inside the container:
427+
428+
- `spec.securityContext.runAsNonRoot`
429+
- `spec.containers[*].securityContext.runAsNonRoot`
430+
- `spec.initContainers[*].securityContext.runAsNonRoot`
431+
- `spec.ephemeralContainers[*].securityContext.runAsNonRoot`
432+
- `spec.securityContext.runAsUser`
433+
- `spec.containers[*].securityContext.runAsUser`
434+
- `spec.initContainers[*].securityContext.runAsUser`
435+
- `spec.ephemeralContainers[*].securityContext.runAsUser`
436+
- `spec.containers[*].securityContext.allowPrivilegeEscalation`
437+
- `spec.initContainers[*].securityContext.allowPrivilegeEscalation`
438+
- `spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation`
439+
- `spec.containers[*].securityContext.capabilities.drop`
440+
- `spec.initContainers[*].securityContext.capabilities.drop`
441+
- `spec.ephemeralContainers[*].securityContext.capabilities.drop`
442+
- `spec.containers[*].securityContext.capabilities.add`
443+
- `spec.initContainers[*].securityContext.capabilities.add`
444+
- `spec.ephemeralContainers[*].securityContext.capabilities.add`
445+
446+
A serial test will be added to validate the functionality with the enabled
447+
feature gate.
448+
410449
### Unresolved
411450

412451
Here is a list of considerations raised in PRs discussion that hasn't yet
@@ -532,20 +571,27 @@ use container runtime versions that have the needed changes.
532571
### Graduation Criteria
533572

534573
##### Alpha
574+
535575
- Support with idmap mounts
576+
- Gather and address feedback from the community
577+
- Add API Server feature flag to integrate into [Pod Security Standards (PSS)](#pod-security-standards-pss-integration)
578+
- Changing restrictions on the what volumes will be allowed
536579

537580
##### Beta
538581

539582
- Make plans on whether, when, and how to enable by default
583+
584+
###### Open Questions
585+
540586
- Should we reconsider making the mappings smaller by default?
541587
- Should we allow any way for users to for "more" IDs mapped? If yes, how many more and how?
542588
- Should we allow the user to ask for specific mappings?
543589
- Get review from VM container runtimes maintainers
544-
- Gather and address feedback from the community
545590

546591
##### GA
547592

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

550596
### Upgrade / Downgrade Strategy
551597

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)