2.2. 升级中央集群

备份 Central 数据库后,下一步是升级中部集群。此步骤包括 upgrade Central、roxctl CLI 和 Scanner。

2.2.1. 升级 Central

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

先决条件

  • 如果从私有镜像 registry 部署镜像,请先将新镜像推送到私有 registry 中,然后替换本节中的命令中的镜像 registry。

流程

  • 运行以下命令来升级 Central:

    $ oc -n stackrox patch deploy/central -p '{"spec":{"template":{"spec":{"containers":[{"name":"central","env":[{"name":"ROX_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}}]}]}}}}' 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc
    $ oc -n stackrox patch deployment/scanner -p '{"spec":{"template":{"spec":{"containers":[{"name":"scanner","securityContext":{"runAsUser":65534}}]}}}}' 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc
    $ oc -n stackrox set image deploy/central central=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:3.71.3 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc
    重要
    • 如果您要从 Red Hat Advanced Cluster Security for Kubernetes 3.65.0 升级,必须运行以下命令来创建 stackrox-central-diagnostics 角色:

      $ oc -n stackrox patch role stackrox-central-diagnostics -p '{"rules":[{"apiGroups":["*"],"resources":["deployments","daemonsets","replicasets","configmaps","services"],"verbs":["get","list"]}]}' 1
      1
      如果使用 Kubernetes,请输入 kubectl 而不是 oc
    • 如果您还没有使用 Helm 或 Operator 安装 Red Hat Advanced Cluster Security for Kubernetes,并希望使用 OpenShift OAuth 服务器启用身份验证,您必须运行以下命令:

      $ oc -n stackrox set env deploy/central ROX_ENABLE_OPENSHIFT_AUTH=true
      $ oc -n stackrox patch serviceaccount/central -p '
      {
      "metadata": {
      "annotations": {
      "serviceaccounts.openshift.io/oauth-redirecturi.main": "sso/providers/openshift/callback",
      "serviceaccounts.openshift.io/oauth-redirectreference.main": "{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"central"}}"
      }
      }
      }'

验证

  • 检查新 pod 是否已部署:

    $ oc get deploy -n stackrox -o wide 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc
    $ oc get pod -n stackrox --watch 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc

2.2.2. 升级 roxctl CLI

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

2.2.2.1. 卸载 roxctl CLI

您可以按照以下流程卸载 Linux 上的 roxctl CLI 二进制文件。

流程

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

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

2.2.2.2. 在 Linux 中安装 roxctl CLI

您可以按照以下流程在 Linux 上安装 roxctl CLI 二进制文件。

流程

  1. 下载 roxctl CLI 的最新版本:

    $ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.71.3/bin/Linux/roxctl
  2. 使 roxctl 二进制文件可执行:

    $ chmod +x roxctl
  3. roxctl 二进制文件放到 PATH 中的目录中:

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

    $ echo $PATH

验证

  • 验证您已安装的 roxctl 版本:

    $ roxctl version

2.2.2.3. 在 macOS 上安装 roxctl CLI

您可以按照以下流程在 macOS 中安装 roxctl CLI 二进制文件。

流程

  1. 下载 roxctl CLI 的最新版本:

    $ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.71.3/bin/Darwin/roxctl
  2. 从二进制文件中删除所有扩展属性:

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

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

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

    $ echo $PATH

验证

  • 验证您已安装的 roxctl 版本:

    $ roxctl version

2.2.2.4. 在 Windows 上安装 roxctl CLI

您可以按照以下流程在 Windows 上安装 roxctl CLI 二进制文件。

流程

  • 下载 roxctl CLI 的最新版本:

    $ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.71.3/bin/Windows/roxctl.exe

验证

  • 验证您已安装的 roxctl 版本:

    $ roxctl version

升级 roxctl CLI 后,您可以升级 Scanner。

2.2.3. 升级扫描器

您可以使用 roxctl CLI 将 Scanner 更新至最新版本。

先决条件

  • 如果从私有镜像 registry 部署镜像,您必须首先将新镜像推送到私有 registry 中,然后编辑以下部分中的命令以使用私有镜像 registry 的名称。

流程

  1. 如果已经创建了自定义扫描程序配置,则必须在更新扫描程序配置文件前应用这些更改。

    1. 使用以下 roxctl 命令生成 Scanner:

      $ roxctl -e "$ROX_CENTRAL_ADDRESS" scanner generate
    2. 应用 TLS secret YAML 文件:

      • 如果使用 OpenShift Container Platform,请输入以下命令:

        $ oc apply -f scanner-bundle/scanner/02-scanner-03-tls-secret.yaml
      • 如果使用 Kubernetes,请输入以下命令:

        $ kubectl apply -f scanner-bundle/scanner/02-scanner-03-tls-secret.yaml
    3. 应用 Scanner 配置 YAML 文件:

      • 如果使用 OpenShift Container Platform,请输入以下命令:

        $ oc apply -f scanner-bundle/scanner/02-scanner-04-scanner-config.yaml
      • 如果使用 Kubernetes,请输入以下命令:

        $ kubectl apply -f scanner-bundle/scanner/02-scanner-04-scanner-config.yaml
  2. 更新 Scanner 镜像:

    • 如果使用 OpenShift Container Platform,请输入以下命令:

      $ oc -n stackrox set image deploy/scanner scanner=registry.redhat.io/advanced-cluster-security/rhacs-scanner-rhel8:3.71.3
    • 如果使用 Kubernetes,请输入以下命令:

      $ kubectl -n stackrox set image deploy/scanner scanner=registry.redhat.io/advanced-cluster-security/rhacs-scanner-rhel8:3.71.3
  3. 更新 Scanner 数据库镜像:

    • 如果使用 OpenShift Container Platform,请输入以下命令:

      $ oc -n stackrox set image deploy/scanner-db db=registry.redhat.io/advanced-cluster-security/rhacs-scanner-db-rhel8:3.71.3 init-db=registry.redhat.io/advanced-cluster-security/rhacs-scanner-db-rhel8:3.71.3
    • 如果使用 Kubernetes,请输入以下命令:

      $ kubectl -n stackrox set image deploy/scanner-db db=registry.redhat.io/advanced-cluster-security/rhacs-scanner-db-rhel8:3.71.3 init-db=registry.redhat.io/advanced-cluster-security/rhacs-scanner-db-rhel8:3.71.3

