3.4. 升级所有安全集群
升级中部服务后,您必须升级所有安全的集群。
如果您使用自动升级:
- 使用自动升级来更新所有受保护的集群。
- 有关对自动集群升级器问题进行故障排除的详情,请参考 对集群升级进行故障排除。
- 跳过本节中的说明,并按照验证升级和撤销 API 令牌部分中的说明进行操作。
如果您不使用自动升级,则必须在包括 Central 集群在内的所有安全集群中运行本节中的说明。
- 为确保最佳功能,请为您的安全集群和安装 Central 的集群使用相同的 RHACS 版本。
要完成每个运行 Sensor、Collector 和 Admission Controller 的安全集群的手动升级,请按照本节中的说明操作。
3.4.1. 更新其他镜像
在不使用自动升级时,您必须更新每个安全集群中的 sensor, collector 和 compliance 镜像。
如果使用 Kubernetes,请在此流程中列出的命令中使用 kubectl
而不是 oc
。
流程
更新 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
。
更新 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
。
更新 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}
更新准入控制镜像:
$ 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"。
3.4.2. 将 POD_NAMESPACE 添加到 sensor 和 admission-control 部署中
当从 4.6 之前的版本升级到 4.6 或更高版本时,您必须修补 sensor 和 admission-control 部署来设置 POD_NAMESPACE
环境变量。
如果使用 Kubernetes,请在此流程中列出的命令中使用 kubectl
而不是 oc
。
流程
修补 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"}}}}]'
运行以下命令,补丁 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"}}}}]'
后续步骤
其他资源
3.4.3. 在手动升级过程中迁移 SCC
通过使用 roxctl
CLI 在手动升级过程中迁移安全性上下文约束(SCC),您可以无缝转换 Red Hat Advanced Cluster Security for Kubernetes (RHACS)服务以使用 Red Hat OpenShift SCC,确保 Central 和所有安全的集群间的兼容性和最佳安全配置。
流程
列出在 Central 和所有安全集群中部署的所有 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
字段指定。添加所需的角色和角色绑定,以使用 Red Hat OpenShift SCC 而不是 RHACS 自定义 SCC。
要添加所需的角色和角色绑定,为 Central 集群使用 Red Hat OpenShift SCC,请完成以下步骤:
创建名为
update-central.yaml
的文件,该文件使用以下内容定义角色和角色绑定资源:例 3.1. YAML 文件示例
apiVersion: rbac.authorization.k8s.io/v1 kind: Role 1 metadata: annotations: email: support@stackrox.com 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: support@stackrox.com 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: support@stackrox.com 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: support@stackrox.com 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: support@stackrox.com 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: support@stackrox.com 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 - - -
运行以下命令,创建
update-central.yaml
文件中指定的角色和角色绑定资源:$ oc -n stackrox create -f ./update-central.yaml
要添加所需的角色和角色绑定,以便将 Red Hat OpenShift SCC 用于所有安全集群,请完成以下步骤:
创建名为
upgrade-scs.yaml
的文件,该文件使用以下内容定义角色和角色绑定资源:例 3.2. 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 - - -
运行以下命令,创建
upgrade-scs.yaml
文件中指定的角色和角色绑定资源:$ oc -n stackrox create -f ./update-scs.yaml
重要您必须在每个安全集群中运行此命令,以创建
upgrade-scs.yaml
文件中指定的角色和角色绑定。
删除特定于 RHACS 的 SCC:
要删除特定于 Central 集群的 SCC,请运行以下命令:
$ oc delete scc/stackrox-central scc/stackrox-central-db scc/stackrox-scanner
要删除特定于所有安全集群的 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
扫描程序
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
3.4.3.1. 编辑 Sensor 部署的 GOMEMLIMIT 环境变量
升级到版本 4.4 要求您手动将 GOMEMLIMIT
环境变量替换为 ROX_MEMLIMIT
环境变量。您必须为每个部署编辑此变量。
流程
运行以下命令来编辑 Sensor 部署的变量:
$ oc -n stackrox edit deploy/sensor 1
- 1
- 如果使用 Kubernetes,请输入
kubectl
而不是oc
。
-
将
GOMEMLIMIT
变量替换为ROX_MEMLIMIT
。 - 保存该文件。
3.4.3.2. 为 Collector 部署编辑 GOMEMLIMIT 环境变量
升级到版本 4.4 要求您手动将 GOMEMLIMIT
环境变量替换为 ROX_MEMLIMIT
环境变量。您必须为每个部署编辑此变量。
流程
运行以下命令来编辑 Collector 部署的变量:
$ oc -n stackrox edit deploy/collector 1
- 1
- 如果使用 Kubernetes,请输入
kubectl
而不是oc
。
-
将
GOMEMLIMIT
变量替换为ROX_MEMLIMIT
。 - 保存该文件。
3.4.3.3. 编辑 Admission Controller 部署的 GOMEMLIMIT 环境变量
升级到版本 4.4 要求您手动将 GOMEMLIMIT
环境变量替换为 ROX_MEMLIMIT
环境变量。您必须为每个部署编辑此变量。
流程
运行以下命令来编辑 Admission Controller 部署的变量:
$ oc -n stackrox edit deploy/admission-control 1
- 1
- 如果使用 Kubernetes,请输入
kubectl
而不是oc
。
-
将
GOMEMLIMIT
变量替换为ROX_MEMLIMIT
。 - 保存该文件。
3.4.3.4. 验证安全集群升级
在升级了安全集群后,验证更新的 pod 是否正常工作。