升级
升级 Red Hat Advanced Cluster Security for Kubernetes
摘要
第 1 章 使用 Operator 升级
根据安装时选择的 Update approval 选项,通过 Red Hat Advanced Cluster Security for Kubernetes (RHACS) Operator 自动执行或手动升级。
如果您使用 Operator 安装 RHACS 并在 Update approval 字段中选择 Automatic,则当发布新的软件版本时,RHACS 会被自动更新。如果选择了 Manual,则必须使用 Operator Lifecycle Manager (OLM)批准后续的 Operator 更新。如需更多信息,请参阅 手动批准待处理的 Operator 更新。
要回滚 Operator 升级,您必须执行以下部分中描述的步骤。您可以使用 CLI 或 OpenShift Container Platform Web 控制台回滚 Operator 升级。
1.1. 使用 CLI 回滚 Operator 升级
您可以使用 CLI 命令回滚 Operator 版本。
流程
运行以下命令来删除 OLM 订阅:
对于 OpenShift Container Platform,运行以下命令:
$ oc -n rhacs-operator delete subscription rhacs-operator
对于 Kubernetes,运行以下命令:
$ kubectl -n rhacs-operator delete subscription rhacs-operator
运行以下命令来删除集群服务版本(CSV):
对于 OpenShift Container Platform,运行以下命令:
$ oc -n rhacs-operator delete csv -l operators.coreos.com/rhacs-operator.rhacs-operator
对于 Kubernetes,运行以下命令:
$ kubectl -n rhacs-operator delete csv -l operators.coreos.com/rhacs-operator.rhacs-operator
通过选择以下选项之一来确定您要回滚到的早期版本:
如果当前 Central 实例正在运行,请运行以下命令查询 RHACS API 以获取回滚版本:
$ curl -k -s -u <user>:<password> https://<central hostname>/v1/centralhealth/upgradestatus | jq -r .upgradeStatus.forceRollbackTo
如果当前 Central 实例没有运行,请执行以下步骤:
注意这个过程只能在安装
rocksdb数据库时用于 RHACS 版本 3.74 及更早版本。运行以下命令,确保 Central 部署已缩减:
对于 OpenShift Container Platform,运行以下命令:
$ oc scale -n <central namespace> –replicas=0 deploy/central
对于 Kubernetes,运行以下命令:
$ kubectl scale -n <central namespace> –replicas=0 deploy/central
将以下 pod 规格保存为 YAML 文件:
apiVersion: v1 kind: Pod metadata: name: get-previous-db-version spec: containers: - name: get-previous-db-version image: registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:<rollback version> command: - sh args: - '-c' - "cat /var/lib/stackrox/.previous/migration_version.yaml | grep '^image:' | cut -f 2 -d : | tr -d ' '" volumeMounts: - name: stackrox-db mountPath: /var/lib/stackrox volumes: - name: stackrox-db persistentVolumeClaim: claimName: stackrox-db运行以下命令,使用您保存的 YAML 文件在 Central 命名空间中创建 pod:
对于 OpenShift Container Platform,运行以下命令:
$ oc create -n <central namespace> -f pod.yaml
对于 Kubernetes,运行以下命令:
$ kubectl create -n <central namespace> -f pod.yaml
创建 pod 后,运行以下命令来获取版本:
对于 OpenShift Container Platform,运行以下命令:
$ oc logs -n <central namespace> get-previous-db-version
对于 Kubernetes,运行以下命令:
$ kubectl logs -n <central namespace> get-previous-db-version
运行以下命令,编辑
central-config.yamlConfigMap以设置maintenance.forceRollBackVersion:<version> 参数:对于 OpenShift Container Platform,运行以下命令:
$ oc get configmap -n <central namespace> central-config -o yaml | sed -e "s/forceRollbackVersion: none/forceRollbackVersion: <version>/" | oc -n <central namespace> apply -f -
对于 Kubernetes,运行以下命令:
$ kubectl get configmap -n <central namespace> central-config -o yaml | sed -e "s/forceRollbackVersion: none/forceRollbackVersion: <version>/" | kubectl -n <central namespace> apply -f -
使用 Step 3 中显示的版本字符串为 Central 部署设置镜像,作为镜像标签。例如,运行以下命令:
对于 OpenShift Container Platform,运行以下命令:
$ oc set image -n <central namespace> deploy/central central=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:<version>
对于 Kubernetes,运行以下命令:
$ kubectl set image -n <central namespace> deploy/central central=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:<version>
验证
确保 Central pod 启动并处于
ready状态。如果 pod 崩溃,请检查日志以查看备份是否已恢复。一个成功的日志消息类似以下示例:Clone to Migrate ".previous", ""
-
在回滚频道上重新安装 Operator。例如,
3.71.3在rhacs-3.71频道中安装。
1.2. 使用 Web 控制台回滚 Operator 升级
您可以使用 OpenShift Container Platform Web 控制台回滚 Operator 版本。
先决条件
-
您可以使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群 Web 控制台。
流程
- 进入到 Operators → Installed Operators 页面。
- 找到 RHACS Operator 并点它。
- 在 Operator Details 页面中,从 Actions 列表中选择 Uninstall Operator。按照此操作,Operator 将停止运行,不再接收更新。
通过选择以下选项之一来确定您要回滚到的早期版本:
如果当前 Central 实例正在运行,您可以通过从终端窗口中运行以下命令来查询 RHACS API 来获取回滚版本:
$ curl -k -s -u <user>:<password> https://<central hostname>/v1/centralhealth/upgradestatus | jq -r .upgradeStatus.forceRollbackTo
您可以通过执行以下步骤来创建 pod 并提取之前的版本:
注意这个过程只能在安装
rocksdb数据库时用于 RHACS 版本 3.74 及更早版本。- 导航到 Workloads → Deployments → central。
- 在 Deployment details 下,单击 pod 数旁边的向下箭头,以缩减 pod。
导航到 Workloads → Pods → Create Pod,将 pod 规格的内容粘贴到编辑器中:
apiVersion: v1 kind: Pod metadata: name: get-previous-db-version spec: containers: - name: get-previous-db-version image: registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:<rollback version> command: - sh args: - '-c' - "cat /var/lib/stackrox/.previous/migration_version.yaml | grep '^image:' | cut -f 2 -d : | tr -d ' '" volumeMounts: - name: stackrox-db mountPath: /var/lib/stackrox volumes: - name: stackrox-db persistentVolumeClaim: claimName: stackrox-db- 点 Create。
- 创建 pod 后,点 Logs 选项卡来获取版本字符串。
通过执行以下步骤更新回滚配置:
- 导航到 Workloads → ConfigMaps → central-config,然后从 Actions 列表中选择 Edit ConfigMap。
-
在
central-config.yaml键的值中找到forceRollbackVersion行。 -
将
none替换为3.73.3,然后保存文件。
通过执行以下步骤将 Central 更新至早期版本:
- 导航到 Workloads → Deployments → central,然后从 Actions 列表中选择 Edit Deployment。
- 更新镜像名称,然后保存更改。
验证
确保 Central pod 启动并处于
ready状态。如果 pod 崩溃,请检查日志以查看备份是否已恢复。一个成功的日志消息类似以下示例:Clone to Migrate ".previous", ""
-
在回滚频道上重新安装 Operator。例如,
3.71.3在rhacs-3.71频道中安装。
1.3. 其他资源
第 2 章 使用 Helm chart 升级
如果使用 Helm chart 安装 Red Hat Advanced Cluster Security for Kubernetes,要升级到 Red Hat Advanced Cluster Security for Kubernetes 的最新版本,您必须执行以下操作:
- 更新 Helm Chart。
- 更新中央服务 Helm Chart 的配置文件。
- 升级中央服务 Helm Chart。
- 更新 secure-cluster-services Helm Chart 的配置文件。
- 升级 secured-cluster-services Helm chart。
为确保最佳功能,您的 secure-cluster-services Helm Chart 和 central-services Helm Chart 需要使用相同的版本。
2.1. 更新 Helm Chart 仓库
在升级到 Red Hat Advanced Cluster Security for Kubernetes 的新版本前,您必须始终更新 Helm chart。
先决条件
- 您必须已经添加了 Red Hat Advanced Cluster Security for Kubernetes Helm Chart 仓库。
流程
更新 Red Hat Advanced Cluster Security for Kubernetes chart 软件仓库。
$ helm repo update
验证
运行以下命令来验证添加的 chart 存储库:
$ helm search repo -l rhacs/
2.2. 其他资源
第 3 章 使用 roxctl CLI 手动升级
您可以从受支持的旧版本升级到 Red Hat Advanced Cluster Security for Kubernetes (RHACS)的最新版本。
只有在使用 roxctl CLI 部署 RHACS 时,才需要执行手动升级步骤。
要将 RHACS 升级到最新版本,您必须执行以下操作:
-
设置
ROX_SCANNER_DB_INIT环境变量 - 备份中央数据库
- 升级 Central
-
升级
roxctlCLI - 升级扫描器
- 验证所有受保护的集群都已升级
3.1. 设置 ROX_SCANNER_DB_INIT 环境变量
ScannerDB 的 initContainer 需要一个新的环境变量,名为 ROX_SCANNER_DB_INIT。在升级前将其值设为 true。
流程
对于 OpenShift Container Platform,运行以下命令:
$ oc -n stackrox set env deploy/scanner-db -c init-db ROX_SCANNER_DB_INIT=true
对于 Kubernetes,运行以下命令:
$ kubectl -n stackrox set env deploy/scanner-db -c init-db ROX_SCANNER_DB_INIT=true
3.2. 备份 Central 数据库
在基础架构灾难的情况下,您可以备份中心数据库,并使用该备份从失败的升级或数据恢复中回滚。
先决条件
-
您必须具有一个 API 令牌,并且具有对 Red Hat Advanced Cluster Security for Kubernetes 的所有资源的
read权限。analysts 系统角色具有所有资源的read权限。 -
已安装了
roxctlCLI。 -
您已配置了
ROX_API_TOKEN和ROX_CENTRAL_ADDRESS环境变量。
流程
运行备份命令:
对于 Red Hat Advanced Cluster Security for Kubernetes 3.0.55 及更新版本:
$ roxctl -e "$ROX_CENTRAL_ADDRESS" central backup
对于 Red Hat Advanced Cluster Security for Kubernetes 3.0.54 和更早的版本:
$ roxctl -e "$ROX_CENTRAL_ADDRESS" central db backup
其他资源
3.3. 升级中央集群
备份 Central 数据库后,下一步是升级中部集群。此步骤包括 upgrade Central、roxctl CLI 和 Scanner。
3.3.1. 升级 Central
您可以通过下载和部署更新的镜像,将 Central 更新到最新版本。
3.3.1.1. 在 OpenShift Container Platform 上升级 Central
如果在 OpenShift Container Platform 上安装了 Red Hat Advanced Cluster Security for Kubernetes,请使用以下步骤进行升级。
流程
修补本地角色:
$ oc -n stackrox patch role edit -p '{"rules":[{"apiGroups":["*"],"resources":["*"],"verbs":["create","get", "list", "watch", "update", "patch", "delete","deletecollection"]}]}'清理现有的角色和角色绑定:
$ oc -n stackrox delete RoleBinding admission-control-use-scc || true
$ oc -n stackrox delete RoleBinding sensor-use-scc || true
$ oc -n stackrox delete Role use-anyuid-scc || true
通过删除硬编码的安全上下文,将
sensor和admission-control设置为restricted[-v2]安全性上下文约束:$ oc -n stackrox patch deploy sensor -p '{"spec":{"template":{"spec":{"securityContext":null}}}}' 1- 1
- Red Hat Advanced Cluster Security for Kubernetes 会自动重新创建 pod,但
sensor可能需要一些时间才能重启。
$ oc -n stackrox patch deploy admission-control -p '{"spec":{"template":{"spec":{"securityContext":null}}}}'运行以下命令来升级 Central:
$ oc -n stackrox patch deploy/central -p '{"spec":{"template":{"spec":{"containers":[{"name":"central","env":[{"name":"ROX_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}}]}]}}}}'$ oc -n stackrox patch deployment/scanner -p '{"spec":{"template":{"spec":{"containers":[{"name":"scanner","securityContext":{"runAsUser":65534}}]}}}}'$ oc -n stackrox set image deploy/central central=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:3.73.5 1- 1
- 如果从私有镜像 registry 部署镜像,请将新镜像推送到私有 registry 中,并在此处替换镜像 registry 地址。
重要如果您还没有使用 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
$ oc get pod -n stackrox --watch
3.3.1.2. 在 Kubernetes 上升级 Central
如果您在 Kubernetes 上安装了 Red Hat Advanced Cluster Security for Kubernetes,请使用以下步骤进行升级。
先决条件
- 如果您从私有镜像 registry 部署镜像,请先将新镜像推送到私有 registry 中,然后使用以下命令替换您的镜像 registry。
流程
修补本地角色:
$ kubectl -n stackrox patch role edit -p '{"rules":[{"apiGroups":["*"],"resources":["*"],"verbs":["create","get", "list", "watch", "update", "patch", "delete","deletecollection"]}]}'运行以下命令来升级 Central:
$ kubectl -n stackrox patch deploy/central -p '{"spec":{"template":{"spec":{"containers":[{"name":"central","env":[{"name":"ROX_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}}]}]}}}}'$ kubectl -n stackrox patch deployment/scanner -p '{"spec":{"template":{"spec":{"containers":[{"name":"scanner","securityContext":{"runAsUser":65534}}]}}}}'$ kubectl -n stackrox set image deploy/central central=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:3.73.5 1- 1
- 如果从私有镜像 registry 部署镜像,请将新镜像推送到私有 registry 中,并在此处替换镜像 registry 地址。
验证
验证新 pod 是否已部署:
$ kubectl get deploy -n stackrox -o wide
$ kubectl get pod -n stackrox --watch
3.3.2. 升级 roxctl CLI
要将 roxctl CLI 升级到最新版本,您必须卸载 roxctl CLI 的现有版本,然后安装 roxctl CLI 的最新版本。
3.3.2.1. 卸载 roxctl CLI
您可以按照以下流程卸载 Linux 上的 roxctl CLI 二进制文件。
流程
查找并删除
roxctl二进制文件:$ ROXPATH=$(which roxctl) && rm -f $ROXPATH 1- 1
- 根据您的环境,您可能需要管理员删除
roxctl二进制文件。
3.3.2.2. 在 Linux 中安装 roxctl CLI
您可以按照以下流程在 Linux 上安装 roxctl CLI 二进制文件。
流程
下载
roxctlCLI 的最新版本:$ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.73.5/bin/Linux/roxctl
使
roxctl二进制文件可执行:$ chmod +x roxctl
将
roxctl二进制文件放到PATH中的目录中:要查看您的
PATH,请执行以下命令:$ echo $PATH
验证
验证您已安装的
roxctl版本:$ roxctl version
3.3.2.3. 在 macOS 上安装 roxctl CLI
您可以按照以下流程在 macOS 中安装 roxctl CLI 二进制文件。
流程
下载
roxctlCLI 的最新版本:$ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.73.5/bin/Darwin/roxctl
从二进制文件中删除所有扩展属性:
$ xattr -c roxctl
使
roxctl二进制文件可执行:$ chmod +x roxctl
将
roxctl二进制文件放到PATH中的目录中:要查看您的
PATH,请执行以下命令:$ echo $PATH
验证
验证您已安装的
roxctl版本:$ roxctl version
3.3.2.4. 在 Windows 上安装 roxctl CLI
您可以按照以下流程在 Windows 上安装 roxctl CLI 二进制文件。
流程
下载
roxctlCLI 的最新版本:$ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.73.5/bin/Windows/roxctl.exe
验证
验证您已安装的
roxctl版本:$ roxctl version
升级 roxctl CLI 后,您可以升级 Scanner。
3.3.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.73.5
如果使用 Kubernetes,请输入以下命令:
$ kubectl -n stackrox set image deploy/scanner scanner=registry.redhat.io/advanced-cluster-security/rhacs-scanner-rhel8:3.73.5
更新 Scanner 数据库镜像:
如果使用 OpenShift Container Platform,请输入以下命令:
$ oc -n stackrox set image deploy/scanner-db db=registry.redhat.io/advanced-cluster-security/rhacs-scanner-db-rhel8:3.73.5 init-db=registry.redhat.io/advanced-cluster-security/rhacs-scanner-db-rhel8:3.73.5
如果使用 Kubernetes,请输入以下命令:
$ kubectl -n stackrox set image deploy/scanner-db db=registry.redhat.io/advanced-cluster-security/rhacs-scanner-db-rhel8:3.73.5 init-db=registry.redhat.io/advanced-cluster-security/rhacs-scanner-db-rhel8:3.73.5
验证
检查新 pod 是否已成功部署:
如果使用 OpenShift Container Platform,请输入以下命令:
$ oc get pod -n stackrox --watch
如果使用 Kubernetes,请输入以下命令:
$ kubectl get pod -n stackrox --watch
3.3.3.1. 升级到 RHACS 版本 3.71
如果要使用 roxctl CLI 和 YAML 文件升级到 RHACS 3.71,则需要执行一些额外的步骤。Scanner DB 镜像不再将 scanner-db-password Kubernetes Secret 挂载到 db Scanner DB 容器中。相反,scanner-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容器是index 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"}]'
3.3.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!
3.4. 升级所有安全集群
升级中部服务后,您必须升级所有安全的集群。
要完成每个运行 Sensor、Collector 和 Admission Controller 的安全集群的手动升级,请按照本节中的说明操作。
3.4.1. 更新 ValidatingWebhookConfiguration
之前的 RHACS 版本在 ValidatingWebhookConfiguration 中包含了一个错误的条目。要修复它,您必须更新 ValidatingWebhookConfiguration。
流程
如果您在 Admission 控制器中启用了
listenOnEvents,您必须运行以下命令:$ oc patch validatingwebhookconfiguration stackrox -p '{"webhooks":[{"name": "k8sevents.stackrox.io", "rules": [{"apiGroups": ["*"], "apiVersions": ["*"], "operations": ["CONNECT"], "resources": ["pods", "pods/exec", "pods/portforward"]}]}]}' 1- 1
- 如果使用 Kubernetes,请输入
kubectl而不是oc。
3.4.2. 更新其他镜像
在不使用自动升级时,您必须更新每个安全集群中的 sensor, collector 和 compliance 镜像。
如果使用 Kubernetes,请在此流程中列出的命令中使用 kubectl 而不是 oc。
流程
更新 Sensor 镜像:
$ oc -n stackrox set image deploy/sensor sensor=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:3.73.5 1- 1
- 如果使用 Kubernetes,请输入
kubectl而不是oc。
更新 Compliance 镜像:
$ oc -n stackrox set image ds/collector compliance=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:3.73.5 1- 1
- 如果使用 Kubernetes,请输入
kubectl而不是oc。
更新 Collector 镜像:
$ oc -n stackrox set image ds/collector collector=registry.redhat.io/advanced-cluster-security/rhacs-collector-rhel8:3.73.5 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}更新准入控制镜像:
$ oc -n stackrox set image deploy/admission-control admission-control=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:3.73.5
3.4.3. 验证安全集群升级
在升级了安全集群后,验证更新的 pod 是否正常工作。
3.5. 回滚 Central
如果升级到新版本失败,您可以回滚到以前版本的 Central。
3.5.1. 正常回滚 Central
如果升级 Red Hat Advanced Cluster Security for Kubernetes 失败,您可以回滚到以前版本的 Central。
先决条件
- 您必须使用 Red Hat Advanced Cluster Security for Kubernetes 3.0.57.0 或更高版本。
- 执行回滚前,持久性存储必须具有可用磁盘空间。Red Hat Advanced Cluster Security for Kubernetes 使用磁盘空间在升级过程中保留数据库副本。如果磁盘空间不足以存储副本,升级失败,您将无法回滚到较早的版本。
流程
当升级失败时( Central 服务启动前),运行以下命令回滚到以前的版本:
$ oc -n stackrox rollout undo deploy/central 1- 1
- 如果使用 Kubernetes,请输入
kubectl而不是oc。
3.5.2. 强制回滚 Central
您可以使用强制回滚回滚到较早版本的 Central (在 Central 服务启动后)。
使用强制回滚切换到以前的版本可能会导致数据丢失和功能。
先决条件
- 您必须使用 Red Hat Advanced Cluster Security for Kubernetes 3.0.58.0 或更高版本。
- 执行回滚前,持久性存储必须具有可用磁盘空间。Red Hat Advanced Cluster Security for Kubernetes 使用磁盘空间在升级过程中保留数据库副本。如果磁盘空间不足以存储副本,升级失败,您将无法回滚到较早的版本。
流程
运行以下命令来执行强制回滚:
要强制回滚到以前安装的版本:
$ oc -n stackrox rollout undo deploy/central 1- 1
- 如果使用 Kubernetes,请输入
kubectl而不是oc。
强制回滚到特定版本:
编辑 Central 的
ConfigMap:$ oc -n stackrox edit configmap/central-config 1- 1
- 如果使用 Kubernetes,请输入
kubectl而不是oc。
更新
maintenance.forceRollbackVersion键的值:data: central-config.yaml: | maintenance: safeMode: false compaction: enabled: true bucketFillFraction: .5 freeFractionThreshold: 0.75 forceRollbackVersion: <x.x.x.x> 1 ...- 1
- 指定要回滚到的版本。
更新 Central 镜像版本:
$ oc -n stackrox \ 1 set image deploy/central central=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:<x.x.x.x> 2
3.6. 验证升级
更新的 Sensors 和 Collector 将继续从每个安全集群报告最新的数据。
在 RHACS 门户中可以看到 Sensor 最后联系 Central 的时间。
流程
- 在 RHACS 门户网站中,进入 Platform Configuration → System Health。
- 检查以确保 Sensor Upgrade 显示使用 Central 的集群最新。
3.7. 撤销 API 令牌
为了安全起见,红帽建议您撤销用于完成 Central 数据库备份的 API 令牌。
先决条件
- 升级后,您必须重新加载 RHACS 门户页面并重新接受证书,以便继续使用 RHACS 门户。
流程
- 在 RHACS 门户网站中,进入 Platform Configuration → Integrations。
- 向下滚动到 Authentication Tokens 类别,然后点 API Token。
- 选中您要撤销的令牌名称前面的复选框。
- 点 Revoke。
- 在确认对话框中,点 Confirm。