diff --git a/content/zh-cn/docs/tasks/configure-pod-container/security-context.md b/content/zh-cn/docs/tasks/configure-pod-container/security-context.md index d5bfb0eed1..371deecd27 100644 --- a/content/zh-cn/docs/tasks/configure-pod-container/security-context.md +++ b/content/zh-cn/docs/tasks/configure-pod-container/security-context.md @@ -710,7 +710,27 @@ To assign SELinux labels, the SELinux security module must be loaded on the host --> ### 高效重打 SELinux 卷标签 -{{< feature-state for_k8s_version="v1.27" state="beta" >}} +{{< feature-state feature_gate_name="SELinuxMountReadWriteOncePod" >}} + +{{< note >}} + +Kubernetes v1.27 引入了此行为的早期受限形式,仅适用于使用 `ReadWriteOncePod` +访问模式的卷(和 PersistentVolumeClaim)。 + + +作为一项 Alpha 特性,你可以启用 `SELinuxMount` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), +将性能改进扩展到其他类型的 PersistentVolumeClaim,如下文详细解释。 +{{< /note >}} + -* Pod 必须以 `accessModes: ["ReadWriteOncePod"]` 模式使用 PersistentVolumeClaim。 +* Pod 必须使用带有对应的 `accessModes` 和[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) + 的 PersistentVolumeClaim。 + * 卷具有 `accessModes: ["ReadWriteOncePod"]`,并且 `SELinuxMountReadWriteOncePod` 特性门控已启用。 + * 或者卷可以使用任何其他访问模式,并且必须启用 `SELinuxMountReadWriteOncePod` 和 `SELinuxMount` 特性门控。 -如果你的 Kubernetes 版本是 v1.25,请参阅此任务页面的 v1.25 版本: -[为 Pod 或 Container 配置安全上下文](https://v1-25.docs.kubernetes.io/docs/tasks/configure-pod-container/security-context/)(v1.25)。 -该文档中有一个重要的说明:kubelet 在重启后会丢失对卷标签的追踪记录。 -这个缺陷已经在 Kubernetes 1.26 中修复。 +## 管理对 `/proc` 文件系统的访问 {#proc-access} + +{{< feature-state feature_gate_name="ProcMountType" >}} + + +对于遵循 OCI 运行时规范的运行时,容器默认运行模式下,存在多个被屏蔽且只读的路径。 +这样做的结果是在容器的 mount 命名空间内会存在这些路径,并且这些路径的工作方式与容器是隔离主机时类似, +但容器进程无法写入它们。 +被屏蔽的和只读的路径列表如下: + + +- 被屏蔽的路径: + + - `/proc/asound` + - `/proc/acpi` + - `/proc/kcore` + - `/proc/keys` + - `/proc/latency_stats` + - `/proc/timer_list` + - `/proc/timer_stats` + - `/proc/sched_debug` + - `/proc/scsi` + - `/sys/firmware` + + +- 只读的路径: + + - `/proc/bus` + - `/proc/fs` + - `/proc/irq` + - `/proc/sys` + - `/proc/sysrq-trigger` + + +对于某些 Pod,你可能希望绕过默认的路径屏蔽。 +最常见的情况是你尝试在 Kubernetes 容器内(在 Pod 内)运行容器。 + + +`securityContext` 字段 `procMount` 允许用户请求容器的 `/proc` 为 `Unmasked`, +或者由容器进程以读写方式挂载。这一设置也适用于不在 `/proc` 内的 `/sys/firmware` 路径。 + +```yaml +... +securityContext: + procMount: Unmasked +``` + +{{< note >}} + +将 `procMount` 设置为 Unmasked 需要将 Pod 规约中的 `spec.hostUsers` +的值设置为 `false`。换句话说:希望使用未被屏蔽的 `/proc` 或 `/sys` +路径的容器也必须位于 [user 命名空间](/zh-cn/docs/concepts/workloads/pods/user-namespaces/)中。 +Kubernetes v1.12 到 v1.29 没有强制执行该要求。 {{< /note >}} * [PodSecurityContext](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritycontext-v1-core) API 定义 * [SecurityContext](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#securitycontext-v1-core) API 定义 @@ -872,3 +968,5 @@ kubectl delete pod security-context-demo-4 * [AllowPrivilegeEscalation 的设计文档(英文)](https://github.com/kubernetes/design-proposals-archive/blob/main/auth/no-new-privs.md) * 关于在 Linux 系统中的安全机制的更多信息,可参阅 [Linux 内核安全性能力概述](https://www.linux.com/learn/overview-linux-kernel-security-features)(注意:部分信息已过时)。 +* 了解 Linux Pod 的 [user 命名空间](/zh-cn/docs/concepts/workloads/pods/user-namespaces/)。 +* [OCI 运行时规范中的被屏蔽的路径](https://github.com/opencontainers/runtime-spec/blob/f66aad47309/config-linux.md#masked-paths)