3.4. 升级所有安全集群


升级中部服务后,您必须升级所有安全的集群。

重要
  • 如果您使用自动升级:

  • 如果您不使用自动升级,则必须在包括 Central 集群在内的所有安全集群中运行本节中的说明。

    • 为确保最佳功能,请为您的安全集群和安装 Central 的集群使用相同的 RHACS 版本。

要完成每个运行 Sensor、Collector 和 Admission Controller 的安全集群的手动升级,请按照本节中的说明操作。

3.4.1. 更新其他镜像

在不使用自动升级时,您必须更新每个安全集群中的 sensor, collector 和 compliance 镜像。

注意

如果使用 Kubernetes,请在此流程中列出的命令中使用 kubectl 而不是 oc

流程

  1. 更新 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
  2. 更新 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
  3. 更新 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}
  4. 更新准入控制镜像:

    $ 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

流程

  1. 修补 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"}}}}]'
  2. 运行以下命令,补丁 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 和所有安全的集群间的兼容性和最佳安全配置。

流程

  1. 列出在 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 字段指定。

  2. 添加所需的角色和角色绑定,以使用 Red Hat OpenShift SCC 而不是 RHACS 自定义 SCC。

    要添加所需的角色和角色绑定,为 Central 集群使用 Red Hat OpenShift SCC,请完成以下步骤:

    1. 创建名为 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
      - - -
      1
      本例中的 Kubernetes 资源的类型 Role
      2
      角色资源的名称。
      3
      创建角色的命名空间。
      4
      描述角色资源授予权限。
      5
      本例中的 Kubernetes 资源的类型,即 RoleBinding
      6
      角色绑定资源的名称。
      7
      指定要在同一命名空间中绑定的角色。
      8
      指定绑定到角色的主题。
    2. 运行以下命令,创建 update-central.yaml 文件中指定的角色和角色绑定资源:

      $ oc -n stackrox create -f ./update-central.yaml
  3. 要添加所需的角色和角色绑定,以便将 Red Hat OpenShift SCC 用于所有安全集群,请完成以下步骤:

    1. 创建名为 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
      - - -
      1
      本例中的 Kubernetes 资源的类型 Role
      2
      角色资源的名称。
      3
      创建角色的命名空间。
      4
      描述角色资源授予权限。
      5
      本例中的 Kubernetes 资源的类型,即 RoleBinding
      6
      角色绑定资源的名称。
      7
      指定要在同一命名空间中绑定的角色。
      8
      指定绑定到角色的主题。
    2. 运行以下命令,创建 upgrade-scs.yaml 文件中指定的角色和角色绑定资源:

      $ oc -n stackrox create -f ./update-scs.yaml
      重要

      您必须在每个安全集群中运行此命令,以创建 upgrade-scs.yaml 文件中指定的角色和角色绑定。

  4. 删除特定于 RHACS 的 SCC:

    1. 要删除特定于 Central 集群的 SCC,请运行以下命令:

      $ oc delete scc/stackrox-central scc/stackrox-central-db scc/stackrox-scanner
    2. 要删除特定于所有安全集群的 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 环境变量。您必须为每个部署编辑此变量。

流程

  1. 运行以下命令来编辑 Sensor 部署的变量:

    $ oc -n stackrox edit deploy/sensor 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc
  2. GOMEMLIMIT 变量替换为 ROX_MEMLIMIT
  3. 保存该文件。

3.4.3.2. 为 Collector 部署编辑 GOMEMLIMIT 环境变量

升级到版本 4.4 要求您手动将 GOMEMLIMIT 环境变量替换为 ROX_MEMLIMIT 环境变量。您必须为每个部署编辑此变量。

流程

  1. 运行以下命令来编辑 Collector 部署的变量:

    $ oc -n stackrox edit deploy/collector 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc
  2. GOMEMLIMIT 变量替换为 ROX_MEMLIMIT
  3. 保存该文件。

3.4.3.3. 编辑 Admission Controller 部署的 GOMEMLIMIT 环境变量

升级到版本 4.4 要求您手动将 GOMEMLIMIT 环境变量替换为 ROX_MEMLIMIT 环境变量。您必须为每个部署编辑此变量。

流程

  1. 运行以下命令来编辑 Admission Controller 部署的变量:

    $ oc -n stackrox edit deploy/admission-control 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc
  2. GOMEMLIMIT 变量替换为 ROX_MEMLIMIT
  3. 保存该文件。

3.4.3.4. 验证安全集群升级

在升级了安全集群后,验证更新的 pod 是否正常工作。

流程

  • 检查新 pod 是否已部署:

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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.