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.7.8更新 Compliance 镜像:
$ oc -n stackrox set image ds/collector compliance=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:4.7.8更新 Collector 镜像:
$ oc -n stackrox set image ds/collector collector=registry.redhat.io/advanced-cluster-security/rhacs-collector-rhel8:4.7.8更新准入控制镜像:
$ oc -n stackrox set image deploy/admission-control admission-control=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:4.7.8重要如果您使用
roxctlCLI 在 Red Hat OpenShift 上安装 RHACS,则需要迁移安全性上下文约束(SCC)。如需更多信息,请参阅"添加资源"部分中的"手动升级过程中缓解 SCC"。
当从 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 # 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 # 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: 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 # 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 # namespace: stackrox roleRef: # apiGroup: rbac.authorization.k8s.io kind: Role name: use-central-db-scc subjects: # - 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 - - -其中:
kind: Role-
指定 Kubernetes 资源的类型,本例中为
Role。 metadata.name: <rolename>- 指定角色资源的名称。
metadata.namespace- 指定在其中创建角色的命名空间。
规则- 指定角色资源授予权限。
kind: RoleBinding-
指定 Kubernetes 资源的类型,本例中为
RoleBinding。 metadata.name: <rolebindingname>- 指定角色绑定资源的名称。
metadata.roleRef- 指定要在同一命名空间中绑定的角色。
metadata.subjects- 指定绑定到角色的主题。
运行以下命令,创建
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 # 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 # namespace: stackrox # rules: # - apiGroups: - security.openshift.io resourceNames: - privileged resources: - securitycontextconstraints verbs: - use - - - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding # 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 # namespace: stackrox roleRef: # apiGroup: rbac.authorization.k8s.io kind: Role name: use-privileged-scc subjects: # - kind: ServiceAccount name: collector namespace: stackrox - - -其中:
kind: Role-
指定 Kubernetes 资源的类型,本例中为
Role。 metadata.name: <rolename>- 指定角色资源的名称。
metadata.namespace- 指定在其中创建角色的命名空间。
规则- 指定角色资源授予权限。
kind: RoleBinding-
指定 Kubernetes 资源的类型,本例中为
RoleBinding。 metadata.name: <rolebindingname>- 指定角色绑定资源的名称。
metadata.roleRef- 指定要在同一命名空间中绑定的角色。
metadata.subjects- 指定绑定到角色的主题。
运行以下命令,创建
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:'将输出与下表进行比较:
Expand 组件 以前的自定义 SCC 新的 Red Hat OpenShift 4 SCC Central
stackrox-centralnonroot-v2Central-db
stackrox-central-dbnonroot-v2扫描程序
stackrox-scannernonroot-v2Scanner-db
stackrox-scannernonroot-v2Admission Controller
stackrox-admission-controlrestricted-v2Collector
stackrox-collectorprivilegedSensor
stackrox-sensorrestricted-v2
3.4.3.1. 验证安全集群升级 复制链接链接已复制到粘贴板!
在升级了安全集群后,验证更新的 pod 是否正常工作。
如果使用 Kubernetes,请输入 kubectl 而不是 oc。
流程
检查新 pod 是否已部署:
$ oc get deploy,ds -n stackrox -o wide$ oc get pod -n stackrox --watch