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"}}" } } }'
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 二进制文件。
流程
下载
roxctl
CLI 的最新版本:$ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.71.3/bin/Linux/roxctl
使
roxctl
二进制文件可执行:$ chmod +x roxctl
将
roxctl
二进制文件放到PATH
中的目录中:要查看您的
PATH
,请执行以下命令:$ echo $PATH
验证
验证您已安装的
roxctl
版本:$ roxctl version
2.2.2.3. 在 macOS 上安装 roxctl CLI
您可以按照以下流程在 macOS 中安装 roxctl
CLI 二进制文件。
流程
下载
roxctl
CLI 的最新版本:$ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.71.3/bin/Darwin/roxctl
从二进制文件中删除所有扩展属性:
$ xattr -c roxctl
使
roxctl
二进制文件可执行:$ chmod +x roxctl
将
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 的名称。
流程
如果已经创建了自定义扫描程序配置,则必须在更新扫描程序配置文件前应用这些更改。
使用以下
roxctl
命令生成 Scanner:$ roxctl -e "$ROX_CENTRAL_ADDRESS" scanner generate
应用 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
应用 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
更新 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
更新 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-volume
和 scanner-db-password
卷。如果使用 OpenShift Container Platform 或 Kubernetes,以下小节为 RHACS 提供升级步骤。如需有关 init 容器的更多信息,请参阅 Kubernetes 文档。
先决条件
-
此流程假设 Scanner DB 配置中的
db
容器位于索引 0
中,它是容器
列表中的第一个条目;而scanner-db-password
卷挂载位于index 2
,即第三个条目。
虽然这种情况适用于大多数部署,但在输入这些命令前检查 Scanner DB 的配置。如果您的值不同,则必须通过以下命令调整 …/containers/x/volumeMounts/y
值。
流程
应用补丁:
如果使用 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}}]}}}}'
删除路径:
如果使用 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!