×

您可以从受支持的旧版本升级到最新版本的 Red Hat Advanced Cluster Security for Kubernetes (RHACS)。

  • 仅当您使用 `roxctl` CLI 安装 RHACS 时,才需要执行手动升级过程。

  • 每个版本升级都有手动步骤,例如从 3.74 版本升级到 4.0 版本,以及从 4.0 版本升级到 4.1 版本。因此,Red Hat 建议先从 3.74 升级到 4.0,然后从 4.0 升级到 4.1,再从 4.1 升级到 4.2,直到安装选定的版本。为了获得完整的功能,Red Hat 建议升级到最新版本。

要将 RHACS 升级到最新版本,请执行以下步骤

备份中央数据库

您可以备份中央数据库,并使用该备份从失败的升级中回滚或在基础设施灾难的情况下进行数据恢复。

先决条件
  • 您必须拥有一个具有针对 Red Hat Advanced Cluster Security for Kubernetes 所有资源的read权限的 API 令牌。**分析师**系统角色对所有资源都具有read权限。

  • 您已安装roxctl CLI。

  • 您已配置ROX_API_TOKENROX_CENTRAL_ADDRESS环境变量。

步骤
  • 运行备份命令

    $ roxctl -e "$ROX_CENTRAL_ADDRESS" central backup

升级roxctl CLI

要将roxctl CLI 升级到最新版本,您必须卸载现有版本的roxctl CLI,然后安装最新版本的roxctl CLI。

卸载 roxctl CLI

您可以使用以下步骤卸载 Linux 上的roxctl CLI 二进制文件。

步骤
  • 查找并删除roxctl二进制文件

    $ ROXPATH=$(which roxctl) && rm -f $ROXPATH (1)
    1 根据您的环境,您可能需要管理员权限才能删除roxctl二进制文件。

在 Linux 上安装 roxctl CLI

您可以使用以下步骤在 Linux 上安装roxctl CLI 二进制文件。

Linux 版roxctl CLI 可用于amd64arm64ppc64les390x架构。

步骤
  1. 确定目标操作系统的roxctl架构

    $ arch="$(uname -m | sed "s/x86_64//")"; arch="${arch:+-$arch}"
  2. 下载roxctl CLI

    $ curl -L -f -o roxctl "https://mirror.openshift.com/pub/rhacs/assets/4.6.1/bin/Linux/roxctl${arch}"
  3. 使roxctl二进制文件可执行

    $ chmod +x roxctl
  4. roxctl二进制文件放置在PATH中的目录中

    要检查您的PATH,请执行以下命令

    $ echo $PATH
验证
  • 验证您已安装的roxctl版本

    $ roxctl version

在 macOS 上安装 roxctl CLI

您可以使用以下步骤在 macOS 上安装roxctl CLI 二进制文件。

macOS 版roxctl CLI 可用于amd64arm64架构。

步骤
  1. 确定目标操作系统的roxctl架构

    $ arch="$(uname -m | sed "s/x86_64//")"; arch="${arch:+-$arch}"
  2. 下载roxctl CLI

    $ curl -L -f -o roxctl "https://mirror.openshift.com/pub/rhacs/assets/4.6.1/bin/Darwin/roxctl${arch}"
  3. 删除二进制文件的所有扩展属性

    $ xattr -c roxctl
  4. 使roxctl二进制文件可执行

    $ chmod +x roxctl
  5. roxctl二进制文件放置在PATH中的目录中

    要检查您的PATH,请执行以下命令

    $ echo $PATH
验证
  • 验证您已安装的roxctl版本

    $ roxctl version

在 Windows 上安装 roxctl CLI

您可以使用以下步骤在 Windows 上安装roxctl CLI 二进制文件。

Windows 版roxctl CLI 可用于amd64架构。

步骤
  • 下载roxctl CLI

    $ curl -f -O https://mirror.openshift.com/pub/rhacs/assets/4.6.1/bin/Windows/roxctl.exe
