본문 바로가기
Linux/OpenShift

RHOCP) Disconnected OperatorHub 구성

by LILO 2023. 7. 28.
반응형

INTRO

RHOCP를 구축 후 Operator를 이용하여 원하는 SW를 설치 시 OperatorHub가 사용됩니다.

기본 설정은 인터넷이 되는 환경에서 동작합니다. 보통 RHOCP를 운영하는 환경은 인터넷이 되지 않는 폐쇄망일 경우가 높기 때문에 Disconnected OperatorHub를 구성해야 합니다.

 

Registry Image를 미러링 할 때 사용되는 oc-mirror에 대한 자세한 내용은 아래의 글을 참고 바랍니다.

 

How oc-mirror will help you reduce container management complexity

This tutorial will show you how to create a configuration to pull an operator from the Red Hat OpenShift 4.9 operator catalog, mirror it to disk, and publish it to a remote container image registry.

content.cloud.redhat.com

oc-mirror 플러그인을 이용하여 Private Registry로 미러링할 때 아래의 문서를 보고 참고하였습니다.

 

Mirroring images for a disconnected installation using the oc-mirror plugin - Disconnected installation mirroring | Installing |

While mirroring OpenShift Container Platform releases, Operator catalogs, and additional images from a registry to a partially disconnected cluster, you can include Operator catalog images from a local file-based catalog on disk. The local catalog must be

docs.openshift.com

 

 

 

Disconnected OperatorHub 구성

RedHat에서 기본적으로 제공하는 OperatorHub의 CatalogSource를 비활성화하는 작업을 합니다.

# oc patch OperatorHub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'

# oc get operatorhub cluster -o jsonpath={.spec."disableAllDefaultSources"}
true

Image Registry 서버가 Docker로 구성된 경우 podman 명령을 실행 시 docker 명령어가 수행될 수 있게 alias 작업을 해줍니다.  (podman으로 설치되어 있을 경우 아래의 alias 작업을 하지 않아도 됨)

oc-mirror 명령어 수행 시 docker가 아닌 podman으로 실행되기 때문에 Alias 작업은 필수로 해야 됩니다. 

# alias podman='docker'

oc-mirror plugin을 설치합니다.

※oc-mirror: 레지스트리 이미지를 미러링 할 때 사용하는 OpenShit CLI Tool

# curl -LO https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable/oc-mirror.tar.gz
# tar xzf oc-mirror.tar.gz
# chmod +x ./oc-mirror
# mv ./oc-mirror /usr/local/bin/

RedHat Registry에서 사용할 수 있는 Image Catalog를 조회합니다.

# podman login registry.redhat.io

# oc-mirror list operators --catalogs --version=4.13
Available OpenShift OperatorHub catalogs:
OpenShift 4.13:
registry.redhat.io/redhat/redhat-operator-index:v4.13
registry.redhat.io/redhat/certified-operator-index:v4.13
registry.redhat.io/redhat/community-operator-index:v4.13
registry.redhat.io/redhat/redhat-marketplace-index:v4.13

RedHat OperatorHub의 Image Catalog에서 사용 가능한 Operator 리스트를 파일로 저장합니다.

# oc-mirror list operators --catalog=harbor.example.com:443/ocp4/redhat-operator-index:v4.13 > package.out


<Disconnected 환경으로 옮기기>
# podman login harbor.example.com:443
# podman pull registry.redhat.io/redhat/redhat-operator-index:v4.13
# podman save -o redhat-operator-index_v4.13.tar
# podman load -i redhat-operator-index_v4.13.tar
# podman tag registry.redhat.io/redhat/redhat-operator-index:v4.13  harbor.example.com:443/ocp4/redhat-operator-index:v4.13
# podman push harbor.example.com:443/ocp4/redhat-operator-index:v4.13

필요한 Operator를 grep 명령어를 통해 조회합니다.

# egrep -i "NAME|cluster-logging|servicemesh|jaeger|OpenShift\ Virtualization|elastic|odf-operator|metallb|gitops|pipelines|NMState|kiali|sriov"  package.out
NAME                                          DISPLAY NAME                                             DEFAULT CHANNEL
cluster-logging                               Red Hat OpenShift Logging                                stable
elasticsearch-operator                        OpenShift Elasticsearch Operator                         stable
jaeger-product                                Red Hat OpenShift distributed tracing platform           stable
kubernetes-nmstate-operator                   Kubernetes NMState Operator                              stable
kubevirt-hyperconverged                       OpenShift Virtualization                                 stable
metallb-operator                              MetalLB Operator                                         stable
odf-operator                                  OpenShift Data Foundation                                stable-4.13
openshift-gitops-operator                     Red Hat OpenShift GitOps                                 latest
openshift-pipelines-operator-rh               Red Hat OpenShift Pipelines                              latest
servicemeshoperator                           Red Hat OpenShift Service Mesh                           stable
kiali-ossm                                    Kiali Operator                                           stable
sriov-network-operator                        SR-IOV Network Operator                                  stable

