5.4. Compliance Operator 管理

5.4.1. 安装 Compliance Operator

在使用 Compliance Operator 之前,您必须保证在集群中部署它。

重要

Compliance Operator 可能会报告有关受管平台(如 OpenShift Dedicated、Red Hat OpenShift Service on AWS)和 Microsoft Azure Red Hat OpenShift 的不正确的结果。如需更多信息,请参阅红帽知识库解决方案 #6983418

5.4.1.1. 通过 Web 控制台安装 Compliance Operator

先决条件

  • 您必须具有 admin 权限。

流程

  1. 在 OpenShift Container Platform Web 控制台中导航至 OperatorsOperatorHub
  2. 搜索 Compliance Operator,然后点 Install
  3. 保留 安装模式命名空间 的默认选择,以确保将 Operator 安装到 openshift-compliance 命名空间中。
  4. Install

验证

确认安装成功:

  1. 导航到 OperatorsInstalled Operators 页面。
  2. 检查 Compliance Operator 是否已安装在 openshift-compliance 命名空间中,其状态为 Succeeded

如果 Operator 没有成功安装:

  1. 导航到 OperatorsInstalled Operators 页面,并检查 Status 列中是否有任何错误或故障。
  2. 导航到 WorkloadsPods 页面,检查 openshift-compliance 项目中报告问题的 pod 的日志。
重要

如果 restricted 安全性上下文约束(SCC)已被修改为包含 system:authenticated 组或添加了 requiredDropCapabilities,则 Compliance Operator 可能会因为权限问题而无法正常工作。

您可以为 Compliance Operator scanner Pod 服务帐户创建自定义 SCC。如需更多信息,请参阅为 Compliance Operator 创建自定义 SCC

5.4.1.2. 使用 CLI 安装 Compliance Operator

先决条件

  • 您必须具有 admin 权限。

流程

  1. 定义一个 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
  2. 创建 Namespace 对象:

    $ oc create -f namespace-object.yaml
  3. 定义一个 OperatorGroup 对象:

    operator-group-object.yaml示例

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: compliance-operator
      namespace: openshift-compliance
    spec:
      targetNamespaces:
      - openshift-compliance

  4. 创建 OperatorGroup 对象:

    $ oc create -f operator-group-object.yaml
  5. 定义一个 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

  6. 创建 Subscription 对象:

    $ oc create -f subscription-object.yaml
注意

如果要设置全局调度程序功能并启用 defaultNodeSelector,您必须手动创建命名空间并更新 openshift-compliance 命名空间的注解,或安装 Compliance Operator 的命名空间,使用 openshift.io/node-selector: ""。这会删除默认节点选择器并防止部署失败。

验证

  1. 通过检查 CSV 文件来验证安装是否成功:

    $ oc get csv -n openshift-compliance
  2. 验证 Compliance Operator 是否正在运行:

    $ oc get deploy -n openshift-compliance
重要

如果 restricted 安全性上下文约束(SCC)已被修改为包含 system:authenticated 组或添加了 requiredDropCapabilities,则 Compliance Operator 可能会因为权限问题而无法正常工作。

您可以为 Compliance Operator scanner Pod 服务帐户创建自定义 SCC。如需更多信息,请参阅为 Compliance Operator 创建自定义 SCC

5.4.1.3. 在托管 control plane 上安装 Compliance Operator

通过创建一个 Subscription 文件,可以使用 OperatorHub 在托管 control plane 中安装 Compliance Operator。

重要

托管的 control plane 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

先决条件

  • 您必须具有 admin 权限。

流程

  1. 定义类似如下的 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
  2. 运行以下命令来创建 Namespace 对象:

    $ oc create -f namespace-object.yaml
  3. 定义一个 OperatorGroup 对象:

    operator-group-object.yaml示例

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: compliance-operator
      namespace: openshift-compliance
    spec:
      targetNamespaces:
      - openshift-compliance

  4. 运行以下命令来创建 OperatorGroup 对象:

    $ oc create -f operator-group-object.yaml
  5. 定义一个 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"

  6. 运行以下命令来创建 Subscription 对象:

    $ oc create -f subscription-object.yaml

验证

  1. 运行以下命令,检查 CSV 文件来验证安装是否成功:

    $ oc get csv -n openshift-compliance
  2. 运行以下命令验证 Compliance Operator 是否正在运行:

    $ oc get deploy -n openshift-compliance

5.4.1.4. 其他资源

5.4.2. 更新 Compliance Operator

作为集群管理员,您可以在 OpenShift Container Platform 集群上更新 Compliance Operator。

重要

在将 OpenShift Container Platform 集群更新至版本 4.14 或更高版本前,建议将 Compliance Operator 更新至 1.3.1 或更高版本。

5.4.2.1. 准备 Operator 更新

已安装的 Operator 的订阅指定一个更新频道,用于跟踪和接收 Operator 的更新。您可以更改更新频道,以开始跟踪并从更新频道接收更新。

订阅中更新频道的名称可能会因 Operator 而异,但应遵守给定 Operator 中的常规约定。例如,频道名称可能会遵循 Operator 提供的应用程序的次发行版本更新流(1.21.3)或发行的频率(stablefast)。