验证
  • 验证您已安装的roxctl版本

    $ roxctl version

升级中央集群

创建中央数据库的备份并使用预配包生成必要的资源后,下一步是升级中央集群。此过程涉及升级中央和扫描器。

升级中央

您可以通过下载和部署更新的镜像来将 Central 更新到最新版本。

步骤
  • 运行以下命令以更新 Central 镜像

    $ oc -n stackrox set image deploy/central central=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:4.6.1 (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
验证
  • 验证新 Pod 是否已部署

    $ oc get deploy -n stackrox -o wide
    $ oc get pod -n stackrox --watch

编辑 Central 部署的 GOMEMLIMIT 环境变量

升级到 4.4 版本需要您手动将GOMEMLIMIT环境变量替换为ROX_MEMLIMIT环境变量。您必须为每个部署编辑此变量。

步骤
  1. 运行以下命令以编辑 Central 部署的变量

    $ oc -n stackrox edit deploy/central (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
  2. GOMEMLIMIT变量替换为ROX_MEMLIMIT

  3. 保存文件。

升级扫描器

您可以通过下载和部署更新的镜像来将 Scanner 更新到最新版本。

步骤
  • 运行以下命令以更新 Scanner 镜像

    $ oc -n stackrox set image deploy/scanner scanner=registry.redhat.io/advanced-cluster-security/rhacs-scanner-rhel8:4.6.1 (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
验证
  • 验证新 Pod 是否已部署

    $ oc get deploy -n stackrox -o wide
    $ oc get pod -n stackrox --watch

编辑 Scanner 部署的 GOMEMLIMIT 环境变量

升级到 4.4 版本需要您手动将GOMEMLIMIT环境变量替换为ROX_MEMLIMIT环境变量。您必须为每个部署编辑此变量。

步骤
  1. 运行以下命令以编辑 Scanner 部署的变量

    $ oc -n stackrox edit deploy/scanner (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
  2. GOMEMLIMIT变量替换为ROX_MEMLIMIT

  3. 保存文件。

验证中央集群升级

升级中央和扫描器后,请验证中央集群升级是否完成。

步骤
  • 通过运行以下命令检查中央日志

    $ oc logs -n stackrox deploy/central -c central (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
成功升级的示例输出
No database restore directory found (this is not an error).
Migrator: 2023/04/19 17:58:54: starting DB compaction
Migrator: 2023/04/19 17:58:54: Free fraction of 0.0391 (40960/1048576) is < 0.7500. Will not compact
badger 2023/04/19 17:58:54 INFO: All 1 tables opened in 2ms
badger 2023/04/19 17:58:55 INFO: Replaying file id: 0 at offset: 846357
badger 2023/04/19 17:58:55 INFO: Replay took: 50.324µs
badger 2023/04/19 17:58:55 DEBUG: Value log discard stats empty
Migrator: 2023/04/19 17:58:55: DB is up to date. Nothing to do here.
badger 2023/04/19 17:58:55 INFO: Got compaction priority: {level:0 score:1.73 dropPrefix:[]}
version: 2023/04/19 17:58:55.189866 ensure.go:49: Info: Version found in the DB was current. We’re good to go!

升级所有受保护的集群

升级中央服务后,您必须升级所有受保护的集群。

  • 如果您使用自动升级

  • 如果您不使用自动升级,则必须在所有受保护的集群(包括中央集群)上运行本节中的说明。

    • 为确保最佳功能,请对受保护的集群和安装中央的集群使用相同的 RHACS 版本。

要完成运行 Sensor、Collector 和 Admission controller 的每个受保护集群的手动升级,请按照本节中的说明进行操作。

更新其他镜像

如果不使用自动升级,则必须更新每个受保护集群上的 sensor、collector 和 compliance 镜像。

如果您使用 Kubernetes,请对本步骤中列出的命令使用kubectl代替oc

步骤
  1. 更新 Sensor 镜像

    $ oc -n stackrox set image deploy/sensor sensor=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:4.6.1 (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
  2. 更新 Compliance 镜像

    $ oc -n stackrox set image ds/collector compliance=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:4.6.1 (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
  3. 更新 Collector 镜像

    $ oc -n stackrox set image ds/collector collector=registry.redhat.io/advanced-cluster-security/rhacs-collector-rhel8:4.6.1 (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc

    如果您使用的是 collector slim 镜像,请改用以下命令

    $ oc -n stackrox set image ds/collector collector=registry.redhat.io/advanced-cluster-security/rhacs-collector-slim-rhel8:{rhacs-version}
  4. 更新准入控制镜像

    $ oc -n stackrox set image deploy/admission-control admission-control=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:4.6.1

如果您使用roxctl CLI 在 Red Hat OpenShift 上安装了 RHACS,则需要迁移安全上下文约束 (SCC)。

有关更多信息,请参阅“其他资源”部分中的“手动升级期间迁移 SCC”。

将 POD_NAMESPACE 添加到 sensor 和 admission-control 部署

从低于 4.6 的版本升级到 4.6 或更高版本时,必须修补 sensor 和 admission-control 部署以设置POD_NAMESPACE环境变量。

如果您使用 Kubernetes,请对本步骤中列出的命令使用kubectl代替oc

步骤
  1. 通过运行以下命令修补 sensor 以确保设置POD_NAMESPACE

    $ [[ -z "$(oc -n stackrox get deployment sensor -o yaml | grep POD_NAMESPACE)" ]] && oc -n stackrox patch deployment sensor --type=json -p '[{"op":"add","path":"/spec/template/spec/containers/0/env/-","value":{"name":"POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}}}]'
  2. 通过运行以下命令修补 admission-control 以确保设置POD_NAMESPACE

    $ [[ -z "$(oc -n stackrox get deployment admission-control -o yaml | grep POD_NAMESPACE)" ]] && oc -n stackrox patch deployment admission-control --type=json -p '[{"op":"add","path":"/spec/template/spec/containers/0/env/-","value":{"name":"POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}}}]'

手动升级期间迁移 SCC

通过使用roxctl CLI 在手动升级过程中迁移安全上下文约束 (SCC),您可以无缝地转换 Red Hat Advanced Cluster Security for Kubernetes (RHACS) 服务以使用 Red Hat OpenShift SCC,确保中央集群和所有受保护集群的兼容性和最佳安全配置。

步骤
  1. 列出部署在中央集群和所有受保护集群上的所有 RHACS 服务

    $ oc -n stackrox describe pods | grep 'openshift.io/scc\|^Name:'
    示例输出
    Name:      admission-control-6f4dcc6b4c-2phwd
               openshift.io/scc: stackrox-admission-control
    #...
    Name:      central-575487bfcb-sjdx8
               openshift.io/scc: stackrox-central
    Name:      central-db-7c7885bb-6bgbd
               openshift.io/scc: stackrox-central-db
    Name:      collector-56nkr
               openshift.io/scc: stackrox-collector
    #...
    Name:      scanner-68fc55b599-f2wm6
               openshift.io/scc: stackrox-scanner
    Name:      scanner-68fc55b599-fztlh
    #...
    Name:      sensor-84545f86b7-xgdwf
               openshift.io/scc: stackrox-sensor
    #...

    在这个例子中,您可以看到每个 Pod 都有其自己的自定义 SCC,这是通过openshift.io/scc字段指定的。

  2. 添加所需的权限和角色绑定以使用 Red Hat OpenShift SCC 代替 RHACS 自定义 SCC。

    要添加所需的权限和角色绑定以对中央集群使用 Red Hat OpenShift SCC,请完成以下步骤

    1. 创建一个名为update-central.yaml的文件,使用以下内容定义角色和角色绑定资源

      示例 YAML 文件
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role (1)
      metadata:
        annotations:
           email: [email protected]
           owner: stackrox
        labels:
           app.kubernetes.io/component: central
           app.kubernetes.io/instance: stackrox-central-services
           app.kubernetes.io/name: stackrox
           app.kubernetes.io/part-of: stackrox-central-services
           app.kubernetes.io/version: 4.4.0
        name: use-central-db-scc (2)
        namespace: stackrox (3)
      Rules: (4)
      - apiGroups:
        - security.openshift.io
        resourceNames:
        - nonroot-v2
        resources:
        - securitycontextconstraints
        verbs:
        - use
      - - -
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        annotations:
           email: [email protected]
           owner: stackrox
        labels:
           app.kubernetes.io/component: central
           app.kubernetes.io/instance: stackrox-central-services
           app.kubernetes.io/managed-by: Helm
           app.kubernetes.io/name: stackrox
           app.kubernetes.io/part-of: stackrox-central-services
           app.kubernetes.io/version: 4.4.0
        name: use-central-scc
        namespace: stackrox
      rules:
      - apiGroups:
        - security.openshift.io
        resourceNames:
        - nonroot-v2
        resources:
        - securitycontextconstraints
        verbs:
        - use
      - - -
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        annotations:
           email: [email protected]
           owner: stackrox
        labels:
           app.kubernetes.io/component: scanner
           app.kubernetes.io/instance: stackrox-central-services
           app.kubernetes.io/name: stackrox
           app.kubernetes.io/part-of: stackrox-central-services
           app.kubernetes.io/version: 4.4.0
        name: use-scanner-scc
        namespace: stackrox
      rules:
      - apiGroups:
        - security.openshift.io
        resourceNames:
        - nonroot-v2
        resources:
        - securitycontextconstraints
        verbs:
        - use
      - - -
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding (5)
      metadata:
        annotations:
           email: [email protected]
           owner: stackrox
        labels:
           app.kubernetes.io/component: central
           app.kubernetes.io/instance: stackrox-central-services
           app.kubernetes.io/name: stackrox
           app.k ubernetes.io/part-of: stackrox-central-services
           app.kubernetes.io/version: 4.4.0
        name: central-db-use-scc (6)
        namespace: stackrox
      roleRef: (7)
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: use-central-db-scc
      subjects: (8)
      - kind: ServiceAccount
        name: central-db
        namespace: stackrox
      - - -
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        annotations:
           email: [email protected]
           owner: stackrox
        labels:
           app.kubernetes.io/component: central
           app.kubernetes.io/instance: stackrox-central-services
           app.kubernetes.io/name: stackrox
           app.kubernetes.io/part-of: stackrox-central-services
           app.kubernetes.io/version: 4.4.0
        name: central-use-scc
        namespace: stackrox
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: use-central-scc
      subjects:
      - kind: ServiceAccount
        name: central
        namespace: stackrox
      - - -
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        annotations:
           email: [email protected]
           owner: stackrox
        labels:
           app.kubernetes.io/component: scanner
           app.kubernetes.io/instance: stackrox-central-services
           app.kubernetes.io/name: stackrox
           app.kubernetes.io/part-of: stackrox-central-services
           app.kubernetes.io/version: 4.4.0
        name: scanner-use-scc
        namespace: stackrox
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: use-scanner-scc
      subjects:
      - kind: ServiceAccount
        name: scanner
        namespace: stackrox
      - - -
      1 Kubernetes 资源的类型,在此示例中为Role
      2 角色资源的名称。
      3 创建角色的命名空间。
      4 描述角色资源授予的权限。
      5 Kubernetes 资源的类型,在此示例中为RoleBinding
      6 角色绑定资源的名称。
      7 指定在同一命名空间中绑定的角色。
      8 指定绑定到角色的主题。
    2. 通过运行以下命令创建update-central.yaml文件中指定的权限和角色绑定资源

      $ oc -n stackrox create -f ./update-central.yaml
  3. 要添加所需的权限和角色绑定以对所有受保护集群使用 Red Hat OpenShift SCC,请完成以下步骤

    1. 创建一个名为upgrade-scs.yaml的文件,使用以下内容定义角色和角色绑定资源

      示例 YAML 文件
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role  (1)
      metadata:
        annotations:
           email: [email protected]
           owner: stackrox
        labels:
           app.kubernetes.io/component: collector
           app.kubernetes.io/instance: stackrox-secured-cluster-services
           app.kubernetes.io/name: stackrox
           app.kubernetes.io/part-of: stackrox-secured-cluster-services
           app.kubernetes.io/version: 4.4.0
           auto-upgrade.stackrox.io/component: sensor
        name: use-privileged-scc  (2)
        namespace: stackrox (3)
      rules:  (4)
      - apiGroups:
        - security.openshift.io
        resourceNames:
        - privileged
        resources:
        - securitycontextconstraints
        verbs:
        - use
      - - -
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding (5)
      metadata:
        annotations:
           email: [email protected]
           owner: stackrox
        labels:
           app.kubernetes.io/component: collector
           app.kubernetes.io/instance: stackrox-secured-cluster-services
           app.kubernetes.io/name: stackrox
           app.kubernetes.io/part-of: stackrox-secured-cluster-services
           app.kubernetes.io/version: 4.4.0
           auto-upgrade.stackrox.io/component: sensor
        name: collector-use-scc (6)
        namespace: stackrox
      roleRef: (7)
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: use-privileged-scc
      subjects: (8)
      - kind: ServiceAccount
        name: collector
        namespace: stackrox
      - - -
      1 Kubernetes 资源的类型,在此示例中为Role
      2 角色资源的名称。
      3 创建角色的命名空间。
      4 描述角色资源授予的权限。
      5 Kubernetes 资源的类型,在此示例中为RoleBinding
      6 角色绑定资源的名称。
      7 指定在同一命名空间中绑定的角色。
      8 指定绑定到角色的主题。
    2. 通过运行以下命令创建upgrade-scs.yaml文件中指定的权限和角色绑定资源

      $ oc -n stackrox create -f ./update-scs.yaml

      您必须在每个受保护集群上运行此命令才能创建upgrade-scs.yaml文件中指定的权限和角色绑定。

  4. 删除特定于 RHACS 的 SCC

    1. 要删除特定于中央集群的 SCC,请运行以下命令

      $ oc delete scc/stackrox-central scc/stackrox-central-db scc/stackrox-scanner
    2. 要删除特定于所有受保护集群的 SCC,请运行以下命令

      $ oc delete scc/stackrox-admission-control scc/stackrox-collector scc/stackrox-sensor

      您必须在每个受保护集群上运行此命令才能删除特定于每个受保护集群的 SCC。

验证
  • 通过运行以下命令确保所有 Pod 都使用了正确的 SCC

    $ oc -n stackrox describe pods | grep 'openshift.io/scc\|^Name:'

    将输出与下表进行比较

    组件 之前的自定义 SCC 新的 Red Hat OpenShift 4 SCC

    中央集群 (Central)

    stackrox-central

    nonroot-v2

    中央数据库 (Central-db)

    stackrox-central-db

    nonroot-v2

    扫描器 (Scanner)

    stackrox-scanner

    nonroot-v2

    扫描器数据库 (Scanner-db)

    stackrox-scanner

    nonroot-v2

    准入控制器 (Admission Controller)

    stackrox-admission-control

    restricted-v2

    收集器 (Collector)

    stackrox-collector

    privileged

    传感器 (Sensor)

    stackrox-sensor

    restricted-v2

编辑传感器的 GOMEMLIMIT 环境变量

升级到 4.4 版本需要您手动将GOMEMLIMIT环境变量替换为ROX_MEMLIMIT环境变量。您必须为每个部署编辑此变量。

步骤
  1. 运行以下命令来编辑传感器部署的变量

    $ oc -n stackrox edit deploy/sensor (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
  2. GOMEMLIMIT变量替换为ROX_MEMLIMIT

  3. 保存文件。

编辑收集器的 GOMEMLIMIT 环境变量

升级到 4.4 版本需要您手动将GOMEMLIMIT环境变量替换为ROX_MEMLIMIT环境变量。您必须为每个部署编辑此变量。

步骤
  1. 运行以下命令来编辑收集器部署的变量

    $ oc -n stackrox edit deploy/collector (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
  2. GOMEMLIMIT变量替换为ROX_MEMLIMIT

  3. 保存文件。

编辑准入控制器的 GOMEMLIMIT 环境变量

升级到 4.4 版本需要您手动将GOMEMLIMIT环境变量替换为ROX_MEMLIMIT环境变量。您必须为每个部署编辑此变量。

步骤
  1. 运行以下命令来编辑准入控制器部署的变量

    $ oc -n stackrox edit deploy/admission-control (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
  2. GOMEMLIMIT变量替换为ROX_MEMLIMIT

  3. 保存文件。

验证受保护集群升级

升级受保护集群后,验证更新后的 Pod 是否正常工作。

步骤
  • 检查新的 Pod 是否已部署

    $ oc get deploy,ds -n stackrox -o wide (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc
    $ oc get pod -n stackrox --watch (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc

启用使用 StackRox 扫描器扫描 RHCOS 节点

如果您使用 OpenShift Container Platform,则可以使用 Red Hat Advanced Cluster Security for Kubernetes (RHACS) 启用对 Red Hat Enterprise Linux CoreOS (RHCOS) 节点的漏洞扫描。

先决条件
步骤
  1. 运行以下命令之一来更新合规性容器。

    • 对于禁用指标的默认合规性容器,请运行以下命令

      $ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"containers":[{"name":"compliance","env":[{"name":"ROX_METRICS_PORT","value":"disabled"},{"name":"ROX_NODE_SCANNING_ENDPOINT","value":"127.0.0.1:8444"},{"name":"ROX_NODE_SCANNING_INTERVAL","value":"4h"},{"name":"ROX_NODE_SCANNING_INTERVAL_DEVIATION","value":"24m"},{"name":"ROX_NODE_SCANNING_MAX_INITIAL_WAIT","value":"5m"},{"name":"ROX_RHCOS_NODE_SCANNING","value":"true"},{"name":"ROX_CALL_NODE_INVENTORY_ENABLED","value":"true"}]}]}}}}'
    • 对于启用了 Prometheus 指标的合规性容器,请运行以下命令

      $ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"containers":[{"name":"compliance","env":[{"name":"ROX_METRICS_PORT","value":":9091"},{"name":"ROX_NODE_SCANNING_ENDPOINT","value":"127.0.0.1:8444"},{"name":"ROX_NODE_SCANNING_INTERVAL","value":"4h"},{"name":"ROX_NODE_SCANNING_INTERVAL_DEVIATION","value":"24m"},{"name":"ROX_NODE_SCANNING_MAX_INITIAL_WAIT","value":"5m"},{"name":"ROX_RHCOS_NODE_SCANNING","value":"true"},{"name":"ROX_CALL_NODE_INVENTORY_ENABLED","value":"true"}]}]}}}}'
  2. 通过执行以下步骤更新收集器 DaemonSet (DS)

    1. 通过运行以下命令向收集器 DS 添加新的卷挂载

      $ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"volumes":[{"name":"tmp-volume","emptyDir":{}},{"name":"cache-volume","emptyDir":{"sizeLimit":"200Mi"}}]}}}}'
    2. 通过运行以下命令添加新的NodeScanner容器

      $ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"containers":[{"command":["/scanner","--nodeinventory","--config=",""],"env":[{"name":"ROX_NODE_NAME","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"spec.nodeName"}}},{"name":"ROX_CLAIR_V4_SCANNING","value":"true"},{"name":"ROX_COMPLIANCE_OPERATOR_INTEGRATION","value":"true"},{"name":"ROX_CSV_EXPORT","value":"false"},{"name":"ROX_DECLARATIVE_CONFIGURATION","value":"false"},{"name":"ROX_INTEGRATIONS_AS_CONFIG","value":"false"},{"name":"ROX_NETPOL_FIELDS","value":"true"},{"name":"ROX_NETWORK_DETECTION_BASELINE_SIMULATION","value":"true"},{"name":"ROX_NETWORK_GRAPH_PATTERNFLY","value":"true"},{"name":"ROX_NODE_SCANNING_CACHE_TIME","value":"3h36m"},{"name":"ROX_NODE_SCANNING_INITIAL_BACKOFF","value":"30s"},{"name":"ROX_NODE_SCANNING_MAX_BACKOFF","value":"5m"},{"name":"ROX_PROCESSES_LISTENING_ON_PORT","value":"false"},{"name":"ROX_QUAY_ROBOT_ACCOUNTS","value":"true"},{"name":"ROX_ROXCTL_NETPOL_GENERATE","value":"true"},{"name":"ROX_SOURCED_AUTOGENERATED_INTEGRATIONS","value":"false"},{"name":"ROX_SYSLOG_EXTRA_FIELDS","value":"true"},{"name":"ROX_SYSTEM_HEALTH_PF","value":"false"},{"name":"ROX_VULN_MGMT_WORKLOAD_CVES","value":"false"}],"image":"registry.redhat.io/advanced-cluster-security/rhacs-scanner-slim-rhel8:4.6.1","imagePullPolicy":"IfNotPresent","name":"node-inventory","ports":[{"containerPort":8444,"name":"grpc","protocol":"TCP"}],"volumeMounts":[{"mountPath":"/host","name":"host-root-ro","readOnly":true},{"mountPath":"/tmp/","name":"tmp-volume"},{"mountPath":"/cache","name":"cache-volume"}]}]}}}}'

回滚中央集群 (Central)

如果新版本的升级不成功,您可以回滚到中央集群的先前版本。

正常回滚中央集群

如果 Red Hat Advanced Cluster Security for Kubernetes 升级失败,您可以回滚到中央集群的先前版本。

先决条件
  • 在执行回滚之前,您必须在持久性存储上拥有可用的空闲磁盘空间。Red Hat Advanced Cluster Security for Kubernetes 使用磁盘空间在升级期间保留数据库的副本。如果磁盘空间不足以存储副本并且升级失败,您可能无法回滚到早期版本。

步骤
  • 运行以下命令在升级失败时回滚到先前版本(在中央服务启动之前)

    $ oc -n stackrox rollout undo deploy/central (1)
    1 如果您使用 Kubernetes,请输入kubectl代替oc

强制回滚中央集群

您可以使用强制回滚来回滚到中央集群的早期版本(在中央服务启动之后)。

使用强制回滚切换回先前版本可能会导致数据和功能丢失。

先决条件
  • 在执行回滚之前,您必须在持久性存储上拥有可用的空闲磁盘空间。Red Hat Advanced Cluster Security for Kubernetes 使用磁盘空间在升级期间保留数据库的副本。如果磁盘空间不足以存储副本并且升级失败,您将无法回滚到早期版本。

步骤
  • 运行以下命令执行强制回滚

    • 强制回滚到先前安装的版本

      $ oc -n stackrox rollout undo deploy/central (1)
      1 如果您使用 Kubernetes,请输入kubectl代替oc
    • 强制回滚到特定版本

      1. 编辑中央集群的ConfigMap

        $ oc -n stackrox edit configmap/central-config (1)
        1 如果您使用 Kubernetes,请输入kubectl代替oc
      2. 更新maintenance.forceRollbackVersion键的值

        data:
          central-config.yaml: |
            maintenance:
              safeMode: false
              compaction:
                 enabled: true
                 bucketFillFraction: .5
                 freeFractionThreshold: 0.75
              forceRollbackVersion: <x.x.x.x> (1)
          ...
        1 指定要回滚到的版本。
      3. 更新中央集群的镜像版本

        $ oc -n stackrox \ (1)
          set image deploy/central central=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:<x.x.x.x> (2)
        
        1 如果您使用 Kubernetes,请输入kubectl代替oc
        2 指定要回滚到的版本。它必须与您在central-config配置映射中为maintenance.forceRollbackVersion键指定的版本相同。

验证升级

更新后的传感器和收集器继续报告来自每个受保护集群的最新数据。

传感器上次联系中央集群的时间在 RHACS 门户中可见。

步骤
  1. 在 RHACS 门户中,转到**平台配置** → **系统健康**。

  2. 检查以确保传感器升级显示集群已与中央集群同步。

撤销 API 令牌

出于安全原因,Red Hat 建议您撤销已用于完成中央集群数据库备份的 API 令牌。

先决条件
  • 升级后,您必须重新加载 RHACS 门户页面并重新接受证书才能继续使用 RHACS 门户。

步骤
  1. 在 RHACS 门户中,转到**平台配置** → **集成**。

  2. 向下滚动到**身份验证令牌**类别,然后单击**API 令牌**。

  3. 选择要撤销的令牌名称前面的复选框。

  4. 点击撤销

  5. 在确认对话框中,点击确认

集群升级程序故障排除

如果您在使用安全集群的旧版安装方法并启用自动更新时遇到问题,您可以尝试对问题进行故障排除。升级程序失败时,可以在集群视图中找到以下错误。

升级程序缺少权限

症状

集群页面中显示以下错误

Upgrader failed to execute PreflightStage of the roll-forward workflow: executing stage "Run preflight checks": preflight check "Kubernetes authorization" reported errors. This usually means that access is denied. Have you configured this Secured Cluster for automatically receiving upgrades?"
步骤
  1. 在点击下载 YAML 文件和密钥之前,请确保为安全集群生成的包启用了未来升级。

  2. 如果可能,请删除该安全集群并生成一个新的包,确保启用了未来升级。

  3. 如果您无法重新创建集群,您可以采取以下操作

    1. 确保服务帐户sensor-upgrader存在于与 Sensor 相同的命名空间中。

    2. 确保存在一个 ClusterRoleBinding(默认名称:<namespace>:upgrade-sensors),它将cluster-admin ClusterRole 授予sensor-upgrader服务帐户。

由于缺少镜像,升级程序无法启动

症状

集群页面中显示以下错误

"Upgrade initialization error: The upgrader pods have trouble pulling the new image: Error pulling image: (...) (<image_reference:tag>: not found)"
步骤
  1. 确保安全集群可以访问注册表并拉取镜像<image_reference:tag>

  2. 确保在安全集群中正确配置了镜像拉取密钥。

由于未知原因,升级程序无法启动

症状

集群页面中显示以下错误

"Upgrade initialization error: Pod terminated: (Error)"
步骤
  1. 确保升级程序具有访问集群对象的足够权限。更多信息,请参见“升级程序缺少权限”。

  2. 检查升级程序日志以获取更多信息。

获取升级程序日志

可以通过运行以下命令访问日志

$ kubectl -n <namespace> logs deploy/sensor-upgrader (1)
1 对于<namespace>,请指定 Sensor 运行所在的命名空间。

通常,升级程序部署仅在集群中运行很短时间以进行升级。之后它会被移除,因此使用编排器 CLI 访问其日志可能需要恰当的时机。