앞에서 조회한 Operator의 이름과 Channel 버전을 기반으로 Image Config yaml을 작성합니다.

Operator에 포함되는 Image를 미러링할 때 정의 파일입니다.

설정 설명
skipTLS TLS 검증 건너뜀 (사설 인증서 사용시 true)
name Operator 이름
Channels.name Operator Channel 버전
# mkdir /root/olm_image

# cat << EOF > /root/olm_image/imageset-config.yaml
apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
 registry:
   imageURL: harbor.example.com:443/olm/metadata
   skipTLS: true
mirror:
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.13
      packages:
        - name: cluster-logging
          channels:
            - name: stable
        - name: elasticsearch-operator
          channels:
            - name: stable
        - name: sriov-network-operator
          channels:
            - name: stable
        - name: servicemeshoperator
          channels:
            - name: stable
        - name: kiali-ossm
          channels:
            - name: stable
        - name: jaeger-product
          channels:
            - name: stable
        - name: kubernetes-nmstate-operator
          channels:
            - name: stable
        - name: kubevirt-hyperconverged
          channels:
            - name: stable
        - name: metallb-operator
          channels:
            - name: stable
        - name: openshift-pipelines-operator-rh
          channels:
            - name: latest
        - name: openshift-gitops-operator
          channels:
            - name: latest
        - name: ocs-client-operator
          channels:
            - name: stable-4.13
        - name: odf-operator
          channels:
            - name: stable-4.13
EOF

 앞에서 작성한 ImageSetConfiguration yaml을 기반으로 Reigstry로 미러링을 시작합니다.

# cd /root/olm_image
# oc mirror --config=/root/olm_image/imageset-config.yaml docker://harbor.example.com:443/olm  --dest-skip-tls

미러링이 완료되면 mirror log를 열어서 Mirroring completed를 확인합니다

# cat /root/olm_image/.oc-mirror.log
..(생략)
sha256:e5dc6c93de956ad1d090f48062336b029409ccee19f7f0306df35f089cd6bf61 harbor.example.com:443/olm/openshift-pipelines/pipelines-rhel8-operator
sha256:4f7ff99b3caee122bc067e780552c08a2503788ce9e91e55177a3b287d7514c9 harbor.example.com:443/olm/openshift-pipelines/pipelines-rhel8-operator:4a5241cb
info: Mirroring completed in 17m22.22s (51.88MB/s)
Rendering catalog image "harbor.example.com:443/olm/redhat/redhat-operator-index:v4.13" with file-based catalog
Writing image mapping to oc-mirror-workspace/results-1689178009/mapping.txt
Writing CatalogSource manifests to oc-mirror-workspace/results-1689178009
Writing ICSP manifests to oc-mirror-workspace/results-1689178009

ImageContentSourcePolicy를 적용하기 위해 이전에 위의 로그에서 확인한  "/root/ocp_image/oc-mirror-workspace/results-1689178009" 경로에서 ImageContentSourcePolicy.yaml 파일을 적용합니다.

※ ImageContentSourcePolicy: Public 이미지 레지스트리에서 Private Registry로 맵핑할때 사용하는 정책

# oc create -f /root/olm_image/oc-mirror-workspace/results-1689178009/imageContentSourcePolicy.yaml

 

CatalogSource를 확인하여 Operator Catalog Image가 Private Registy의 이미지가 맞는지 확인하고 metadata.name을 변경하여 Display name 이름을 지정할 수 있습니다.

# vi /root/olm_image/oc-mirror-workspace/results-1689178009/catalogSource-redhat-operator-index.yaml
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: redhat-operator-index-ocptb
  namespace: openshift-marketplace
spec:
  image: harbor.example.com:443/olm/redhat/redhat-operator-index:v4.13
  sourceType: grpc

CatalogSource를 반영합니다.

# oc create -f /root/olm_image/oc-mirror-workspace/results-1689178009/catalogSource-redhat-operator-index.yaml

CatalogSource와 Operator 목록이 정상적으로 반영되었는지 확인합니다.

# oc get catalogsource -n openshift-marketplace
NAME                          DISPLAY   TYPE   PUBLISHER   AGE
redhat-operator-index-ocptb             grpc               2m11s


# oc get packagemanifest -n openshift-marketplace
NAME                              CATALOG   AGE
odf-operator                                2m21s
openshift-pipelines-operator-rh             2m21s
ocs-operator                                2m21s
ocs-client-operator                         2m21s
servicemeshoperator                         2m21s
mcg-operator                                2m21s
metallb-operator                            2m21s
elasticsearch-operator                      2m21s
cluster-logging                             2m21s
sriov-network-operator                      2m21s
jaeger-product                              2m21s
openshift-gitops-operator                   2m21s
kubevirt-hyperconverged                     2m21s
kiali-ossm                                  2m21s
kubernetes-nmstate-operator                 2m21s
odf-csi-addons-operator                     2m21s

 

웹 콘솔에 접속하여 OperatorHub를 확인합니다. 이전에 적용한 CatalogSource 이름을 확인할 수 있습니다.

반응형