验证

  • 检查新 pod 是否已成功部署:

    • 如果使用 OpenShift Container Platform,请输入以下命令:

      $ oc get pod -n stackrox --watch
    • 如果使用 Kubernetes,请输入以下命令:

      $ kubectl get pod -n stackrox --watch

2.2.3.1. 升级到 RHACS 版本 3.71

如果您使用 roxctl CLI 和 YAML 文件升级到 RHACS 3.71,则需要执行一些额外的步骤。Scanner DB 镜像不再将 scanner-db-password Kubernetes Secret 挂载到 db Scanner DB 容器中。相反,扫描程序-db-password 仅适用于 init 容器 init-db。因此,您必须将 POSTGRES_PASSWORD_FILE 环境变量添加到 init 容器配置中。init 容器还必须挂载 scanner-db-tls-volumescanner-db-password 卷。如果使用 OpenShift Container Platform 或 Kubernetes,以下小节为 RHACS 提供升级步骤。如需有关 init 容器的更多信息,请参阅 Kubernetes 文档

先决条件

  • 此流程假设 Scanner DB 配置中的 db 容器位于 索引 0 中,它是 容器 列表中的第一个条目;而 scanner-db-password 卷挂载位于 index 2,即第三个条目。

虽然这种情况适用于大多数部署,但在输入这些命令前检查 Scanner DB 的配置。如果您的值不同,则必须通过以下命令调整 …​/containers/x/volumeMounts/y 值。

流程

  1. 应用补丁:

    • 如果使用 OpenShift Container Platform,请输入以下命令:

      $ oc -n stackrox patch deployment.apps/scanner-db --patch '{"spec":{"template":{"spec":{"initContainers":[{"name":"init-db","env":[{"name":"POSTGRES_PASSWORD_FILE","value":"/run/secrets/stackrox.io/secrets/password"}],"command":["/usr/local/bin/docker-entrypoint.sh","postgres","-c","config_file=/etc/postgresql.conf"],"volumeMounts":[{"name":"db-data","mountPath":"/var/lib/postgresql/data"},{"name":"scanner-db-tls-volume","mountPath":"/run/secrets/stackrox.io/certs","readOnly":true},{"name":"scanner-db-password","mountPath":"/run/secrets/stackrox.io/secrets","readOnly":true}],"securityContext":{"runAsGroup":70,"runAsNonRoot":true,"runAsUser":70}}]}}}}'
    • 如果使用 Kubernetes,请输入以下命令:

      $ kubectl -n stackrox patch deployment.apps/scanner-db --patch '{"spec":{"template":{"spec":{"initContainers":[{"name":"init-db","env":[{"name":"POSTGRES_PASSWORD_FILE","value":"/run/secrets/stackrox.io/secrets/password"}],"command":["/usr/local/bin/docker-entrypoint.sh","postgres","-c","config_file=/etc/postgresql.conf"],"volumeMounts":[{"name":"db-data","mountPath":"/var/lib/postgresql/data"},{"name":"scanner-db-tls-volume","mountPath":"/run/secrets/stackrox.io/certs","readOnly":true},{"name":"scanner-db-password","mountPath":"/run/secrets/stackrox.io/secrets","readOnly":true}],"securityContext":{"runAsGroup":70,"runAsNonRoot":true,"runAsUser":70}}]}}}}'
  2. 删除路径:

    • 如果使用 OpenShift Container Platform,请输入以下命令:

      $ oc -n stackrox patch deployment.apps/scanner-db --type json --patch '[{"op":"remove","path":"/spec/template/spec/containers/0/volumeMounts/2"}]'
    • 如果使用 Kubernetes,请输入以下命令:

      $ kubectl -n stackrox patch deployment.apps/scanner-db --type json --patch '[{"op":"remove","path":"/spec/template/spec/containers/0/volumeMounts/2"}]'

2.2.4. 验证 Central 集群升级

在升级了 Central 和 Scanner 后,验证该中央集群升级已完成。

流程

  • 检查 Central 日志:

    如果使用 OpenShift Container Platform,请输入以下命令:

    $ oc logs -n stackrox deploy/central -c central

    如果使用 Kubernetes,请输入以下命令:

    $ kubectl logs -n stackrox deploy/central -c central

成功升级的输出示例

No database restore directory found (this is not an error).
Migrator: 2019/10/25 17:58:54: starting DB compaction
Migrator: 2019/10/25 17:58:54: Free fraction of 0.0391 (40960/1048576) is < 0.7500. Will not compact
badger 2019/10/25 17:58:54 INFO: All 1 tables opened in 2ms
badger 2019/10/25 17:58:55 INFO: Replaying file id: 0 at offset: 846357
badger 2019/10/25 17:58:55 INFO: Replay took: 50.324µs
badger 2019/10/25 17:58:55 DEBUG: Value log discard stats empty
Migrator: 2019/10/25 17:58:55: DB is up to date. Nothing to do here.
badger 2019/10/25 17:58:55 INFO: Got compaction priority: {level:0 score:1.73 dropPrefix:[]}
version: 2019/10/25 17:58:55.189866 ensure.go:49: Info: Version found in the DB was current. We’re good to go!