注意

您不能将已安装的 Operator 更改为比当前频道旧的频道。

红帽客户门户网站 Labs 包括以下应用程序,可帮助管理员准备更新其 Operator:

您可以使用应用程序搜索基于 Operator Lifecycle Manager 的 Operator,并在不同版本的 OpenShift Container Platform 中验证每个更新频道的可用 Operator 版本。不包含基于 Cluster Version Operator 的 Operator。

5.4.2.2. 更改 Operator 的更新频道

您可以使用 OpenShift Container Platform Web 控制台更改 Operator 的更新频道。

提示

如果订阅中的批准策略被设置为 Automatic,则更新过程会在所选频道中提供新的 Operator 版本时立即启动。如果批准策略设为 Manual,则必须手动批准待处理的更新。

先决条件

  • 之前使用 Operator Lifecycle Manager(OLM)安装的 Operator。

流程

  1. 在 web 控制台的 Administrator 视角中,导航到 Operators → Installed Operators
  2. 点击您要更改更新频道的 Operator 名称。
  3. Subscription 标签页。
  4. Update channel 下的更新频道名称。
  5. 点要更改的更新频道,然后点 Save
  6. 对于带有 自动批准策略 的订阅,更新会自动开始。返回到 Operators → Installed Operators 页面,以监控更新的进度。完成后,状态会变为 SucceededUp to date

    对于采用手动批准策略的订阅,您可以从 Subscription 选项卡中手动批准更新。

5.4.2.3. 手动批准待处理的 Operator 更新

如果已安装的 Operator 的订阅被设置为 Manual,则当其当前更新频道中发布新更新时,在开始安装前必须手动批准更新。

先决条件

  • 之前使用 Operator Lifecycle Manager(OLM)安装的 Operator。

流程

  1. 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,进入 Operators → Installed Operators
  2. 处于待定更新的 Operator 会显示 Upgrade available 状态。点您要更新的 Operator 的名称。
  3. Subscription 标签页。任何需要批准的更新都会在 Upgrade status 旁边显示。例如:它可能会显示 1 requires approval
  4. 1 requires approval,然后点 Preview Install Plan
  5. 检查列出可用于更新的资源。在满意后,点 Approve
  6. 返回到 Operators → Installed Operators 页面,以监控更新的进度。完成后,状态会变为 SucceededUp to date

5.4.3. 管理 Compliance Operator

本节介绍安全性内容的生命周期,包括如何使用合规性内容的更新版本以及如何创建自定义 ProfileBundle 对象。

5.4.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
1
包含合规性内容的文件位置。
2
内容镜像位置。
重要

用于内容镜像的基础镜像必须包含 coreutils

5.4.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.4.3.3. 其他资源

5.4.4. 卸载 Compliance Operator

您可以使用 OpenShift Container Platform Web 控制台或 CLI 从集群中删除 OpenShift Compliance Operator。

5.4.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:

  1. 进入 OperatorsInstalled OperatorsCompliance Operator 页面。

    1. All instances
    2. All namespaces 中,点 Options 菜单 kebab 删除所有 ScanSettingBinding、ComplainceSuite、ComplianceScan 和 ProfileBundle 对象。
  2. 切换到 AdministrationOperatorsInstalled Operators 页面。
  3. Compliance Operator 条目 kebab 中的 Options 菜单并选择 Uninstall Operator
  4. 切换到 HomeProjects 页面。
  5. 搜索 'compliance'。
  6. openshift-compliance 项目 kebab 旁边的 Options 菜单,然后选择 Delete Project

    1. 通过在对话框中输入 openshift-compliance 并点 Delete 来确认删除。

5.4.4.2. 使用 CLI 从 OpenShift Container Platform 卸载 OpenShift Compliance Operator

要删除 Compliance Operator,您必须首先删除命名空间中的对象。删除对象后,您可以通过删除 openshift-compliance 项目来删除 Operator 及其命名空间。

先决条件

  • 使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群。
  • 必须安装 OpenShift Compliance Operator。

流程

  1. 删除命名空间中的所有对象。

    1. 删除 ScanSettingBinding 对象:

      $ oc delete ssb --all -n openshift-compliance
    2. 删除 ScanSetting 对象:

      $ oc delete ss --all -n openshift-compliance
    3. 删除 ComplianceSuite 对象:

      $ oc delete suite --all -n openshift-compliance
    4. 删除 ComplianceScan 对象:

      $ oc delete scan --all -n openshift-compliance
    5. 删除 ProfileBundle 对象:

      $ oc delete profilebundle.compliance --all -n openshift-compliance
  2. 删除 Subscription 对象:

    $ oc delete sub --all -n openshift-compliance
  3. 删除 CSV 对象:

    $ oc delete csv --all -n openshift-compliance
  4. 删除项目:

    $ oc delete project openshift-compliance

    输出示例

    project.project.openshift.io "openshift-compliance" deleted

验证

  1. 确认已删除命名空间:

    $ oc get project/openshift-compliance

    输出示例

    Error from server (NotFound): namespaces "openshift-compliance" not found