2.2. 중앙 클러스터 업그레이드

중앙 데이터베이스를 백업한 후 다음 단계는 중앙 클러스터를 업그레이드하는 것입니다. 이 단계에는 Central, roxctl CLI 및 Scanner 업그레이드가 포함됩니다.

2.2.1. Central 업그레이드

업데이트된 이미지를 다운로드하고 배포하여 최신 버전으로 중앙을 업데이트할 수 있습니다.

사전 요구 사항

  • 프라이빗 이미지 레지스트리에서 이미지를 배포하는 경우 먼저 새 이미지를 프라이빗 레지스트리로 내보낸 다음 이 섹션에 있는 명령의 이미지 레지스트리를 교체합니다.

절차

  • 다음 명령을 실행하여 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를 사용하는 경우 oc.. 대신 kubectl 을 입력합니다.
    $ oc -n stackrox patch deployment/scanner -p '{"spec":{"template":{"spec":{"containers":[{"name":"scanner","securityContext":{"runAsUser":65534}}]}}}}' 1
    1
    Kubernetes를 사용하는 경우 oc.. 대신 kubectl 을 입력합니다.
    $ oc -n stackrox set image deploy/central central=registry.redhat.io/advanced-cluster-security/rhacs-main-rhel8:3.71.3 1
    1
    Kubernetes를 사용하는 경우 oc.. 대신 kubectl 을 입력합니다.
    중요
    • Kubernetes 3.65.0용 Red Hat Advanced Cluster Security에서 업그레이드하는 경우 다음 추가 명령을 실행하여 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를 사용하는 경우 oc.. 대신 kubectl 을 입력합니다.
    • Helm 또는 Operator를 사용하여 Kubernetes용 Red Hat Advanced Cluster Security를 설치하지 않았으며 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 1
    1
    Kubernetes를 사용하는 경우 oc.. 대신 kubectl 을 입력합니다.
    $ oc get pod -n stackrox --watch 1
    1
    Kubernetes를 사용하는 경우 oc.. 대신 kubectl 을 입력합니다.

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 바이너리를 설치할 수 있습니다.

절차

  1. 최신 버전의 roxctl CLI를 다운로드합니다.

    $ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.71.3/bin/Linux/roxctl
  2. roxctl 바이너리를 실행 가능하게 합니다.

    $ chmod +x roxctl
  3. roxctl 바이너리를 PATH 에 있는 디렉터리에 배치합니다.

    PATH를 확인하려면 다음 명령을 실행합니다.

    $ echo $PATH

검증

  • 설치된 roxctl 버전을 확인합니다.

    $ roxctl version

2.2.2.3. macOS에 roxctl CLI 설치

다음 절차에 따라 macOS에서 roxctl CLI 바이너리를 설치할 수 있습니다.

절차

  1. 최신 버전의 roxctl CLI를 다운로드합니다.

    $ curl -O https://mirror.openshift.com/pub/rhacs/assets/3.71.3/bin/Darwin/roxctl
  2. 바이너리에서 모든 확장 속성을 제거합니다.

    $ xattr -c roxctl
  3. roxctl 바이너리를 실행 가능하게 합니다.

    $ chmod +x roxctl
  4. 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를 업그레이드한 후 스캐너를 업그레이드할 수 있습니다.

2.2.3. 스캐너 업그레이드

roxctl CLI를 사용하여 scanner를 최신 버전으로 업데이트할 수 있습니다.

사전 요구 사항

  • 개인 이미지 레지스트리에서 이미지를 배포하는 경우 먼저 새 이미지를 프라이빗 레지스트리로 푸시한 다음, 개인 이미지 레지스트리 이름을 사용하도록 다음 섹션의 명령을 편집해야 합니다.

절차

  1. 사용자 정의 스캐너 구성을 생성한 경우 스캐너 구성 파일을 업데이트하기 전에 해당 변경 사항을 적용해야 합니다.

    1. 다음 roxctl 명령을 사용하여 Scanner를 생성합니다.

      $ roxctl -e "$ROX_CENTRAL_ADDRESS" scanner generate
    2. TLS 보안 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
    3. 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
  2. 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
  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 시크릿을 db Scanner DB 컨테이너에 마운트하지 않습니다. 대신 scanner-db-password 는 init 컨테이너 init-db 에서만 사용됩니다. 따라서 init 컨테이너 구성에 POSTGRES_PASSWORD_FILE 환경 변수를 추가해야 합니다. init 컨테이너는 scanner-db-tls-volumescanner-db-password 볼륨도 마운트해야 합니다. 다음 섹션에서는 OpenShift Container Platform 또는 Kubernetes를 사용하는 경우 RHACS의 업그레이드 단계를 제공합니다. init 컨테이너에 대한 자세한 내용은 Kubernetes 설명서를 참조하십시오.

사전 요구 사항

  • 이 절차에서는 Scanner DB 구성의 db 컨테이너가 컨테이너 목록의 첫 번째 항목인 인덱스 0 에 있고, scanner-db-password 볼륨 마운트는 세 번째 항목인 인덱스 2 에 있다고 가정합니다.

이 시나리오는 대부분의 배포에 적용되지만 이러한 명령을 입력하기 전에 스캐너 DB 구성을 확인하십시오. 값이 다르면 다음 명령에서 …​/containers/x/volumeMounts/y 값을 조정해야 합니다.

절차

  1. 패치를 적용합니다.

    • 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}}]}}}}'
  2. 경로를 제거합니다.

    • 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. 중앙 클러스터 업그레이드 확인

중앙과 스캐너를 모두 업그레이드한 후 중앙 클러스터 업그레이드가 완료되었는지 확인합니다.

절차

  • 중앙 로그를 확인합니다.

    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!