×

您可以使用 roxctl CLI 升级 RHACS 云服务中的受保护集群。

仅当您使用 roxctl CLI 安装受保护集群时,才需要手动升级受保护集群。

升级 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

手动升级所有安全集群

为确保最佳功能,请为您的安全集群使用与 RHACS 云服务运行相同的 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 镜像,请改用以下命令

    $ 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”。

手动升级期间迁移 SCC

通过使用 roxctl CLI 在手动升级期间迁移安全上下文约束 (SCC),您可以将 Red Hat Advanced Cluster Security for Kubernetes (RHACS) 服务无缝迁移到使用 Red Hat OpenShift SCC,从而确保 Central 和所有安全集群的兼容性和最佳安全配置。

步骤
  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. 添加所需的 roles 和 role bindings 以使用 Red Hat OpenShift SCC 代替 RHACS 自定义 SCC。

  3. 要添加所需的 roles 和 role bindings 以对所有安全集群使用 Red Hat OpenShift SCC,请完成以下步骤

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

      YAML 文件示例
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role  (1)
      metadata:
        annotations:
           email: support@stackrox.com
           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: support@stackrox.com
           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 role 资源的名称。
      3 创建 role 的命名空间。
      4 描述 role 资源授予的权限。
      5 Kubernetes 资源的类型,在此示例中为 RoleBinding
      6 role binding 资源的名称。
      7 指定在同一命名空间中绑定的 role。
      8 指定绑定到 role 的主体。
    2. 通过运行以下命令创建 upgrade-scs.yaml 文件中指定的 role 和 role binding 资源

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

      必须在每个安全集群上运行此命令才能创建 upgrade-scs.yaml 文件中指定的 role 和 role bindings。

  4. 删除特定于 RHACS 的 SCC

    1. 要删除特定于所有安全集群的 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

    准入控制器

    stackrox-admission-control

    restricted-v2

    Collector

    stackrox-collector

    privileged

    Sensor

    stackrox-sensor

    restricted-v2

编辑 Sensor 部署的 GOMEMLIMIT 环境变量

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

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

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

  3. 保存文件。

编辑 Collector 部署的 GOMEMLIMIT 环境变量

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

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

    $ 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 Scanner 启用 RHCOS 节点扫描

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

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

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

      $ 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 指标的 compliance 容器,请运行以下命令

      $ 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. 通过执行以下步骤更新 Collector DaemonSet (DS)

    1. 通过运行以下命令向 Collector 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"}]}]}}}}'