Merge pull request #49036 from windsonsea/sectext
[zh] Sync configure-pod-container/security-context.md
This commit is contained in:
commit
bb735f58b1
|
|
@ -922,9 +922,6 @@ Valid options for `type` include `RuntimeDefault`, `Unconfined`, and
|
||||||
indicates the path of the pre-configured profile on the node, relative to the
|
indicates the path of the pre-configured profile on the node, relative to the
|
||||||
kubelet's configured Seccomp profile location (configured with the `--root-dir`
|
kubelet's configured Seccomp profile location (configured with the `--root-dir`
|
||||||
flag).
|
flag).
|
||||||
|
|
||||||
Here is an example that sets the Seccomp profile to the node's container runtime
|
|
||||||
default profile:
|
|
||||||
-->
|
-->
|
||||||
## 为容器设置 Seccomp 配置
|
## 为容器设置 Seccomp 配置
|
||||||
|
|
||||||
|
|
@ -937,6 +934,10 @@ default profile:
|
||||||
该字段标明节点上预先设定的配置的路径,路径是相对于 kubelet 所配置的
|
该字段标明节点上预先设定的配置的路径,路径是相对于 kubelet 所配置的
|
||||||
Seccomp 配置路径(使用 `--root-dir` 设置)而言的。
|
Seccomp 配置路径(使用 `--root-dir` 设置)而言的。
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Here is an example that sets the Seccomp profile to the node's container runtime
|
||||||
|
default profile:
|
||||||
|
-->
|
||||||
下面是一个例子,设置容器使用节点上容器运行时的默认配置作为 Seccomp 配置:
|
下面是一个例子,设置容器使用节点上容器运行时的默认配置作为 Seccomp 配置:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|
@ -1088,17 +1089,16 @@ Kubernetes v1.27 引入了此行为的早期受限形式,仅适用于使用 `R
|
||||||
访问模式的卷(和 PersistentVolumeClaim)。
|
访问模式的卷(和 PersistentVolumeClaim)。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
As an alpha feature, you can enable the `SELinuxMount`
|
As an alpha feature, you can enable the `SELinuxMount` and `SELinuxChangePolicy`
|
||||||
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) to widen that
|
[feature gates](/docs/reference/command-line-tools-reference/feature-gates/) to widen that
|
||||||
performance improvement to other kinds of PersistentVolumeClaims, as explained in detail
|
performance improvement to other kinds of PersistentVolumeClaims, as explained in detail
|
||||||
below.
|
below.
|
||||||
-->
|
-->
|
||||||
作为一项 Alpha 特性,你可以启用 `SELinuxMount`
|
作为一项 Alpha 特性,你可以启用 `SELinuxMount` 和 `SELinuxChangePolicy`
|
||||||
[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/),
|
[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/),
|
||||||
将性能改进扩展到其他类型的 PersistentVolumeClaim,如下文详细解释。
|
将性能改进扩展到其他类型的 PersistentVolumeClaim,如下文详细解释。
|
||||||
{{< /note >}}
|
{{< /note >}}
|
||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
By default, the container runtime recursively assigns SELinux label to all
|
By default, the container runtime recursively assigns SELinux label to all
|
||||||
files on all Pod volumes. To speed up this process, Kubernetes can change the
|
files on all Pod volumes. To speed up this process, Kubernetes can change the
|
||||||
|
|
@ -1123,12 +1123,16 @@ To benefit from this speedup, all these conditions must be met:
|
||||||
<!--
|
<!--
|
||||||
* Pod must use PersistentVolumeClaim with applicable `accessModes` and [feature gates](/docs/reference/command-line-tools-reference/feature-gates/):
|
* Pod must use PersistentVolumeClaim with applicable `accessModes` and [feature gates](/docs/reference/command-line-tools-reference/feature-gates/):
|
||||||
* Either the volume has `accessModes: ["ReadWriteOncePod"]`, and feature gate `SELinuxMountReadWriteOncePod` is enabled.
|
* Either the volume has `accessModes: ["ReadWriteOncePod"]`, and feature gate `SELinuxMountReadWriteOncePod` is enabled.
|
||||||
* Or the volume can use any other access modes and both feature gates `SELinuxMountReadWriteOncePod` and `SELinuxMount` must be enabled.
|
* Or the volume can use any other access modes and both feature gates
|
||||||
|
`SELinuxMountReadWriteOncePod`, `SELinuxChangePolicy` and `SELinuxMount` must be enabled
|
||||||
|
and the Pod has `spec.securityContext.seLinuxChangePolicy` either nil (default) or `MountOption`.
|
||||||
-->
|
-->
|
||||||
* Pod 必须使用带有对应的 `accessModes` 和[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)
|
* Pod 必须使用带有对应的 `accessModes` 和[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)
|
||||||
的 PersistentVolumeClaim。
|
的 PersistentVolumeClaim。
|
||||||
* 卷具有 `accessModes: ["ReadWriteOncePod"]`,并且 `SELinuxMountReadWriteOncePod` 特性门控已启用。
|
* 卷具有 `accessModes: ["ReadWriteOncePod"]`,并且 `SELinuxMountReadWriteOncePod` 特性门控已启用。
|
||||||
* 或者卷可以使用任何其他访问模式,并且必须启用 `SELinuxMountReadWriteOncePod` 和 `SELinuxMount` 特性门控。
|
* 或者卷可以使用任何其他访问模式,并且必须启用 `SELinuxMountReadWriteOncePod`、`SELinuxChangePolicy`
|
||||||
|
和 `SELinuxMount` 特性门控,且 Pod 已将 `spec.securityContext.seLinuxChangePolicy` 设置为
|
||||||
|
nil(默认值)或 `MountOption`。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
* Pod (or all its Containers that use the PersistentVolumeClaim) must
|
* Pod (or all its Containers that use the PersistentVolumeClaim) must
|
||||||
|
|
@ -1152,7 +1156,7 @@ To benefit from this speedup, all these conditions must be met:
|
||||||
-->
|
-->
|
||||||
* 对应的 PersistentVolume 必须是:
|
* 对应的 PersistentVolume 必须是:
|
||||||
* 使用传统树内(In-Tree) `iscsi`、`rbd` 或 `fs` 卷类型的卷。
|
* 使用传统树内(In-Tree) `iscsi`、`rbd` 或 `fs` 卷类型的卷。
|
||||||
* 或者是使用 {< glossary_tooltip text="CSI" term_id="csi" >}} 驱动程序的卷
|
* 或者是使用 {{< glossary_tooltip text="CSI" term_id="csi" >}} 驱动程序的卷
|
||||||
CSI 驱动程序必须能够通过在 CSIDriver 实例中设置 `spec.seLinuxMount: true`
|
CSI 驱动程序必须能够通过在 CSIDriver 实例中设置 `spec.seLinuxMount: true`
|
||||||
以支持 `-o context` 挂载。
|
以支持 `-o context` 挂载。
|
||||||
|
|
||||||
|
|
@ -1160,11 +1164,116 @@ To benefit from this speedup, all these conditions must be met:
|
||||||
For any other volume types, SELinux relabelling happens another way: the container
|
For any other volume types, SELinux relabelling happens another way: the container
|
||||||
runtime recursively changes the SELinux label for all inodes (files and directories)
|
runtime recursively changes the SELinux label for all inodes (files and directories)
|
||||||
in the volume.
|
in the volume.
|
||||||
The more files and directories in the volume, the longer that relabelling takes.
|
|
||||||
-->
|
-->
|
||||||
对于所有其他卷类型,重打 SELinux 标签的方式有所不同:
|
对于所有其他卷类型,重打 SELinux 标签的方式有所不同:
|
||||||
容器运行时为卷中的所有节点(文件和目录)递归地修改 SELinux 标签。
|
容器运行时为卷中的所有节点(文件和目录)递归地修改 SELinux 标签。
|
||||||
卷中的文件和目录越多,重打标签需要耗费的时间就越长。
|
|
||||||
|
{{< feature-state feature_gate_name="SELinuxChangePolicy" >}}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
For Pods that want to opt-out from relabeling using mount options, they can set
|
||||||
|
`spec.securityContext.seLinuxChangePolicy` to `Recursive`. This is required
|
||||||
|
when multiple pods share a single volume on the same node, but they run with
|
||||||
|
different SELinux labels that allows simultaneous access to the volume. For example, a privileged pod
|
||||||
|
running with label `spc_t` and an unprivileged pod running with the default label `container_file_t`.
|
||||||
|
With unset `spec.securityContext.seLinuxChangePolicy` (or with the default value `MountOption`),
|
||||||
|
only one of such pods is able to run on a node, the other one gets ContainerCreating with error
|
||||||
|
`conflicting SELinux labels of volume <name of the volume>: <label of the running pod> and <label of the pod that can't start>`.
|
||||||
|
-->
|
||||||
|
对于不希望使用挂载选项来重新打标签的 Pod,可以将
|
||||||
|
`spec.securityContext.seLinuxChangePolicy` 设置为 `Recursive`。
|
||||||
|
当多个 Pod 共享同一节点上的单个卷,但使用不同的 SELinux 标签以允许同时访问此卷时,
|
||||||
|
此配置是必需的。例如,一个特权 Pod 运行时使用 `spc_t` 标签,
|
||||||
|
而一个非特权 Pod 运行时使用默认标签 `container_file_t`。
|
||||||
|
在不设置 `spec.securityContext.seLinuxChangePolicy`(或使用默认值 `MountOption`)的情况下,
|
||||||
|
这样的多个 Pod 中只能有一个在节点上运行,其他 Pod 会在 ContainerCreating 时报错
|
||||||
|
`conflicting SELinux labels of volume <卷名称>: <正运行的 Pod 的标签> and <未启动的 Pod 的标签>`。
|
||||||
|
|
||||||
|
<!--
|
||||||
|
#### SELinuxWarningController
|
||||||
|
To make it easier to identify Pods that are affected by the change in SELinux volume relabeling,
|
||||||
|
a new controller called `SELinuxWarningController` has been introduced in kube-controller-manager.
|
||||||
|
It is disabled by default and can be enabled by either setting the `--controllers=*,selinux-warning-controller`
|
||||||
|
[command line flag](/docs/reference/command-line-tools-reference/kube-controller-manager/),
|
||||||
|
or by setting `genericControllerManagerConfiguration.controllers`
|
||||||
|
[field in KubeControllerManagerConfiguration](/docs/reference/config-api/kube-controller-manager-config.v1alpha1/#controllermanager-config-k8s-io-v1alpha1-GenericControllerManagerConfiguration).
|
||||||
|
This controller requires `SELinuxChangePolicy` feature gate to be enabled.
|
||||||
|
-->
|
||||||
|
#### SELinuxWarningController
|
||||||
|
|
||||||
|
为了更容易识别受 SELinux 卷重新打标签的变化所影响的 Pod,一个名为
|
||||||
|
`SELinuxWarningController` 的新控制器已被添加到 kube-controller-manager 中。
|
||||||
|
这个控制器默认是被禁用的,你可以通过设置 `--controllers=*,selinux-warning-controller`
|
||||||
|
[命令行标志](/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager/)或通过在
|
||||||
|
[KubeControllerManagerConfiguration 中设置 `genericControllerManagerConfiguration.controllers` 字段](/zh-cn/docs/reference/config-api/kube-controller-manager-config.v1alpha1/#controllermanager-config-k8s-io-v1alpha1-GenericControllerManagerConfiguration)来启用。
|
||||||
|
此控制器需要启用 `SELinuxChangePolicy` 特性门控。
|
||||||
|
|
||||||
|
<!--
|
||||||
|
When enabled, the controller observes running Pods and when it detects that two Pods use the same volume
|
||||||
|
with different SELinux labels:
|
||||||
|
1. It emits an event to both of the Pods. `kubectl describe pod <pod-name>` the shows
|
||||||
|
`SELinuxLabel "<label on the pod>" conflicts with pod <the other pod name> that uses the same volume as this pod
|
||||||
|
with SELinuxLabel "<the other pod label>". If both pods land on the same node, only one of them may access the volume`.
|
||||||
|
2. Raise `selinux_warning_controller_selinux_volume_conflict` metric. The metric has both pod
|
||||||
|
names + namespaces as labels to identify the affected pods easily.
|
||||||
|
-->
|
||||||
|
当此控制器被启用时,它会观察运行中的 Pod。
|
||||||
|
当控制器检测到两个 Pod 使用相同的卷但具有不同的 SELinux 标签时:
|
||||||
|
|
||||||
|
1. 它会向这两个 Pod 发出一个事件。通过 `kubectl describe pod <Pod 名称>` 可以看到:
|
||||||
|
|
||||||
|
```
|
||||||
|
SELinuxLabel "<Pod 上的标签>" conflicts with pod <另一个 Pod 名称> that uses the same volume as this pod with SELinuxLabel "<另一个 Pod 标签>". If both pods land on the same node, only one of them may access the volume.
|
||||||
|
```
|
||||||
|
|
||||||
|
2. 增加 `selinux_warning_controller_selinux_volume_conflict` 指标值。
|
||||||
|
此指标将两个 Pod 的名称 + 命名空间作为标签,以便轻松识别受影响的 Pod。
|
||||||
|
|
||||||
|
<!--
|
||||||
|
A cluster admin can use this information to identify pods affected by the planning change and
|
||||||
|
proactively opt-out Pods from the optimization (i.e. set `spec.securityContext.seLinuxChangePolicy: Recursive`).
|
||||||
|
-->
|
||||||
|
集群管理员可以使用此信息识别受规划变更所影响的 Pod,并主动筛选出不需优化的 Pod
|
||||||
|
(即设置 `spec.securityContext.seLinuxChangePolicy: Recursive`)。
|
||||||
|
|
||||||
|
<!--
|
||||||
|
#### Feature gates
|
||||||
|
|
||||||
|
The following feature gates control the behavior of SELinux volume relabeling:
|
||||||
|
|
||||||
|
* `SELinuxMountReadWriteOncePod`: enables the optimization for volumes with `accessModes: ["ReadWriteOncePod"]`.
|
||||||
|
This is a very safe feature gate to enable, as it cannot happen that two pods can share one single volume with
|
||||||
|
this access mode. This feature gate is enabled by default sine v1.28.
|
||||||
|
-->
|
||||||
|
#### 特性门控
|
||||||
|
|
||||||
|
以下特性门控可以控制 SELinux 卷重新打标签的行为:
|
||||||
|
|
||||||
|
* `SELinuxMountReadWriteOncePod`:为具有 `accessModes: ["ReadWriteOncePod"]` 的卷启用优化。
|
||||||
|
启用此特性门控是非常安全的,因为在这种访问模式下,不会出现两个 Pod 共享同一卷的情况。
|
||||||
|
此特性门控自 v1.28 起默认被启用。
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* `SELinuxChangePolicy`: enables `spec.securityContext.seLinuxChangePolicy` field in Pod and related SELinuxWarningController
|
||||||
|
in kube-controller-manager. This feature can be used before enabling `SELinuxMount` to check Pods running on a cluster,
|
||||||
|
and to pro-actively opt-out Pods from the optimization.
|
||||||
|
This feature gate requires `SELinuxMountReadWriteOncePod` enabled. It is alpha and disabled by default in 1.32.
|
||||||
|
-->
|
||||||
|
* `SELinuxChangePolicy`:在 Pod 中启用 `spec.securityContext.seLinuxChangePolicy` 字段,
|
||||||
|
并在 kube-controller-manager 中启用相关的 SELinuxWarningController。
|
||||||
|
你可以在启用 `SELinuxMount` 之前使用此特性来检查集群中正在运行的 Pod,并主动筛选出不需优化的 Pod。
|
||||||
|
此特性门控需要启用 `SELinuxMountReadWriteOncePod`。它在 1.32 中是 Alpha 阶段,并默认被禁用。
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* `SELinuxMount` enables the optimization for all eligible volumes. Since it can break existing workloads, we recommend
|
||||||
|
enabling `SELinuxChangePolicy` feature gate + SELinuxWarningController first to check the impact of the change.
|
||||||
|
This feature gate requires `SELinuxMountReadWriteOncePod` and `SELinuxChangePolicy` enabled. It is alpha and disabled
|
||||||
|
by default in 1.32.
|
||||||
|
-->
|
||||||
|
* `SELinuxMount`:为所有符合条件的卷启用优化。由于可能会破坏现有的工作负载,所以我们建议先启用
|
||||||
|
`SELinuxChangePolicy` 特性门控和 SELinuxWarningController,以检查这种更改的影响。
|
||||||
|
此特性门控要求启用 `SELinuxMountReadWriteOncePod` 和 `SELinuxChangePolicy`。
|
||||||
|
它在 1.32 中是 Alpha 阶段,并默认被禁用。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
## Managing access to the `/proc` filesystem {#proc-access}
|
## Managing access to the `/proc` filesystem {#proc-access}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue