--- api_metadata: apiVersion: "policy/v1beta1" import: "k8s.io/api/policy/v1beta1" kind: "PodSecurityPolicy" content_type: "api_reference" description: "PodSecurityPolicy 对影响到安全上下文的请求能力进行治理,而安全上下文可以应用到 Pod 和容器上。" title: "PodSecurityPolicy v1beta1" weight: 5 --- `apiVersion: policy/v1beta1` `import "k8s.io/api/policy/v1beta1"` ## PodSecurityPolicy {#PodSecurityPolicy} PodSecurityPolicy 对影响到安全上下文的请求能力进行治理,而安全上下文可以应用到 Pod 和容器上。 在 1.21 中已被弃用。
- **apiVersion**: policy/v1beta1 - **kind**: PodSecurityPolicy - **metadata** (}}">ObjectMeta) 标准的对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - **spec** (}}">PodSecurityPolicySpec) spec 定义强制执行的策略。 ## PodSecurityPolicySpec {#PodSecurityPolicySpec} PodSecurityPolicySpec 定义强制执行的策略。
- **runAsUser** (RunAsUserStrategyOptions),必需 runAsUser 是一种策略,它将规定允许为 runAsUser 设置的值。 **RunAsUserStrategyOptions 定义策略类型和用于创建该策略的任意选项。** - **runAsUser.rule** (string),必需 rule 是一种策略,它将规定允许为 runAsUser 设置的值。 - **runAsUser.ranges** ([]IDRange) ranges 是可以使用的 UID 的允许范围。 如果你要强制使用某个确定 UID,则应提供起点值和终点值相同的范围设定。 对于 mustRunAs 而言是必需的。 **IDRange 提供了 ID 的最小/最大允许范围。** - **runAsUser.ranges.max** (int64),必需 max 是范围的终点,该值包含在此范围内。 - **runAsUser.ranges.min** (int64),必需 min 是范围的起点,该值包含在此范围内。 - **runAsGroup** (RunAsGroupStrategyOptions) runAsGroup 是一种策略,它将规定可以为 runAsGroup 设置的值。 如果省略此字段,则 Pod 的 runAsGroup 可以取任何值。 此字段要求启用 `RunAsGroup` 特性门控。 **RunAsGroupStrategyOptions 定义策略类型和用于创建该策略的任意选项。** - **runAsGroup.rule** (string),必需 rule 是一种策略,它将规定可以为 runAsGroup 设置的值。 - **runAsGroup.ranges** ([]IDRange) ranges 是可以使用的 GID 的范围。 如果你要强制使用某个确定的 GID,则可提供起点和终点相同的范围设定。 对于 mustRunAs 而言是必需的。 **IDRange 提供了 ID 的最小/最大允许范围。** - **runAsGroup.ranges.max** (int64),必需 max 是范围的终点,该值包含在此范围内。 - **runAsGroup.ranges.min** (int64),必需 min 是范围的起点,该值包含在此范围内。 - **fsGroup** (FSGroupStrategyOptions),必需 fsGroup 是一种策略,它将规定 SecurityContext 将使用哪个 fs 组。 **FSGroupStrategyOptions 定义策略类型和用于创建该策略的任意选项。** - **fsGroup.ranges** ([]IDRange) ranges 是 fs 组的允许范围。 如果你要强制使用某个确定的 fs 组,则应提供起点和终点相同的范围设定。 对于 mustRunAs 而言是必需的。 **IDRange 提供了 ID 的最小/最大允许范围。** - **fsGroup.ranges.max** (int64),必需 max 是范围的终点,该值包含在此范围内。 - **fsGroup.ranges.min** (int64),必需 min 是范围的起点,该值包含在此范围内。 - **fsGroup.rule** (string) rule 是一种策略,它将规定 SecurityContext 中使用哪个 FSGroup。 - **supplementalGroups** (SupplementalGroupsStrategyOptions),必需 supplementalGroups 是一种策略,它将规定 SecurityContext 将使用哪个补充组。 **SupplementalGroupsStrategyOptions 定义策略类型和用于创建该策略的任意选项。** - **supplementalGroups.ranges** ([]IDRange) ranges 是补充组的允许范围。 如果你要强制使用固定的某个补充组,则应提供起点和终点相同的范围设定。 对于 mustRunAs 而言是必需的。 **IDRange 提供了 ID 的最小/最大允许范围。** - **supplementalGroups.ranges.max** (int64),必需 max 是范围的终点,该值包含在此范围内。 - **supplementalGroups.ranges.min** (int64),必需 min 是范围的起点,该值包含在此范围内。 - **supplementalGroups.rule** (string) rule 是一种策略,它将规定 SecurityContext 中使用哪个补充组。 - **seLinux** (SELinuxStrategyOptions),必需 seLinux 是一种策略,它将规定可以设置的标签集合。 **SELinuxStrategyOptions 定义策略类型和用于创建该策略的任意选项。** - **seLinux.rule** (string),必需 rule 是一种策略,它将规定可以设置的标签集合。 - **seLinux.seLinuxOptions** (SELinuxOptions) seLinuxOptions 是运行所必需的。对于 mustRunAs 而言是必需的。更多信息: https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/security-context/ **SELinuxOptions 是应用到容器的标签。** - **seLinux.seLinuxOptions.level** (string) level 是应用到容器的 SELinux 级别标签。 - **seLinux.seLinuxOptions.role** (string) role 是应用到容器的 SELinux 角色标签。 - **seLinux.seLinuxOptions.type** (string) type 是应用到容器的 SELinux 类型标签。 - **seLinux.seLinuxOptions.user** (string) user 是应用到容器的 SELinux 用户标签。 - **readOnlyRootFilesystem** (boolean) readOnlyRootFilesystem 设为 true 时将强制容器使用只读根文件系统来运行。 如果容器明确请求以非只读根文件系统来运行,则 PSP 应拒绝该 Pod。 如果设置为 false,则如果愿意,容器可以以只读根文件系统来运行,但不是必须使用只读根文件系统。 - **privileged** (boolean) privileged 决定 Pod 是否可以请求以特权模式运行。 - **allowPrivilegeEscalation** (boolean) allowPrivilegeEscalation 决定 Pod 是否可以请求允许提升特权。如果未指定,则默认为 true。 - **defaultAllowPrivilegeEscalation** (boolean) defaultAllowPrivilegeEscalation 控制一个进程是否可以获得比其父进程更多权限的默认设置。 - **allowedCSIDrivers** ([]AllowedCSIDriver) allowedCSIDrivers 是允许使用的内联 CSI 驱动列表,这些驱动必须被显式嵌入到 Pod 规约中。 空值表示任何 CSI 驱动都可以用于内联临时卷。这是一个 beta 字段, 只有 API 服务器启用 CSIInlineVolume 特性门控,才会使用此字段。 **AllowedCSIDriver 表示允许使用的单个内联 CSI 驱动。** - **allowedCSIDrivers.name** (string),必需 name 是 CSI 驱动的注册名称。 - **allowedCapabilities** ([]string) allowedCapabilities 是可以请求添加到容器的权能列表。 这个字段中的权能可以由 Pod 作者自行添加。 你不得同时在 allowedCapabilities 和 requiredDropCapabilities 中列出同一个权能。 - **requiredDropCapabilities** ([]string) requiredDropCapabilities 是将从容器中丢弃的权能。这些权能需要被丢弃,且不能添加。 - **defaultAddCapabilities** ([]string) defaultAddCapabilities 是默认被添加到容器的权能集,除非 Pod 规约特意丢弃该权能。 你不可以同时在 defaultAddCapabilities 和 requiredDropCapabilities 中列出同一个权能。 此处添加的权能是被隐式允许的,不必包括在 allowedCapabilities 列表中。 - **allowedFlexVolumes** ([]AllowedFlexVolume) allowedFlexVolumes 是允许设置的 FlexVolume 卷的列表。 空或 nil 值表示可以使用所有 FlexVolume。 只有在 “volumes” 字段中允许使用 Flexvolume 卷时,此参数才有效。 **AllowedFlexVolume 表示允许使用的单个 Flexvolume。** - **allowedFlexVolumes.driver** (string),必需 driver 是 FlexVolume 驱动的名称。 - **allowedHostPaths** ([]AllowedHostPath) allowedHostPaths 是允许使用的主机路径的列表。空表示可以使用所有主机路径。 **allowedHostPath 定义将按 Pod 使用的策略启用的主机卷条件。它要求定义路径前缀。** - **allowedHostPaths.pathPrefix** (string) pathPrefix 是主机卷必须匹配的路径前缀。 此字段不支持 `*`。使用主机路径检验路径前缀时,会裁剪掉尾部的斜线。 例如:`/foo` 将允许 `/foo`、`/foo/` 和 `/foo/bar`。 `/foo` 将不允许 `/food` 或 `/etc/foo`。 - **allowedHostPaths.readOnly** (boolean) 当设置为 true 时,仅当所有与 pathPrefix 匹配的主机卷的卷挂载均为 readOnly 时,才允许使用。 - **allowedProcMountTypes** ([]string) AllowedProcMountTypes 是允许使用的 ProcMountType 的列表。 空表或 nil 表示仅可以使用 DefaultProcMountType。 此字段要求启用 ProcMountType 特性门控。 - **allowedUnsafeSysctls** ([]string) allowedUnsafeSysctls 是明确允许的不安全 sysctl 的列表,默认为空。 每个条目要么是一个普通的 sysctl 名称,要么以 “*” 结尾, 在后面这种情况下字符串值被视为所允许的 sysctl 的前缀。 单个 `*` 意味着允许所有不安全的 sysctl。 Kubelet 必须显式列出所有被允许的、不安全的 sysctl,以防被拒绝。 例如 `foo/*` 允许 `foo/bar`、`foo/baz` 等。 例如 `foo.*` 允许 `foo.bar`、`foo.baz` 等。 - **forbiddenSysctls** ([]string) forbiddenSysctls 是被明确禁止的 sysctl 的列表,默认为空。 每个条目要么是一个普通的 sysctl 名称,要么以 `*` 结尾, 以 `*` 结尾的字符串值表示被禁止的 sysctl 的前缀。 单个 `*` 意味着禁止所有 sysctl。 例如 `foo/*` 禁止 `foo/bar`、`foo/baz` 等。 例如 `foo.*` 禁止 `foo.bar`、`foo.baz` 等。 - **hostIPC** (boolean) hostIPC 决定此策略是否允许在 Pod 规约中使用 hostIPC。 - **hostNetwork** (boolean) hostNetwork 决定此策略是否允许在 Pod 规约中使用 hostNetwork。 - **hostPID** (boolean) hostPID 决定此策略是否允许在 Pod 规约中使用 hostPID。 - **hostPorts** ([]HostPortRange) hostPorts 决定允许暴露哪些主机端口范围。 **HostPortRange 定义将按 Pod 使用的策略启用的主机端口范围。它要求同时定义起点和终点。** - **hostPorts.max** (int32),必需 max 是范围的终点,该值包含在此范围内。 - **hostPorts.min** (int32),必需 min 是范围的起点,该值包含在此范围内。 - **runtimeClass** (RuntimeClassStrategyOptions) runtimeClass 是一种策略,它将规定 Pod 所被允许的 RuntimeClass。 如果省略此字段,则 Pod 的 runtimeClassName 将不受限制。 该字段的实施取决于被启用的 RuntimeClass 特性门控。 **RuntimeClassStrategyOptions 定义一种策略,它将规定 Pod 所被允许的 RuntimeClass。** - **runtimeClass.allowedRuntimeClassNames** ([]string),必需 allowedRuntimeClassNames 是可以在 Pod 中指定的 runtimeClass 名称的列表。 `*` 值意味着允许任何 runtimeClass 值,并且如果设置了 `*`,则它必须是唯一的列表项。 空列表要求不能设置 runtimeClassName 字段。 - **runtimeClass.defaultRuntimeClassName** (string) defaultRuntimeClassName 是要在 Pod 中设置的默认 runtimeClassName。 该默认值必须被 allowedRuntimeClassNames 列表所允许。nil 值不会改变 Pod 设置。 - **volumes** ([]string) volumes 是所允许的卷插件的列表。空的列表意味着不可以使用卷。要允许所有卷,你可以使用 `*`。 ## PodSecurityPolicyList {#PodSecurityPolicyList} PodSecurityPolicyList 是 PodSecurityPolicy 对象的列表。
- **apiVersion**: policy/v1beta1 - **kind**: PodSecurityPolicyList - **metadata** (}}">ListMeta) 标准的列表元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - **items** ([]}}">PodSecurityPolicy),必需 items 是 PodSecurityPolicy 对象的列表。 ## 操作 {#Operations}
### `get` 读取指定的 PodSecurityPolicy #### HTTP 请求 GET /apis/policy/v1beta1/podsecuritypolicies/{name} #### 参数 - **name** (**路径参数**): string,必需 PodSecurityPolicy 的名称 - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">PodSecurityPolicy): OK 401: Unauthorized ### `list` 列出或监视 PodSecurityPolicy 类别的对象 #### HTTP 请求 GET /apis/policy/v1beta1/podsecuritypolicies #### 参数 - **allowWatchBookmarks** (**查询参数**): boolean }}">allowWatchBookmarks - **continue** (**查询参数**): string }}">continue - **fieldSelector** (**查询参数**): string }}">fieldSelector - **labelSelector** (**查询参数**): string }}">labelSelector - **limit** (**查询参数**): integer }}">limit - **pretty** (**查询参数**): string }}">pretty - **resourceVersion** (**查询参数**): string }}">resourceVersion - **resourceVersionMatch** (**查询参数**): string }}">resourceVersionMatch - **timeoutSeconds** (**查询参数**): integer }}">timeoutSeconds - **watch** (**查询参数**): boolean }}">watch #### 响应 200 (}}">PodSecurityPolicyList): OK 401: Unauthorized ### `create` 创建 PodSecurityPolicy #### HTTP 请求 POST /apis/policy/v1beta1/podsecuritypolicies #### 参数 - **body**: }}">PodSecurityPolicy,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">PodSecurityPolicy): OK 201 (}}">PodSecurityPolicy): Created 202 (}}">PodSecurityPolicy): Accepted 401: Unauthorized ### `update` 替换指定的 PodSecurityPolicy #### HTTP 请求 PUT /apis/policy/v1beta1/podsecuritypolicies/{name} #### 参数 - **name** (**路径参数**): string,必需 PodSecurityPolicy 的名称 - **body**: }}">PodSecurityPolicy,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">PodSecurityPolicy): OK 201 (}}">PodSecurityPolicy): Created 401: Unauthorized ### `patch` 部分更新指定的 PodSecurityPolicy #### HTTP 请求 PATCH /apis/policy/v1beta1/podsecuritypolicies/{name} #### 参数 - **name** (**路径参数**): string,必需 PodSecurityPolicy 的名称 - **body**: }}">Patch,必需 - **dryRun** (**查询参数**): string }}">dryRun - **fieldManager** (**查询参数**): string }}">fieldManager - **fieldValidation** (**查询参数**): string }}">fieldValidation - **force** (**查询参数**): boolean }}">force - **pretty** (**查询参数**): string }}">pretty #### 响应 200 (}}">PodSecurityPolicy): OK 201 (}}">PodSecurityPolicy): Created 401: Unauthorized ### `delete` 删除 PodSecurityPolicy #### HTTP 请求 DELETE /apis/policy/v1beta1/podsecuritypolicies/{name} #### 参数 - **name** (**路径参数**): string,必需 PodSecurityPolicy 的名称 - **body**: }}">DeleteOptions - **dryRun** (**查询参数**): string }}">dryRun - **gracePeriodSeconds** (**查询参数**): integer }}">gracePeriodSeconds - **pretty** (**查询参数**): string }}">pretty - **propagationPolicy** (**查询参数**): string }}">propagationPolicy #### 响应 200 (}}">PodSecurityPolicy): OK 202 (}}">PodSecurityPolicy): Accepted 401: Unauthorized ### `deletecollection` 删除 PodSecurityPolicy 的集合 #### HTTP 请求 DELETE /apis/policy/v1beta1/podsecuritypolicies #### 参数 - **body**: }}">DeleteOptions - **continue** (**查询参数**): string }}">continue - **dryRun** (**查询参数**): string }}">dryRun - **fieldSelector** (**查询参数**): string }}">fieldSelector - **gracePeriodSeconds** (**查询参数**): integer }}">gracePeriodSeconds - **labelSelector** (**查询参数**): string }}">labelSelector - **limit** (**查询参数**): integer }}">limit - **pretty** (**查询参数**): string }}">pretty - **propagationPolicy** (**查询参数**): string }}">propagationPolicy - **resourceVersion** (**查询参数**): string }}">resourceVersion - **resourceVersionMatch** (**查询参数**): string }}">resourceVersionMatch - **timeoutSeconds** (**查询参数**): integer }}">timeoutSeconds #### 响应 200 (}}">Status): OK 401: Unauthorized