4.9. 제한된 네트워크에서 Operator Lifecycle Manager 사용

제한된 네트워크(연결이 끊긴 클러스터)에 설치된 OpenShift Container Platform 클러스터의 경우 OLM(Operator Lifecycle Manager)은 기본적으로 원격 레지스트리에서 호스팅되는 Red Hat 제공 OperatorHub 소스에 액세스할 수 없습니다. 이러한 원격 소스에는 완전한 인터넷 연결이 필요하기 때문입니다.

그러나 클러스터 관리자는 워크스테이션에 완전한 인터넷 액세스 권한이 있는 경우 제한된 네트워크에서 OLM을 사용하도록 클러스터를 활성화할 수 있습니다. 원격 OperatorHub 콘텐츠를 가져오는 데 완전한 인터넷 액세스 권한이 필요한 워크스테이션은 원격 소스의 로컬 미러를 준비하고 콘텐츠를 미러 레지스트리로 내보내는 데 사용됩니다.

미러 레지스트리는 워크스테이션 및 연결이 끊긴 클러스터 모두에 연결해야 하는 베스천 호스트에 있거나 미러링된 콘텐츠를 연결이 끊긴 환경에 물리적으로 이동하기 위해 이동식 미디어가 필요한 완전히 연결이 끊긴 호스트 또는 에어갭(Airgap) 호스트에 있을 수 있습니다.

이 가이드에서는 제한된 네트워크에서 OLM을 활성화하는 데 필요한 다음 프로세스를 설명합니다.

  • OLM의 기본 원격 OperatorHub 소스를 비활성화합니다.
  • 완전한 인터넷 액세스가 가능한 워크스테이션을 사용하여 OperatorHub 콘텐츠의 로컬 미러를 생성하고 미러 레지스트리로 내보냅니다.
  • 기본 원격 소스가 아닌 미러 레지스트리의 로컬 소스에서 Operator를 설치하고 관리하도록 OLM을 구성합니다.

제한된 네트워크에서 OLM을 활성화한 후에는 제한되지 않은 워크스테이션을 계속 사용하여 최신 버전의 Operator가 출시될 때 로컬 OperatorHub 소스를 업데이트할 수 있습니다.

중요

OLM은 로컬 소스에서 Operator를 관리할 수 있지만 지정된 Operator를 제한된 네트워크에서 성공적으로 실행할 수 있는 기능은 다음 기준을 충족하는 Operator 자체에 따라 다릅니다.

  • Operator에서 기능을 수행하는 데 필요할 수 있는 관련 이미지 또는 기타 컨테이너 이미지를 CSV(ClusterServiceVersion) 오브젝트의 relatedImages 매개변수에 나열합니다.
  • 태그가 아닌 다이제스트(SHA)를 통해 지정된 모든 이미지를 참조합니다.

다음 선택 사항으로 필터링하여 Red Hat Ecosystem Catalog 에서 소프트웨어를 검색하여 연결이 끊긴 모드에서 실행을 지원하는 Red Hat Operator 목록을 검색할 수 있습니다.

유형

컨테이너화된 애플리케이션

배포 방법

Operator

인프라 기능

disconnected

4.9.1. 사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 OpenShift Container Platform 클러스터에 로그인합니다.
  • 기본 카탈로그를 정리하고 선택한 Operator 서브 세트만 미러링하려면 opm CLI를 설치합니다.
참고

IBM Z의 제한된 네트워크에서 OLM을 사용하는 경우 레지스트리를 배치하는 디렉터리에 12GB 이상을 할당해야 합니다.

4.9.2. 기본 OperatorHub 소스 비활성화

Red Hat 및 커뮤니티 프로젝트에서 제공하는 콘텐츠를 소싱하는 Operator 카탈로그는 OpenShift Container Platform을 설치하는 동안 기본적으로 OperatorHub용으로 구성됩니다. 제한된 네트워크 환경에서는 클러스터 관리자로서 기본 카탈로그를 비활성화해야 합니다. 그런 다음 로컬 카탈로그 소스를 사용하도록 OperatorHub를 구성할 수 있습니다.

절차

  • OperatorHub 오브젝트에 disableAllDefaultSources: true를 추가하여 기본 카탈로그의 소스를 비활성화합니다.

    $ oc patch OperatorHub cluster --type json \
        -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
작은 정보

