You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: keps/sig-node/3619-supplemental-groups-policy/README.md
+141Lines changed: 141 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,9 +18,11 @@ tags, and then generate with `hack/update-toc.sh`.
18
18
-[Kubernetes API](#kubernetes-api)
19
19
-[SupplementalGroupsPolicy in PodSecurityContext](#supplementalgroupspolicy-in-podsecuritycontext)
20
20
-[User in ContainerStatus](#user-in-containerstatus)
21
+
-[NodeFeatures in NodeStatus which contains SupplementalGroupsPolicy field](#nodefeatures-in-nodestatus-which-contains-supplementalgroupspolicy-field)
21
22
-[CRI](#cri)
22
23
-[SupplementalGroupsPolicy in SecurityContext](#supplementalgroupspolicy-in-securitycontext)
23
24
-[user in ContainerStatus](#user-in-containerstatus-1)
25
+
-[features in StatusResponse which contains supplemental_groups_policy field](#features-in-statusresponse-which-contains-supplemental_groups_policy-field)
-[Story 1: Deploy a Security Policy to enforce <code>SupplementalGroupsPolicy</code> field](#story-1-deploy-a-security-policy-to-enforce-supplementalgroupspolicy-field)
@@ -29,9 +31,11 @@ tags, and then generate with `hack/update-toc.sh`.
29
31
-[Kubernetes API](#kubernetes-api-1)
30
32
-[SupplementalGroupsPolicy in PodSecurityContext](#supplementalgroupspolicy-in-podsecuritycontext-1)
31
33
-[User in ContainerStatus](#user-in-containerstatus-2)
34
+
-[NodeFeatures in NodeStatus which contains SupplementalGroupsPolicy field](#nodefeatures-in-nodestatus-which-contains-supplementalgroupspolicy-field-1)
32
35
-[CRI](#cri-1)
33
36
-[SupplementalGroupsPolicy in SecurityContext](#supplementalgroupspolicy-in-securitycontext-1)
34
37
-[user in ContainerStatus](#user-in-containerstatus-3)
38
+
-[features in StatusResponse which contains supplemental_groups_policy field](#features-in-statusresponse-which-contains-supplemental_groups_policy-field-1)
@@ -201,6 +205,30 @@ Note that both policies diverge from the semantics of [`config.User` OCI image c
201
205
202
206
To provide users/administrators to know which identities are actually attached to the container process, it proposes to introduce new `User` field in `ContainerStatus`. `User` is an object which consists of `Uid`, `Gid`, `SupplementalGroups` fields for linux containers. This will help users to identify unexpected identities. This field is derived by CRI response (See [user in ContainerStatus](#user-in-containerstatus-1) section).
203
207
208
+
#### NodeFeatures in NodeStatus which contains SupplementalGroupsPolicy field
209
+
210
+
Because the actual control(calculation) of supplementary groups to be attached to the first container process will happen inside of CRI implementations (container runtimes), it proposes to add `NodeFeatures` field in `NodeStatus` which contains the `SupplementalGroupsPolicy` feature field inside of it like below so that kubernetes can correctly understand whether underlying CRI implementation implements the feature or not. The field is populated by CRI response.
211
+
212
+
```golang
213
+
typeNodeStatusstruct {
214
+
// Features describes the set of features implemented by the CRI implementation.
215
+
Features *NodeFeatures
216
+
}
217
+
typeNodeFeaturesstruct {
218
+
// SupplementalGroupsPolicy is set to true if the runtime supports SupplementalGroupsPolicy and ContainerUser.
219
+
SupplementalGroupsPolicy *bool
220
+
}
221
+
```
222
+
223
+
Recently [KEP-3857: Recursive Read-only (RRO) mounts](https://kep.k8s.io/3857) introduced `RuntimeHandlers[].Features`. But it is not fit to use for this KEP because RRO mounts requires inspecting [the OCI runtime spec's Feature](https://github.com/opencontainers/runtime-spec/blob/main/features.md) to understand whether the low-level OCI runtime supports RRO or not. However, for this KEP(SupplementalGroupsPolicy), it does not need to inspect [the OCI runtime spec's Feature](https://github.com/opencontainers/runtime-spec/blob/main/features.md) because this KEP only affects [`Process.User.additionalGid`](https://github.com/opencontainers/runtime-spec/blob/main/config.md#user) and does not depend on [the OCI runtime spec's Feature](https://github.com/opencontainers/runtime-spec/blob/main/features.md). So, introducing new `NodeFeatures` in `NodeStatus` does not conflict with `RuntimeHandlerFeatures` as we can clearly define how to use them as below:
224
+
225
+
-`NodeFeatures`(added in this KEP):
226
+
- focusses on features that depend only on cri implementation, be independent of runtime handlers(low-level container runtimes), (i.e. it should not require to inspect to any information from oci runtime-spec's features).
227
+
-`RuntimeHandlerFeature` (introduced in KEP-3857):
228
+
- focuses features that depend on the runtime handlers, (i.e. dependent to the information exposed by oci runtime-spec's features).
229
+
230
+
See [this section](#runtimefeatures-in-nodestatus-which-contains-supplementalgroupspolicy-field-1) for details.
231
+
204
232
### CRI
205
233
206
234
#### SupplementalGroupsPolicy in SecurityContext
@@ -232,6 +260,30 @@ message ContainerUser {
232
260
}
233
261
```
234
262
263
+
#### features in StatusResponse which contains supplemental_groups_policy field
264
+
265
+
To propagate whether the runtime supports fine-grained supplemental group control to `NodeFeatures.SupplementalGroupsPolicy`, it proposes to add a corresponding field `features` in `StatusResponse`.
// features describes the set of features implemented by the CRI implementation.
275
+
// This field is supposed to propagate to NodeFeatures in Kubernetes API.
276
+
RuntimeFeatures features = ?;
277
+
}
278
+
message RuntimeFeatures {
279
+
// supplemental_groups_policy is set to true if the runtime supports SupplementalGroupsPolicy and ContainerUser.
280
+
bool supplemental_groups_policy = 1;
281
+
}
282
+
```
283
+
284
+
As discussed in [Kubernetes API section](#runtimefeatures-in-nodestatus-which-contains-supplementalgroupspolicy-field), `RuntimeHandlerFeature` introduced in [KEP-3857](https://kep.k8s.io/3857) should focus on features only for ones which requires to inspect [OCI runtime spec's Feature](https://github.com/opencontainers/runtime-spec/blob/main/features.md). But `RuntimeFeatuers` proposed in this KEP should focus on ones which does NOT require to inepect it.
285
+
286
+
235
287
### User Stories (Optional)
236
288
237
289
#### Story 1: Deploy a Security Policy to enforce `SupplementalGroupsPolicy` field
@@ -356,6 +408,53 @@ type LinuxContainerUser struct {
356
408
// }
357
409
```
358
410
411
+
#### NodeFeatures in NodeStatus which contains SupplementalGroupsPolicy field
412
+
413
+
```golang
414
+
typeNodeStatusstruct {
415
+
// Features describes the set of implemented features implemented by the CRI implementation.
416
+
// +featureGate=SupplementalGroupsPolicy
417
+
// +optional
418
+
Features *NodeFeatures
419
+
420
+
// The available runtime handlers.
421
+
// +featureGate=RecursiveReadOnlyMounts
422
+
// +optional
423
+
RuntimeHandlers []RuntimeHandlers
424
+
}
425
+
426
+
// NodeFeatures describes the set of implemented features implemented by the CRI implementation.
427
+
// THE FEATURES CONTAINED IN THE NodeFeatures SHOULD DEPEND ON ONLY CRI IMPLEMENTATION, BE INDEPENDENT ON RUNTIME HANDLERS,
428
+
// (I.E. IT SHOULD NOT REQUIRE TO INSPECT TO ANY INFORMATION FROM OCI RUNTIME-SPEC'S FEATURES).
429
+
typeNodeFeatures {
430
+
// SupplementalGroupsPolicy is set to true if the runtime supports SupplementalGroupsPolicy and ContainerUser.
431
+
// +optional
432
+
SupplementalGroupsPolicy *bool
433
+
}
434
+
435
+
// NodeRuntimeHandler is a set of runtime handler information.
436
+
typeNodeRuntimeHandlerstruct {
437
+
// Runtime handler name.
438
+
// Empty for the default runtime handler.
439
+
// +optional
440
+
Namestring
441
+
// Supported features in the runtime handlers.
442
+
// +optional
443
+
Features *NodeRuntimeHandlerFeatures
444
+
}
445
+
446
+
// NodeRuntimeHandlerFeatures is a set of features implementedy by the runtime handler.
447
+
// THE FEATURES CONTAINED IN THE NodeRuntimeHandlerFeatures SHOULD DEPEND ON THE RUNTIME HANDLERS,
448
+
// (I.E. DEPENDENT TO THE INFORMATION EXPOSED BY OCI RUNTIME-SPEC'S FEATURES).
449
+
typeNodeRuntimeHandlerFeaturesstruct {
450
+
// RecursiveReadOnlyMounts is set to true if the runtime handler supports RecursiveReadOnlyMounts.
451
+
// +featureGate=RecursiveReadOnlyMounts
452
+
// +optional
453
+
RecursiveReadOnlyMounts *bool
454
+
// Reserved: UserNamespaces *bool
455
+
}
456
+
```
457
+
359
458
### CRI
360
459
361
460
#### SupplementalGroupsPolicy in SecurityContext
@@ -414,6 +513,48 @@ message LinuxContainerUser {
414
513
// }
415
514
```
416
515
516
+
#### features in StatusResponse which contains supplemental_groups_policy field
0 commit comments