Kubernetes v1.37 Storage Security Features
New storage security features in Kubernetes v1.37: emptyDir permission modes and bind mount options.
What Changed Operationally
Kubernetes v1.37 introduces two significant storage security features: emptyDir permission modes and bind mount options. These additions address long-standing security findings regarding the default behavior of ephemeral storage and the lack of control over filesystem flags applied to mounted volumes. The operational impact is immediate: administrators can now enforce stricter access controls and prevent privilege escalation directly within the pod definition, moving beyond relying solely on container runtime security profiles. These features are currently available as Alpha features in v1.37 via the VolumeBindMountOptions and EmptyDirVolumeMode feature gates, allowing operators to evaluate their effectiveness in non-production or staging environments before broader adoption.
How The Capability Fits Together
The underlying mechanism for bind mount options relies on the interaction between the Kubernetes API server, the scheduler, and the container runtime. When a pod is scheduled, the scheduler consults the Node Declared Features to ensure the target node supports the required runtime capabilities, specifically the CRI mount_options field. This prevents the placement of pods on nodes that cannot enforce the specified flags. Once the pod is running, the kubelet applies the bindMountOptions specified in the volume configuration to the bind mount operation performed by the container runtime. This approach differs from traditional PersistentVolume mount options, which are applied at the storage layer by the CSI driver. The new bindMountOptions control the flags applied inside the container by the runtime, providing a layer of defense that operates closer to the application execution environment. The feature supports a wide array of volume types, including emptyDir, PersistentVolumes, CSI volumes, projected volumes, ConfigMaps, and Secrets, with the notable exception of image volumes.
The emptyDir permission mode feature modifies the default filesystem permissions for ephemeral volumes created with the emptyDir type. Historically, these directories were created with a hardcoded mode of 0777, granting read, write, and execute permissions to all users on the node. This posed a security risk, particularly in multi-container pods where containers share the same scratch space and can potentially interfere with one another. The new capability allows operators to specify a custom permission mode, such as 01777, which applies the sticky bit. The sticky bit ensures that a file or directory inside the mount can only be deleted or renamed by the file's owner or root, effectively enforcing the principle of least privilege for shared application data. This is particularly useful for scenarios involving shared scratch space or preventing privilege escalation on writable mounts where arbitrary code execution must be restricted. If the feature gate is enabled but the kubelet does not support the specific mode, the field is accepted but ignored, falling back to the standard 0777 default, ensuring version skew safety. It is important to note that these permission modes are Linux-specific concepts and have no effect on Windows nodes.
Operational Impact
Administrator and Engineer Impact
The introduction of bindMountOptions and EmptyDirVolumeMode in Kubernetes v1.37 shifts the responsibility of filesystem hardening from the storage administrator to the application engineer and cluster operator. For engineers, this means the ability to enforce principle of least privilege directly within the pod specification. Instead of relying on external security scanners to detect insecure permissions, administrators can now specify bind mount flags such as noexec, nosuid, and nodev when defining volumes. This granular control allows for the isolation of sensitive data, such as Secrets or ConfigMaps, ensuring that even if a container is compromised, it cannot leverage those mounts to execute arbitrary code or access sensitive identifiers. Similarly, the ability to set a specific permission mode, such as 01777 (which includes the sticky bit), provides a mechanism to secure shared scratch space within multi-container pods, preventing users from deleting files they do not own.
For cluster operators, the impact extends to the runtime environment and node compatibility. Because bindMountOptions relies on the container runtime’s ability to advertise support via the CRI mount_options field and runtimeFeatures, administrators must verify that their underlying runtime stack supports these capabilities before enabling the feature. This creates a dependency chain where the Kubernetes scheduler uses Node Declared Features to prevent scheduling pods on nodes that lack the necessary runtime support. If a pod is scheduled on a node without this capability, the kubelet will reject the pod rather than silently ignoring the requested security options, ensuring that security policies are not inadvertently bypassed. Furthermore, these features are currently Linux-only; Windows nodes will not benefit from these bind mount restrictions, necessitating platform-specific considerations for mixed-cluster environments.
Prerequisites and Access Constraints
Rollout And Governance Decisions
Deploying these new storage security features requires specific configuration steps and an understanding of their additive nature to ensure version skew safety. Both VolumeBindMountOptions and EmptyDirVolumeMode are currently Alpha features in v1.37, available behind specific feature gates. To utilize bindMountOptions, the administrator must ensure that the container runtime is configured to support the CRI mount_options field and that it advertises this capability. The Kubernetes scheduler will automatically detect this capability; if a pod requests bindMountOptions and the target node does not support the runtime feature, the pod will not be scheduled to that node. This prevents the scenario where a pod is placed on a node that cannot enforce the requested security constraints, which could lead to a false sense of security.
Regarding EmptyDirVolumeMode, the prerequisites are less stringent but still require careful management of feature gates. The field is additive, meaning that if the API server has the EmptyDirVolumeMode gate enabled but the kubelet does not, the API will accept the field in the pod manifest, but the kubelet will fall back to the default behavior of 0777 permissions. This design allows for a gradual rollout where administrators can update the API server and scheduler first, allowing existing pods to continue running while new pods can begin to specify permission modes. However, to fully realize the security benefits, the kubelet must eventually be updated to recognize and apply the specified modes. It is important to note that these features do not alter the default behavior; if the feature gates are disabled or the specific fields are omitted, the system reverts to the standard defaults, such as the hardcoded 0777 mode for emptyDir volumes, ensuring backward compatibility for existing workloads.
Evaluation and Governance Approach
A realistic evaluation of these features should begin with a pilot program focused on non-critical, stateless workloads to validate the runtime behavior and identify any unintended side effects. Since bindMountOptions applies at the container runtime level rather than the storage layer, administrators should test how the flags interact with various volume types, including emptyDir, PersistentVolumes, and CSI volumes. A specific test case involves verifying that the sticky bit (01777) functions as expected on shared directories, ensuring that only the file owner or root can delete or rename files. Additionally, administrators must confirm that the noexec flag effectively prevents the execution of binaries from mounted directories, a critical control for preventing privilege escalation in compromised containers.
Governance of these features should be handled through a staged rollout strategy that leverages the additive nature of the Alpha features. The initial phase should involve enabling the feature gates on the API server and scheduler while keeping the kubelet disabled, allowing the cluster to accept pod manifests with the new fields but ignoring them. Once the API and scheduler are stable, the kubelet can be updated to enable the gates, allowing the enforcement of the new security policies. This approach minimizes downtime and allows for the detection of version skew issues early in the process. As the features move toward stability, governance policies should be established to mandate the use of bindMountOptions for sensitive mounts and EmptyDirVolumeMode for shared state, creating a baseline for container filesystem security across the platform.
Failure Modes And Limits
Failure Modes and Limitations
The introduction of bind mount options and empty directory permission modes in Kubernetes v1.37 represents a significant step toward hardened containerized environments, yet these capabilities are not without their operational constraints. A primary limitation is the requirement for specific container runtime support. The bindMountOptions feature relies on the container runtime's ability to advertise support for the CRI mount_options field via runtimeFeatures. If a node’s runtime does not support this field, the scheduler utilizes Node Declared Features to prevent scheduling pods on incompatible nodes. However, in scenarios involving version skew or misconfiguration where a pod is scheduled on an unsupported node, the kubelet will reject the pod rather than silently applying incorrect mount flags, which can lead to deployment failures that require manual intervention to resolve.
Security And Privacy Considerations
Furthermore, the scope of these features is strictly limited to Linux-based nodes. The bind mount flags, such as noexec, nosuid, and nodev, are Linux-specific concepts that have no equivalent behavior on Windows. Consequently, attempting to apply these options in a mixed-node cluster will result in the feature being ignored for Windows workloads, potentially creating a fragmented security posture where Linux containers are hardened while Windows containers remain vulnerable to the same access patterns. Additionally, while the emptyDir volume mode is additive and safe regarding version skew—if the API server supports the gate but the kubelet does not, the mode is accepted but ignored—the feature is still in the Alpha stage. This means that the behavior and stability of the permission enforcement are not yet guaranteed for production environments, and developers must be prepared for potential changes in future releases.
Unanswered Questions and Uncertainty
Despite the detailed documentation of the new features, several critical aspects of their behavior in complex, real-world scenarios remain unaddressed. One significant area of uncertainty involves the interaction between bindMountOptions and PersistentVolumes. While the documentation clarifies that bindMountOptions applies at the container runtime level (inside the container) and differs from PersistentVolume mountOptions (which apply at the storage layer via the CSI driver), the precise behavior when both sets of flags are specified is not fully detailed. Specifically, it is unclear how the runtime prioritizes or merges conflicting flags from the PersistentVolume definition and the Pod’s bindMountOptions field, which could lead to unexpected permission or execution restrictions.
Open Questions
Another unanswered question concerns the long-term stability of the Alpha feature gates. Kubernetes deprecates features after two releases, and while VolumeBindMountOptions and EmptyDirVolumeMode are currently Alpha in v1.37, their future status is uncertain. There is also a lack of information regarding the performance implications of enforcing these strict permission modes and mount flags on high-throughput storage workloads. The research notes suggest that these features are intended to enforce the principle of least privilege, but the potential overhead of runtime permission checks and mount flag enforcement on I/O-intensive applications has not been quantified. Until these behaviors are tested in a lab environment, users cannot be certain of the impact on application latency or throughput.
Environment Checklist
To implement these storage security features safely, the following checklist must be completed before production deployment:
Environment Checklist
- Verify Runtime Support: Confirm that the container runtime on all target nodes advertises support for the CRI mount_options field via runtimeFeatures.
- Enable Feature Gates: Ensure the Kubernetes API server, kubelet, and controller manager have the
VolumeBindMountOptionsandEmptyDirVolumeModefeature gates enabled. - Node Compatibility: Audit the cluster to ensure all nodes are Linux-based, as these features have no effect on Windows nodes.
- Version Skew Testing: Test the deployment with version-skewed components (e.g., newer API server with older kubelet) to verify that the additive nature of the features prevents silent failures.
- CSI Driver Interaction: Review CSI driver documentation to ensure that PersistentVolume mountOptions do not conflict with the new bindMountOptions settings.
Verification
This article was not lab-tested. The descriptions of bind mount flags, permission modes, and version skew safety are derived solely from the provided source text. Readers must verify the behavior of these features against their specific Kubernetes versions, container runtimes, and storage backends before deploying them to a production environment.
// source record
Sources
- https://kubernetes.io/blog/2026/09/16/kubernetes-v1-37-hardening-container-storage/ kubernetes.io · checked 18 Sept 2026