또는 웹 콘솔을 사용하여 카탈로그 소스를 관리할 수 있습니다. 관리클러스터 설정구성OperatorHub 페이지에서 개별 소스를 생성, 삭제, 비활성화 및 활성화할 수 있는 소스 탭을 클릭합니다.

4.9.3. SQLite 기반 인덱스 이미지 필터링

Operator 번들 포맷을 기반으로 하는 인덱스 이미지는 Operator 카탈로그의 컨테이너화된 스냅샷입니다. 지정된 패키지 목록을 제외한 인덱스를 모두 필터링하거나 정리할 수 있습니다. 그러면 원하는 Operator만 포함하는 소스 인덱스의 사본이 생성됩니다.

제한된 네트워크 OpenShift Container Platform 클러스터에서 미러링된 콘텐츠를 사용하도록 OLM(Operator Lifecycle Manager)을 구성할 때는 기본 카탈로그에서 Operator 서브 세트만 미러링하려면 이 정리 방법을 사용하십시오.

이 절차의 단계에서 대상 레지스트리는 무제한 네트워크 액세스 권한을 사용하여 워크스테이션에서 액세스할 수 있는 기존 미러 레지스트리입니다. 이 예제에서는 기본 redhat-operators 카탈로그의 인덱스 이미지를 정리하는 방법도 보여주지만 프로세스는 모든 인덱스 이미지에서 동일합니다.

사전 요구 사항

  • 무제한 네트워크 액세스가 가능한 워크스테이션
  • podman 버전 1.9.3+
  • grpcurl (타사 명령줄 도구)
  • opm 버전 1.18.0 이상
  • Docker v2-2를 지원하는 레지스트리에 액세스

    중요

    OpenShift Container Platform 클러스터의 내부 레지스트리는 미러링 프로세스 중에 필요한 태그 없이 푸시를 지원하지 않으므로 대상 레지스트리로 사용할 수 없습니다.

