如果 Pod 不符合设置的配置文件,则拒绝 Pod 的准入
Pod 安全准入是Kubernetes Pod 安全标准的实现。Pod 安全准入限制 Pod 的行为。不符合全局或命名空间级别定义的 Pod 安全准入的 Pod 不会被集群接纳,也无法运行。
如果您的操作符项目不需要提升的权限即可运行,您可以确保您的工作负载在设置为restricted
Pod 安全级别的命名空间中运行。如果您的操作符项目需要提升的权限才能运行,则必须设置以下安全上下文配置
操作符命名空间允许的 Pod 安全准入级别
工作负载的服务帐户允许的安全上下文约束 (SCC)
更多信息,请参见理解和管理 Pod 安全准入。
Red Hat 支持的 Operator SDK CLI 工具版本(包括与 Operator 项目相关的脚手架和测试工具)已弃用,并计划在未来版本的 OpenShift Dedicated 中移除。Red Hat 将在此版本的生命周期内为该功能提供错误修复和支持,但此功能将不再接收增强功能,并将从未来的 OpenShift Dedicated 版本中移除。 不建议使用 Red Hat 支持的 Operator SDK 版本创建新的 Operator 项目。拥有现有 Operator 项目的操作符作者可以使用 OpenShift Dedicated 发布的 Operator SDK CLI 工具版本来维护他们的项目并创建针对较新版本的 OpenShift Dedicated 的 Operator 版本。 以下与 Operator 项目相关的基础镜像未被弃用。这些基础镜像的运行时功能和配置 API 仍然支持错误修复和解决 CVE。
有关不受支持的社区维护的 Operator SDK 版本的信息,请参见Operator SDK (Operator Framework)。 |
OpenShift Dedicated 包含Kubernetes Pod 安全准入。不符合全局或命名空间级别定义的 Pod 安全准入的 Pod 不会被集群接纳,也无法运行。
在全局范围内,强制执行privileged
配置文件,并使用restricted
配置文件进行警告和审计。
您也可以在命名空间级别配置 Pod 安全准入设置。
不要在默认项目中运行工作负载或共享对其的访问权限。默认项目保留用于运行核心集群组件。 以下默认项目被认为是高度特权的: |
您可以为命名空间配置以下 Pod 安全准入模式
模式 | 标签 | 描述 |
---|---|---|
|
|
如果 Pod 不符合设置的配置文件,则拒绝 Pod 的准入 |
|
|
如果 Pod 不符合设置的配置文件,则记录审计事件 |
|
|
如果 Pod 不符合设置的配置文件,则显示警告 |
除了全局 Pod 安全准入控制配置之外,控制器还会根据给定命名空间中服务帐户的 SCC 权限,向命名空间应用 Pod 安全准入控制warn
和audit
标签。
控制器检查ServiceAccount
对象的权限,以在每个命名空间中使用安全上下文约束。安全上下文约束 (SCC) 基于其字段值映射到 Pod 安全配置文件;控制器使用这些转换后的配置文件。Pod 安全准入warn
和audit
标签设置为命名空间中最特权的 Pod 安全配置文件,以防止在创建 Pod 时显示警告和记录审计事件。
命名空间标记基于对命名空间本地服务帐户权限的考虑。
直接应用 Pod 可能会使用运行 Pod 的用户的 SCC 权限。但是,在自动标记期间不会考虑用户权限。
为了确保您的 Operator 项目能够在各种部署和环境中运行,请将 Operator 的工作负载配置为在设置为restricted
Pod 安全级别的命名空间中运行。
您必须将 |
要将 Operator 工作负载配置为在设置为restricted
Pod 安全级别的命名空间中运行,请编辑您的 Operator 的命名空间定义,类似于以下示例
建议您在 Operator 的命名空间定义中设置 seccomp 配置文件。但是,在 OpenShift Dedicated 4.10 中不支持设置 seccomp 配置文件。 |
对于必须仅在 OpenShift Dedicated 4.11 及更高版本中运行的 Operator 项目,请编辑您的 Operator 的命名空间定义,类似于以下示例
config/manager/manager.yaml
文件...
spec:
securityContext:
seccompProfile:
type: RuntimeDefault (1)
runAsNonRoot: true
containers:
- name: <operator_workload_container>
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
...
1 | 通过将 seccomp 配置文件类型设置为RuntimeDefault ,SCC 将默认为命名空间的 Pod 安全配置文件。 |
对于也必须在 OpenShift Dedicated 4.10 中运行的 Operator 项目,请编辑您的 Operator 的命名空间定义,类似于以下示例
config/manager/manager.yaml
文件...
spec:
securityContext: (1)
runAsNonRoot: true
containers:
- name: <operator_workload_container>
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
...
1 | 将 seccomp 配置文件类型留空可确保您的 Operator 项目可以在 OpenShift Dedicated 4.10 中运行。 |
如果您的 Operator 项目需要提升的权限才能运行,则必须编辑您的 Operator 的集群服务版本 (CSV)。
在您的 Operator 的 CSV 中将安全上下文配置设置为所需的权限级别,类似于以下示例
<operator_name>.clusterserviceversion.yaml
文件...
containers:
- name: my-container
securityContext:
allowPrivilegeEscalation: false
capabilities:
add:
- "NET_ADMIN"
...
设置允许您的 Operator 工作负载使用所需安全上下文约束 (SCC) 的服务帐户权限,类似于以下示例
<operator_name>.clusterserviceversion.yaml
文件...
install:
spec:
clusterPermissions:
- rules:
- apiGroups:
- security.openshift.io
resourceNames:
- privileged
resources:
- securitycontextconstraints
verbs:
- use
serviceAccountName: default
...
编辑您的 Operator 的 CSV 说明,以解释您的 Operator 项目为何需要提升的权限,类似于以下示例
<operator_name>.clusterserviceversion.yaml
文件...
spec:
apiservicedefinitions:{}
...
description: The <operator_name> requires a privileged pod security admission label set on the Operator's namespace. The Operator's agents require escalated permissions to restart the node if the node needs remediation.