为卷挂载设置绑定挂载选项

为卷挂载设置绑定挂载选项

特性状态: Alpha since Kubernetes v1.37; (默认禁用)
More information about this feature

To use this feature, you (or a cluster administrator) will need to enable the VolumeBindMountOptions feature gate for all relevant components in your cluster.

See Enable Or Disable Feature Gates for more information.

本页展示如何为 Pod 中的卷挂载应用与安全相关的绑定挂载选项(noexec、 nodev、nosuid)。

准备开始

你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:

你的 Kubernetes 服务器版本必须是 v1.37.

要获知版本信息,请输入 kubectl version.

你需要在 API 服务器和 kubelet 上启用 VolumeBindMountOptions 特性门控。容器运行时还必须支持 CRI Mount 消息中的 mount_options 字段。

创建带绑定挂载选项的 Pod

.spec.containers[*].volumeMounts[*].bindMountOptions 字段接受一组绑定挂载标志。 允许的取值为 noexec、nodev 和 nosuid。

例如,要在 /tmp 处挂载一个带有 noexec 和 nosuid 的 emptyDir 卷, 使得二进制文件无法被执行,并且忽略 set-user-ID 位:

apiVersion: v1
kind: Pod
metadata:
  name: bind-mount-options-demo
spec:
  containers:
  - image: registry.k8s.io/busybox
    name: test-container
    command: ["sleep", "3600"]
    volumeMounts:
    - mountPath: /tmp
      name: tmp-volume
      bindMountOptions:
      - noexec
      - nosuid
  volumes:
  - name: tmp-volume
    emptyDir: {}
  1. 在你的集群上创建 Pod:

    kubectl apply -f https://k8s.io/examples/pods/bind-mount-options.yaml
    
  1. 验证 Pod 正在运行:

    kubectl get pod bind-mount-options-demo
    
  1. 检查该卷的挂载选项:

    kubectl exec bind-mount-options-demo -- mount | grep /tmp
    

    输出的挂载选项中应包含 noexec 和 nosuid。

  1. 验证在该挂载上执行二进制文件会失败:

    kubectl exec bind-mount-options-demo -- sh -c 'cp /bin/ls /tmp/ls && /tmp/ls'
    

    输出类似于:

    sh: /tmp/ls: Permission denied
    
  1. 删除你在本练习中创建的 Pod:

    kubectl delete pod bind-mount-options-demo
    

接下来

最后修改 October 09, 2026 at 10:05 AM PST: [zh-cn] Add configure-bind-mount-options.md (3f12064da3)