절차

  1. registry.redhat.io로 인증합니다.

    $ podman login registry.redhat.io
  2. 대상 레지스트리로 인증합니다.

    $ podman login <target_registry>
  3. 정리된 인덱스에 포함하려는 패키지 목록을 결정합니다.

    1. 컨테이너에서 정리하려는 소스 인덱스 이미지를 실행합니다. 예를 들면 다음과 같습니다.

      $ podman run -p50051:50051 \
          -it registry.redhat.io/redhat/redhat-operator-index:v4.9

      출력 예

      Trying to pull registry.redhat.io/redhat/redhat-operator-index:v4.9...
      Getting image source signatures
      Copying blob ae8a0c23f5b1 done
      ...
      INFO[0000] serving registry                              database=/database/index.db port=50051

    2. 별도의 터미널 세션에서 grpcurl 명령을 사용하여 인덱스에서 제공하는 패키지 목록을 가져옵니다.

      $ grpcurl -plaintext localhost:50051 api.Registry/ListPackages > packages.out
    3. packages.out 파일을 검사하고 정리된 인덱스에 보관할 이 목록에 있는 패키지 이름을 확인합니다. 예를 들면 다음과 같습니다.

      패키지 목록 조각의 예

      ...
      {
        "name": "advanced-cluster-management"
      }
      ...
      {
        "name": "jaeger-product"
      }
      ...
      {
      {
        "name": "quay-operator"
      }
      ...

    4. podman run 명령을 실행한 터미널 세션에서 CtrlC를 눌러 컨테이너 프로세스를 중지합니다.
  4. 다음 명령을 실행하여 지정된 패키지를 제외한 소스 인덱스를 모두 정리합니다.

    $ opm index prune \
        -f registry.redhat.io/redhat/redhat-operator-index:v4.9 \1
        -p advanced-cluster-management,jaeger-product,quay-operator \2
        [-i registry.redhat.io/openshift4/ose-operator-registry:v4.9] \3
        -t <target_registry>:<port>/<namespace>/redhat-operator-index:v4.9 4
    1
    정리할 인덱스입니다.
    2
    쉼표로 구분된 보관할 패키지 목록입니다.
    3
    IBM Power 및 IBM Z 이미지에만 필요합니다. 대상 OpenShift Container Platform 클러스터 주 버전 및 부 버전과 일치하는 태그가 있는 Operator 레지스트리 기본 이미지입니다.
    4
    빌드 중인 새 인덱스 이미지에 대한 사용자 정의 태그입니다.
  5. 다음 명령을 실행하여 새 인덱스 이미지를 대상 레지스트리로 내보냅니다.

    $ podman push <target_registry>:<port>/<namespace>/redhat-operator-index:v4.9

    <namespace>는 레지스트리의 기존 네임스페이스입니다. 예를 들어 미러링된 콘텐츠를 모두 내보내기 위해 olm-mirror 네임스페이스를 생성할 수 있습니다.

4.9.4. Operator 카탈로그 미러링

연결이 끊긴 클러스터와 함께 사용하기 위해 Operator 카탈로그 미러링에 대한 자세한 내용은 설치 → 연결 해제된 설치를 위한 이미지 미러링을 참조하십시오.

4.9.5. 클러스터에 카탈로그 소스 추가

OpenShift Container Platform 클러스터에 카탈로그 소스를 추가하면 사용자를 위한 Operator를 검색하고 설치할 수 있습니다. 클러스터 관리자는 인덱스 이미지를 참조하는 CatalogSource 오브젝트를 생성할 수 있습니다. OperatorHub는 카탈로그 소스를 사용하여 사용자 인터페이스를 채웁니다.

사전 요구 사항

  • 인덱스 이미지를 빌드하여 레지스트리로 내보냈습니다.

프로세스

  1. 인덱스 이미지를 참조하는 CatalogSource 오브젝트를 생성합니다. oc adm catalog mirror 명령을 사용하여 카탈로그를 대상 레지스트리에 미러링한 경우 매니페스트 디렉터리에서 생성된 catalogSource.yaml 파일을 시작점으로 사용할 수 있습니다.

    1. 다음을 사양에 맞게 수정하고 catalogsource.yaml 파일로 저장합니다.

      apiVersion: operators.coreos.com/v1alpha1
      kind: CatalogSource
      metadata:
        name: my-operator-catalog 1
        namespace: openshift-marketplace 2
      spec:
        sourceType: grpc
        image: <registry>/<namespace>/redhat-operator-index:v4.9 3
        displayName: My Operator Catalog
        publisher: <publisher_name> 4
        updateStrategy:
          registryPoll: 5
            interval: 30m
      1
      레지스트리에 업로드하기 전에 콘텐츠를 로컬 파일에 미러링한 경우 오브젝트를 생성할 때 "잘못된 리소스 이름" 오류가 발생하지 않도록 metadata.name 필드에서 백슬래시(/) 문자를 제거합니다.
      2
      카탈로그 소스를 모든 네임스페이스의 사용자가 전역적으로 사용할 수 있도록 하려면 openshift-marketplace 네임스페이스를 지정합니다. 그러지 않으면 카탈로그의 범위가 지정되고 해당 네임스페이스에 대해서만 사용할 수 있도록 다른 네임스페이스를 지정할 수 있습니다.
      3
      인덱스 이미지를 지정합니다.
      4
      카탈로그를 게시하는 이름 또는 조직 이름을 지정합니다.
      5
      카탈로그 소스는 새 버전을 자동으로 확인하여 최신 상태를 유지할 수 있습니다.
    2. 파일을 사용하여 CatalogSource 오브젝트를 생성합니다.

      $ oc apply -f catalogSource.yaml
  2. 다음 리소스가 성공적으로 생성되었는지 확인합니다.

    1. Pod를 확인합니다.

      $ oc get pods -n openshift-marketplace

      출력 예

      NAME                                    READY   STATUS    RESTARTS  AGE
      my-operator-catalog-6njx6               1/1     Running   0         28s
      marketplace-operator-d9f549946-96sgr    1/1     Running   0         26h

    2. 카탈로그 소스를 확인합니다.

      $ oc get catalogsource -n openshift-marketplace

      출력 예

      NAME                  DISPLAY               TYPE PUBLISHER  AGE
      my-operator-catalog   My Operator Catalog   grpc            5s

    3. 패키지 매니페스트 확인합니다.

      $ oc get packagemanifest -n openshift-marketplace

      출력 예

      NAME                          CATALOG               AGE
      jaeger-product                My Operator Catalog   93s

이제 OpenShift Container Platform 웹 콘솔의 OperatorHub 페이지에서 Operator를 설치할 수 있습니다.

추가 리소스

4.9.6. SQLite 기반 인덱스 이미지 업데이트

사용자 정의 인덱스 이미지를 참조하는 카탈로그 소스를 사용하도록 OperatorHub를 구성하면 클러스터 관리자가 인덱스 이미지에 번들 이미지를 추가하여 클러스터에 사용 가능한 Operator를 최신 상태로 유지할 수 있습니다.

opm index add 명령을 사용하여 기존 인덱스 이미지를 업데이트할 수 있습니다. 제한된 네트워크의 경우 업데이트된 콘텐츠도 클러스터에 다시 미러링해야 합니다.

사전 요구 사항

  • opm 버전 1.18.0 이상
  • podman 버전 1.9.3+
  • 인덱스 이미지를 빌드하여 레지스트리로 내보냈습니다.
  • 기존 카탈로그 소스에서 인덱스 이미지를 참조합니다.

프로세스

  1. 번들 이미지를 추가하여 기존 인덱스를 업데이트합니다.

    $ opm index add \
        --bundles <registry>/<namespace>/<new_bundle_image>@sha256:<digest> \1
        --from-index <registry>/<namespace>/<existing_index_image>:<existing_tag> \2
        --tag <registry>/<namespace>/<existing_index_image>:<updated_tag> \3
        --pull-tool podman 4
    1
    --bundles 플래그는 인덱스에 추가할 추가 번들 이미지의 쉼표로 구분된 목록을 지정합니다.
    2
    --from-index 플래그는 이전에 내보낸 인덱스를 지정합니다.
    3
    --tag 플래그는 업데이트된 인덱스 이미지에 적용할 이미지 태그를 지정합니다.
    4
    pull-tool 플래그는 컨테이너 이미지를 가져오는 데 사용하는 툴을 지정합니다.

    다음과 같습니다.

    <registry>
    quay.io 또는 mirror.example. com 과 같은 레지스트리의 호스트 이름을 지정합니다.
    <namespace>
    ocs-dev 또는 abc 와 같은 레지스트리의 네임스페이스를 지정합니다.
    <new_bundle_image>
    ocs-operator 와 같이 레지스트리에 추가할 새 번들 이미지를 지정합니다.
    <digest>
    번들 이미지의 SHA 이미지 ID 또는 다이제스트를 지정합니다(예: c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41).
    <existing_index_image>
    이전에 내보낸 이미지를 지정합니다(예: abc-redhat-operator-index ).
    <existing_tag>
    이전에 푸시된 이미지 태그를 지정합니다(예: 4.9 ).
    <updated_tag>
    업데이트된 인덱스 이미지에 적용할 이미지 태그를 지정합니다(예: 4.9.1 ).

    명령 예

    $ opm index add \
        --bundles quay.io/ocs-dev/ocs-operator@sha256:c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41 \
        --from-index mirror.example.com/abc/abc-redhat-operator-index:4.9 \
        --tag mirror.example.com/abc/abc-redhat-operator-index:4.9.1 \
        --pull-tool podman

  2. 업데이트된 인덱스 이미지를 내보냅니다.

    $ podman push <registry>/<namespace>/<existing_index_image>:<updated_tag>
  3. Operator 카탈로그 미러링 절차에 있는 단계를 다시 수행하여 업데이트된 콘텐츠를 미러링합니다. 그러나 ICSP(ImageContentSourcePolicy) 오브젝트 생성에 대한 단계에 도달하면 oc create 명령 대신 oc replace 명령을 사용합니다. 예를 들면 다음과 같습니다.

    $ oc replace -f ./manifests-redhat-operator-index-<random_number>/imageContentSourcePolicy.yaml

    이 변경 사항은 오브젝트가 이미 존재하고 업데이트해야 하므로 필요합니다.

    참고

    일반적으로 oc apply 명령을 사용하여 이전에 oc apply를 사용하여 생성한 기존 오브젝트를 업데이트할 수 있습니다. 그러나 ICSP 오브젝트의 metadata.annotations 필드 크기와 관련하여 알려진 문제로 인해 현재 이 단계에 oc replace 명령을 사용해야 합니다.

  4. OLM(Operator Lifecycle Manager)이 정기적으로 카탈로그 소스에서 참조하는 인덱스 이미지를 자동으로 폴링하면 새 패키지가 성공적으로 추가되었는지 확인합니다.

    $ oc get packagemanifests -n openshift-marketplace