5.5. Compliance Operator 管理
5.5.1. 安装 Compliance Operator
在使用 Compliance Operator 之前,您必须保证在集群中部署它。
Compliance Operator 可能会报告有关受管平台(如 OpenShift Dedicated、Red Hat OpenShift Service on AWS Classic)和 Microsoft Azure Red Hat OpenShift 的不正确的结果。如需更多信息,请参阅知识库文章 Compliance Operator 报告受管服务的错误结果。
在部署 Compliance Operator 之前,您需要在集群中定义持久性存储来存储原始结果输出。如需更多信息,请参阅持久性存储 概述 和管理默认存储类。
5.5.1.1. 通过 Web 控制台安装 Compliance Operator
先决条件
-
您必须具有
admin
权限。 -
您必须配置了
StorageClass
资源。
流程
-
在 OpenShift Container Platform Web 控制台中导航至 Operators
OperatorHub。 - 搜索 Compliance Operator,然后点 Install。
-
保留 安装模式 和 命名空间 的默认选择,以确保将 Operator 安装到
openshift-compliance
命名空间中。 - 点 Install。
验证
确认安装成功:
-
导航到 Operators
Installed Operators 页面。 -
检查 Compliance Operator 是否已安装在
openshift-compliance
命名空间中,其状态为Succeeded
。
如果 Operator 没有成功安装:
-
导航到 Operators
Installed Operators 页面,并检查 Status
列中是否有任何错误或故障。 -
导航到 Workloads
Pods 页面,检查 openshift-compliance
项目中报告问题的 pod 的日志。
如果 restricted
安全性上下文约束(SCC)已被修改为包含 system:authenticated
组或添加了 requiredDropCapabilities
,则 Compliance Operator 可能会因为权限问题而无法正常工作。
您可以为 Compliance Operator scanner Pod 服务帐户创建自定义 SCC。如需更多信息,请参阅为 Compliance Operator 创建自定义 SCC。
5.5.1.2. 使用 CLI 安装 Compliance Operator
先决条件
-
您必须具有
admin
权限。 -
您必须配置了
StorageClass
资源。
流程
定义一个
Namespace
对象:namespace-object.yaml
示例apiVersion: v1 kind: Namespace metadata: labels: openshift.io/cluster-monitoring: "true" pod-security.kubernetes.io/enforce: privileged 1 name: openshift-compliance
- 1
- 在 OpenShift Container Platform 4.13 中,pod 安全标签必须在命名空间级别设置为
privileged
。
创建
Namespace
对象:$ oc create -f namespace-object.yaml
定义一个
OperatorGroup
对象:operator-group-object.yaml
示例apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - openshift-compliance
创建
OperatorGroup
对象:$ oc create -f operator-group-object.yaml
定义一个
Subscription
对象:subscription-object.yaml
示例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator-sub namespace: openshift-compliance spec: channel: "stable" installPlanApproval: Automatic name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace
创建
Subscription
对象:$ oc create -f subscription-object.yaml
如果要设置全局调度程序功能并启用 defaultNodeSelector
,您必须手动创建命名空间并更新 openshift-compliance
命名空间的注解,或安装 Compliance Operator 的命名空间,使用 openshift.io/node-selector: ""
。这会删除默认节点选择器并防止部署失败。
验证
通过检查 CSV 文件来验证安装是否成功:
$ oc get csv -n openshift-compliance
验证 Compliance Operator 是否正在运行:
$ oc get deploy -n openshift-compliance
5.5.1.3. 在 ROSA 托管 control plane (HCP) 上安装 Compliance Operator
从 Compliance Operator 1.5.0 发行版本开始,Operator 会使用 Hosted control plane 针对 Red Hat OpenShift Service on AWS 测试。
在 Red Hat OpenShift Service on AWS 上托管的 control plane 集群限制对由红帽管理的 control plane 的访问。默认情况下,Compliance Operator 将调度到 master
节点池中的节点,该节点在 Red Hat OpenShift Service on AWS Hosted control plane 安装中不可用。这要求您配置 Subscription
对象,以便 Operator 在可用节点池中调度。此步骤是在 Red Hat OpenShift Service on AWS Hosted control plane 集群上成功安装所必需的。
先决条件
-
您必须具有
admin
权限。 -
您必须配置了
StorageClass
资源。
流程
定义一个
Namespace
对象:namespace-object.yaml
文件示例apiVersion: v1 kind: Namespace metadata: labels: openshift.io/cluster-monitoring: "true" pod-security.kubernetes.io/enforce: privileged 1 name: openshift-compliance
- 1
- 在 OpenShift Container Platform 4.13 中,pod 安全标签必须在命名空间级别设置为
privileged
。
运行以下命令来创建
Namespace
对象:$ oc create -f namespace-object.yaml
定义一个
OperatorGroup
对象:operator-group-object.yaml
文件示例apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - openshift-compliance
运行以下命令来创建
OperatorGroup
对象:$ oc create -f operator-group-object.yaml
定义一个
Subscription
对象:subscription-object.yaml
文件示例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator-sub namespace: openshift-compliance spec: channel: "stable" installPlanApproval: Automatic name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace config: nodeSelector: node-role.kubernetes.io/worker: "" 1
- 1
- 更新 Operator 部署,以便在
worker
节点上部署。
运行以下命令来创建
Subscription
对象:$ oc create -f subscription-object.yaml
验证
运行以下命令检查集群服务版本 (CSV) 文件来验证安装是否成功:
$ oc get csv -n openshift-compliance
运行以下命令验证 Compliance Operator 是否正在运行:
$ oc get deploy -n openshift-compliance
如果 restricted
安全性上下文约束(SCC)已被修改为包含 system:authenticated
组或添加了 requiredDropCapabilities
,则 Compliance Operator 可能会因为权限问题而无法正常工作。
您可以为 Compliance Operator scanner Pod 服务帐户创建自定义 SCC。如需更多信息,请参阅为 Compliance Operator 创建自定义 SCC。
5.5.1.4. 在 Hypershift 托管 control plane 上安装 Compliance Operator
通过创建一个 Subscription
文件,可以使用 OperatorHub 在托管 control plane 中安装 Compliance Operator。
托管的 control plane 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
-
您必须具有
admin
权限。
流程
定义类似如下的
Namespace
对象:namespace-object.yaml
示例apiVersion: v1 kind: Namespace metadata: labels: openshift.io/cluster-monitoring: "true" pod-security.kubernetes.io/enforce: privileged 1 name: openshift-compliance
- 1
- 在 OpenShift Container Platform 4.13 中,pod 安全标签必须在命名空间级别设置为
privileged
。
运行以下命令来创建
Namespace
对象:$ oc create -f namespace-object.yaml
定义一个
OperatorGroup
对象:operator-group-object.yaml
示例apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - openshift-compliance
运行以下命令来创建
OperatorGroup
对象:$ oc create -f operator-group-object.yaml
定义一个
Subscription
对象:subscription-object.yaml
示例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator-sub namespace: openshift-compliance spec: channel: "stable" installPlanApproval: Automatic name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace config: nodeSelector: node-role.kubernetes.io/worker: "" env: - name: PLATFORM value: "HyperShift"
运行以下命令来创建
Subscription
对象:$ oc create -f subscription-object.yaml
验证
运行以下命令,检查 CSV 文件来验证安装是否成功:
$ oc get csv -n openshift-compliance
运行以下命令验证 Compliance Operator 是否正在运行:
$ oc get deploy -n openshift-compliance
其他资源
5.5.1.5. 其他资源
- Compliance Operator 在受限网络环境中被支持。如需更多信息,请参阅在受限网络中使用 Operator Lifecycle Manager。
5.5.2. 更新 Compliance Operator
作为集群管理员,您可以在 OpenShift Container Platform 集群上更新 Compliance Operator。
在将 OpenShift Container Platform 集群更新至版本 4.14 或更高版本前,建议将 Compliance Operator 更新至 1.3.1 或更高版本。
5.5.2.1. 准备 Operator 更新
已安装的 Operator 的订阅指定一个更新频道,用于跟踪和接收 Operator 的更新。您可以更改更新频道,以开始跟踪并从更新频道接收更新。
订阅中更新频道的名称可能会因 Operator 而异,但应遵守给定 Operator 中的常规约定。例如,频道名称可能会遵循 Operator 提供的应用程序的次发行版本更新流(1.2
、1.3
)或发行的频率(stable
、fast
)。
您不能将已安装的 Operator 更改为比当前频道旧的频道。
红帽客户门户网站 Labs 包括以下应用程序,可帮助管理员准备更新其 Operator:
您可以使用应用程序搜索基于 Operator Lifecycle Manager 的 Operator,并在不同版本的 OpenShift Container Platform 中验证每个更新频道的可用 Operator 版本。不包含基于 Cluster Version Operator 的 Operator。
5.5.2.2. 更改 Operator 的更新频道
您可以使用 OpenShift Container Platform Web 控制台更改 Operator 的更新频道。
如果订阅中的批准策略被设置为 Automatic,则更新过程会在所选频道中提供新的 Operator 版本时立即启动。如果批准策略设为 Manual,则必须手动批准待处理的更新。
先决条件
- 之前使用 Operator Lifecycle Manager(OLM)安装的 Operator。
流程
-
在 web 控制台的 Administrator 视角中,导航到 Operators
Installed Operators。 - 点击您要更改更新频道的 Operator 名称。
- 点 Subscription 标签页。
- 点 Update channel 下的更新频道名称。
- 点要更改的更新频道,然后点 Save。
对于带有 自动批准策略 的订阅,更新会自动开始。返回到 Operators
Installed Operators 页面,以监控更新的进度。完成后,状态会变为 Succeeded 和 Up to date。 对于采用手动批准策略的订阅,您可以从 Subscription 选项卡中手动批准更新。
5.5.2.3. 手动批准待处理的 Operator 更新
如果已安装的 Operator 的订阅被设置为 Manual,则当其当前更新频道中发布新更新时,在开始安装前必须手动批准更新。
先决条件
- 之前使用 Operator Lifecycle Manager(OLM)安装的 Operator。
流程
-
在 OpenShift Container Platform Web 控制台的 Administrator 视角中,进入 Operators
Installed Operators。 - 处于待定更新的 Operator 会显示 Upgrade available 状态。点您要更新的 Operator 的名称。
- 点 Subscription 标签页。任何需要批准的更新都会在 Upgrade status 旁边显示。例如:它可能会显示 1 requires approval。
- 点 1 requires approval,然后点 Preview Install Plan。
- 检查列出可用于更新的资源。在满意后,点 Approve。
-
返回到 Operators
Installed Operators 页面,以监控更新的进度。完成后,状态会变为 Succeeded 和 Up to date。
5.5.3. 管理 Compliance Operator
本节介绍安全性内容的生命周期,包括如何使用合规性内容的更新版本以及如何创建自定义 ProfileBundle
对象。
5.5.3.1. ProfileBundle CR 示例
ProfileBundle
对象需要两个信息:包含 contentImage
的容器镜像的 URL 以及包含合规性内容的文件。contentFile
参数相对于文件系统的根目录。您可以定义内置的 rhcos4
ProfileBundle
对象,如下例所示:
apiVersion: compliance.openshift.io/v1alpha1 kind: ProfileBundle metadata: creationTimestamp: "2022-10-19T12:06:30Z" finalizers: - profilebundle.finalizers.compliance.openshift.io generation: 1 name: rhcos4 namespace: openshift-compliance resourceVersion: "46741" uid: 22350850-af4a-4f5c-9a42-5e7b68b82d7d spec: contentFile: ssg-rhcos4-ds.xml 1 contentImage: registry.redhat.io/compliance/openshift-compliance-content-rhel8@sha256:900e... 2 status: conditions: - lastTransitionTime: "2022-10-19T12:07:51Z" message: Profile bundle successfully parsed reason: Valid status: "True" type: Ready dataStreamStatus: VALID
5.5.3.2. 更新安全性内容
安全内容作为 ProfileBundle
对象引用的容器镜像包括。要准确跟踪从捆绑包(如 Rules 或 Profiles)解析的 ProfileBundles
和 CustomResources 的更新,请使用摘要而不是标签来识别包含合规性内容的容器镜像:
$ oc -n openshift-compliance get profilebundles rhcos4 -oyaml
输出示例
apiVersion: compliance.openshift.io/v1alpha1
kind: ProfileBundle
metadata:
creationTimestamp: "2022-10-19T12:06:30Z"
finalizers:
- profilebundle.finalizers.compliance.openshift.io
generation: 1
name: rhcos4
namespace: openshift-compliance
resourceVersion: "46741"
uid: 22350850-af4a-4f5c-9a42-5e7b68b82d7d
spec:
contentFile: ssg-rhcos4-ds.xml
contentImage: registry.redhat.io/compliance/openshift-compliance-content-rhel8@sha256:900e... 1
status:
conditions:
- lastTransitionTime: "2022-10-19T12:07:51Z"
message: Profile bundle successfully parsed
reason: Valid
status: "True"
type: Ready
dataStreamStatus: VALID
- 1
- 安全性容器镜像。
每个 ProfileBundle
都由一个部署来支持。当 Compliance Operator 检测到容器镜像摘要已更改时,会更新部署来反映内容的变化并再次解析内容。使用摘要而不是标签可确保您使用稳定且可预测的配置集集合。
5.5.3.3. 其他资源
- Compliance Operator 在受限网络环境中被支持。如需更多信息,请参阅在受限网络中使用 Operator Lifecycle Manager。
5.5.4. 卸载 Compliance Operator
您可以使用 OpenShift Container Platform Web 控制台或 CLI 从集群中删除 OpenShift Compliance Operator。
5.5.4.1. 使用 Web 控制台从 OpenShift Container Platform 卸载 OpenShift Compliance Operator
要删除 Compliance Operator,您必须首先删除命名空间中的对象。删除对象后,您可以通过删除 openshift-compliance 项目来删除 Operator 及其命名空间。
先决条件
-
使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 - 必须安装 OpenShift Compliance Operator。
流程
使用 OpenShift Container Platform Web 控制台删除 Compliance Operator:
进入 Operators
Installed Operators Compliance Operator 页面。 - 点 All instances。
- 在 All namespaces 中,点 Options 菜单 删除所有 ScanSettingBinding、ComplainceSuite、ComplianceScan 和 ProfileBundle 对象。
-
切换到 Administration
Operators Installed Operators 页面。 - 点 Compliance Operator 条目 中的 Options 菜单并选择 Uninstall Operator。
-
切换到 Home
Projects 页面。 - 搜索 'compliance'。
点 openshift-compliance 项目 旁边的 Options 菜单,然后选择 Delete Project。
-
通过在对话框中输入
openshift-compliance
并点 Delete 来确认删除。
-
通过在对话框中输入
5.5.4.2. 使用 CLI 从 OpenShift Container Platform 卸载 OpenShift Compliance Operator
要删除 Compliance Operator,您必须首先删除命名空间中的对象。删除对象后,您可以通过删除 openshift-compliance 项目来删除 Operator 及其命名空间。
先决条件
-
使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 - 必须安装 OpenShift Compliance Operator。
流程
删除命名空间中的所有对象。
删除
ScanSettingBinding
对象:$ oc delete ssb --all -n openshift-compliance
删除
ScanSetting
对象:$ oc delete ss --all -n openshift-compliance
删除
ComplianceSuite
对象:$ oc delete suite --all -n openshift-compliance
删除
ComplianceScan
对象:$ oc delete scan --all -n openshift-compliance
删除
ProfileBundle
对象:$ oc delete profilebundle.compliance --all -n openshift-compliance
删除 Subscription 对象:
$ oc delete sub --all -n openshift-compliance
删除 CSV 对象:
$ oc delete csv --all -n openshift-compliance
删除项目:
$ oc delete project openshift-compliance
输出示例
project.project.openshift.io "openshift-compliance" deleted
验证
确认已删除命名空间:
$ oc get project/openshift-compliance
输出示例
Error from server (NotFound): namespaces "openshift-compliance" not found