mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-14 22:33:34 +00:00
Introduce SELinuxChangePolicy
Feature gate + the API
This commit is contained in:
parent
d87bf75c29
commit
c73308e90a
@ -3684,6 +3684,22 @@ const (
|
|||||||
SupplementalGroupsPolicyStrict SupplementalGroupsPolicy = "Strict"
|
SupplementalGroupsPolicyStrict SupplementalGroupsPolicy = "Strict"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// PodSELinuxChangePolicy defines how the container's SELinux label is applied to all volumes used by the Pod.
|
||||||
|
type PodSELinuxChangePolicy string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Recursive relabeling of all Pod volumes by the container runtime.
|
||||||
|
// This may be slow for large volumes, but allows mixing privileged and unprivileged Pods sharing the same volume on the same node.
|
||||||
|
SELinuxChangePolicyRecursive PodSELinuxChangePolicy = "Recursive"
|
||||||
|
// MountOption mounts all eligible Pod volumes with `-o context` mount option.
|
||||||
|
// This requires all Pods that share the same volume to use the same SELinux label.
|
||||||
|
// It is not possible to share the same volume among privileged and unprivileged Pods.
|
||||||
|
// Eligible volumes are in-tree FibreChannel and iSCSI volumes, and all CSI volumes
|
||||||
|
// whose CSI driver announces SELinux support by setting spec.seLinuxMount: true in their
|
||||||
|
// CSIDriver instance. Other volumes are always re-labelled recursively.
|
||||||
|
SELinuxChangePolicyMountOption PodSELinuxChangePolicy = "MountOption"
|
||||||
|
)
|
||||||
|
|
||||||
// PodSecurityContext holds pod-level security attributes and common container settings.
|
// PodSecurityContext holds pod-level security attributes and common container settings.
|
||||||
// Some fields are also present in container.securityContext. Field values of
|
// Some fields are also present in container.securityContext. Field values of
|
||||||
// container.securityContext take precedence over field values of PodSecurityContext.
|
// container.securityContext take precedence over field values of PodSecurityContext.
|
||||||
@ -3820,6 +3836,32 @@ type PodSecurityContext struct {
|
|||||||
// Note that this field cannot be set when spec.os.name is windows.
|
// Note that this field cannot be set when spec.os.name is windows.
|
||||||
// +optional
|
// +optional
|
||||||
AppArmorProfile *AppArmorProfile
|
AppArmorProfile *AppArmorProfile
|
||||||
|
// seLinuxChangePolicy defines how the container's SELinux label is applied to all volumes used by the Pod.
|
||||||
|
// It has no effect on nodes that do not support SELinux or to volumes does not support SELinux.
|
||||||
|
// Valid values are "MountOption" and "Recursive".
|
||||||
|
//
|
||||||
|
// "Recursive" means relabeling of all files on all Pod volumes by the container runtime.
|
||||||
|
// This may be slow for large volumes, but allows mixing privileged and unprivileged Pods sharing the same volume on the same node.
|
||||||
|
//
|
||||||
|
// "MountOption" mounts all eligible Pod volumes with `-o context` mount option.
|
||||||
|
// This requires all Pods that share the same volume to use the same SELinux label.
|
||||||
|
// It is not possible to share the same volume among privileged and unprivileged Pods.
|
||||||
|
// Eligible volumes are in-tree FibreChannel and iSCSI volumes, and all CSI volumes
|
||||||
|
// whose CSI driver announces SELinux support by setting spec.seLinuxMount: true in their
|
||||||
|
// CSIDriver instance. Other volumes are always re-labelled recursively.
|
||||||
|
// "MountOption" value is allowed only when SELinuxMount feature gate is enabled.
|
||||||
|
//
|
||||||
|
// If not specified and SELinuxMount feature gate is enabled, "MountOption" is used.
|
||||||
|
// If not specified and SELinuxMount feature gate is disabled, "MountOption" is used for ReadWriteOncePod volumes
|
||||||
|
// and "Recursive" for all other volumes.
|
||||||
|
//
|
||||||
|
// This field affects only Pods that have SELinux label set, either in PodSecurityContext or in SecurityContext of all containers.
|
||||||
|
//
|
||||||
|
// All Pods that use the same volume should use the same seLinuxChangePolicy, otherwise some pods can get stuck in ContainerCreating state.
|
||||||
|
// Note that this field cannot be set when spec.os.name is windows.
|
||||||
|
// +featureGate=SELinuxChangePolicy
|
||||||
|
// +optional
|
||||||
|
SELinuxChangePolicy *PodSELinuxChangePolicy
|
||||||
}
|
}
|
||||||
|
|
||||||
// SeccompProfile defines a pod/container's seccomp profile settings.
|
// SeccompProfile defines a pod/container's seccomp profile settings.
|
||||||
|
@ -788,6 +788,15 @@ const (
|
|||||||
// unresponsive. The feature gate is enabled by default, but should only be used
|
// unresponsive. The feature gate is enabled by default, but should only be used
|
||||||
// if the system supports the systemd watchdog feature and has it configured properly.
|
// if the system supports the systemd watchdog feature and has it configured properly.
|
||||||
SystemdWatchdog = featuregate.Feature("SystemdWatchdog")
|
SystemdWatchdog = featuregate.Feature("SystemdWatchdog")
|
||||||
|
|
||||||
|
// owner: @jsafrane
|
||||||
|
// kep: https://kep.k8s.io/1710
|
||||||
|
// alpha: v1.32
|
||||||
|
//
|
||||||
|
// Speed up container startup by mounting volumes with the correct SELinux label
|
||||||
|
// instead of changing each file on the volumes recursively.
|
||||||
|
// Enables the SELinuxChangePolicy field in PodSecurityContext before SELinuxMount featgure gate is enabled.
|
||||||
|
SELinuxChangePolicy featuregate.Feature = "SELinuxChangePolicy"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -634,6 +634,10 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
|
|||||||
{Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Beta},
|
{Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Beta},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
SELinuxChangePolicy: {
|
||||||
|
{Version: version.MustParse("1.32"), Default: false, PreRelease: featuregate.Alpha},
|
||||||
|
},
|
||||||
|
|
||||||
SELinuxMount: {
|
SELinuxMount: {
|
||||||
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
|
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
|
||||||
},
|
},
|
||||||
|
@ -4310,6 +4310,22 @@ const (
|
|||||||
SupplementalGroupsPolicyStrict SupplementalGroupsPolicy = "Strict"
|
SupplementalGroupsPolicyStrict SupplementalGroupsPolicy = "Strict"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// PodSELinuxChangePolicy defines how the container's SELinux label is applied to all volumes used by the Pod.
|
||||||
|
type PodSELinuxChangePolicy string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Recursive relabeling of all Pod volumes by the container runtime.
|
||||||
|
// This may be slow for large volumes, but allows mixing privileged and unprivileged Pods sharing the same volume on the same node.
|
||||||
|
SELinuxChangePolicyRecursive PodSELinuxChangePolicy = "Recursive"
|
||||||
|
// MountOption mounts all eligible Pod volumes with `-o context` mount option.
|
||||||
|
// This requires all Pods that share the same volume to use the same SELinux label.
|
||||||
|
// It is not possible to share the same volume among privileged and unprivileged Pods.
|
||||||
|
// Eligible volumes are in-tree FibreChannel and iSCSI volumes, and all CSI volumes
|
||||||
|
// whose CSI driver announces SELinux support by setting spec.seLinuxMount: true in their
|
||||||
|
// CSIDriver instance. Other volumes are always re-labelled recursively.
|
||||||
|
SELinuxChangePolicyMountOption PodSELinuxChangePolicy = "MountOption"
|
||||||
|
)
|
||||||
|
|
||||||
// PodSecurityContext holds pod-level security attributes and common container settings.
|
// PodSecurityContext holds pod-level security attributes and common container settings.
|
||||||
// Some fields are also present in container.securityContext. Field values of
|
// Some fields are also present in container.securityContext. Field values of
|
||||||
// container.securityContext take precedence over field values of PodSecurityContext.
|
// container.securityContext take precedence over field values of PodSecurityContext.
|
||||||
@ -4408,6 +4424,32 @@ type PodSecurityContext struct {
|
|||||||
// Note that this field cannot be set when spec.os.name is windows.
|
// Note that this field cannot be set when spec.os.name is windows.
|
||||||
// +optional
|
// +optional
|
||||||
AppArmorProfile *AppArmorProfile `json:"appArmorProfile,omitempty" protobuf:"bytes,11,opt,name=appArmorProfile"`
|
AppArmorProfile *AppArmorProfile `json:"appArmorProfile,omitempty" protobuf:"bytes,11,opt,name=appArmorProfile"`
|
||||||
|
// seLinuxChangePolicy defines how the container's SELinux label is applied to all volumes used by the Pod.
|
||||||
|
// It has no effect on nodes that do not support SELinux or to volumes does not support SELinux.
|
||||||
|
// Valid values are "MountOption" and "Recursive".
|
||||||
|
//
|
||||||
|
// "Recursive" means relabeling of all files on all Pod volumes by the container runtime.
|
||||||
|
// This may be slow for large volumes, but allows mixing privileged and unprivileged Pods sharing the same volume on the same node.
|
||||||
|
//
|
||||||
|
// "MountOption" mounts all eligible Pod volumes with `-o context` mount option.
|
||||||
|
// This requires all Pods that share the same volume to use the same SELinux label.
|
||||||
|
// It is not possible to share the same volume among privileged and unprivileged Pods.
|
||||||
|
// Eligible volumes are in-tree FibreChannel and iSCSI volumes, and all CSI volumes
|
||||||
|
// whose CSI driver announces SELinux support by setting spec.seLinuxMount: true in their
|
||||||
|
// CSIDriver instance. Other volumes are always re-labelled recursively.
|
||||||
|
// "MountOption" value is allowed only when SELinuxMount feature gate is enabled.
|
||||||
|
//
|
||||||
|
// If not specified and SELinuxMount feature gate is enabled, "MountOption" is used.
|
||||||
|
// If not specified and SELinuxMount feature gate is disabled, "MountOption" is used for ReadWriteOncePod volumes
|
||||||
|
// and "Recursive" for all other volumes.
|
||||||
|
//
|
||||||
|
// This field affects only Pods that have SELinux label set, either in PodSecurityContext or in SecurityContext of all containers.
|
||||||
|
//
|
||||||
|
// All Pods that use the same volume should use the same seLinuxChangePolicy, otherwise some pods can get stuck in ContainerCreating state.
|
||||||
|
// Note that this field cannot be set when spec.os.name is windows.
|
||||||
|
// +featureGate=SELinuxChangePolicy
|
||||||
|
// +optional
|
||||||
|
SELinuxChangePolicy *PodSELinuxChangePolicy `json:"seLinuxChangePolicy,omitempty" protobuf:"bytes,12,opt,name=seLinuxChangePolicy"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SeccompProfile defines a pod/container's seccomp profile settings.
|
// SeccompProfile defines a pod/container's seccomp profile settings.
|
||||||
|
@ -1046,6 +1046,12 @@
|
|||||||
lockToDefault: false
|
lockToDefault: false
|
||||||
preRelease: Beta
|
preRelease: Beta
|
||||||
version: "1.28"
|
version: "1.28"
|
||||||
|
- name: SELinuxChangePolicy
|
||||||
|
versionedSpecs:
|
||||||
|
- default: false
|
||||||
|
lockToDefault: false
|
||||||
|
preRelease: Alpha
|
||||||
|
version: "1.32"
|
||||||
- name: SELinuxMount
|
- name: SELinuxMount
|
||||||
versionedSpecs:
|
versionedSpecs:
|
||||||
- default: false
|
- default: false
|
||||||
|
Loading…
Reference in New Issue
Block a user