RedHat Operator Bundle 인증 프로세스

이 문서는 RedHat Marketplace를 위한 OLM 번들 제출을 위한 인증 프로세스를 개요합니다. 이는 Red Hat Software Certification Workflow Guide를 기반으로 합니다.

아래 프로세스는 전체 설정에 대해 인증합니다.

사전 요구 사항

  1. GitHub 계정이 필요합니다.
    1. 개인 계정을 사용할 수 있습니다.
    2. 서비스 계정(예: gl-distribution-oc)을 사용할 수 있습니다.
      1. 적절한 작업을 위해 SSH 키 페어가 필요합니다.
      2. 편리를 위해 operator_certification.sh를 사용할 수 있습니다 (gldoc_github를 자신의 키 이름으로 바꿉니다):

         #!/bin/sh
         OC_SSH_KEYFILE=${OC_SSH_KEYFILE:-"${HOME}/.ssh/gldoc_github"}
         export GIT_SSH_COMMAND="ssh -i ${OC_SSH_KEYFILE} -o IdentitiesOnly=yes"
         exec $@
        
  2. olm-bundle.sh 사전 요구 사항:
    1. task
    2. operator-sdk
    3. yq
    4. opm

OpenShift 클러스터 프로비저닝

기존 클러스터를 확인하십시오. 이미 설정된 클러스터가 있을 수 있습니다.

기존 OpenShift 클러스터가 필요합니다. 이미 프로비저닝된 OpenShift 클러스터를 사용하는 경우 단계를 조정하세요. 클러스터에 설치해야 할 필수 구성 요소:

  • cert-manager (Operator 필수 사항)
  • OpenShift Pipelines (인증 파이프라인 요구사항)
  • (옵션) external-dns (CI에서 필수입니다)

OpenShift 프로비저닝 파이프라인

새로운 OpenShift 클러스터를 프로비저닝하는 한 가지 방법은 OpenShift 프로비저닝 파이프라인을 사용하는 것입니다.

파이프라인은 클러스터에 대한 인증 정보와 모든 필요한 이진 파일을 포함하는 편리한 artifact를 생성합니다. deploy_cluster 작업에서 생성된 artifact의 Zip 파일을 다운로드하여 편리한 위치(${HOME}/mycluster)에 압축 해제합니다.

BASEDIR=${HOME}/mycluster
OC=${BASEDIR}/bin/oc-x.y.z
TKN=${BASEDIR}/bin/tkn
KUBECONFIG=${BASEDIR}/x.y.z/auth/kubeconfig
export OC TKN KUBECONFIG

수동 프로비저닝

새 클러스터를 프로비저닝하려면 OpenShift 설치 문서를 따르세요. 다음 사항을 추출하고 보전하세요:

OC=/path/to/oc
TKN=/path/to/tkn
KUBECONFIG=/path/to/kubeconfig
export OC TKN KUBECONFIG

리포지토리 포크

다음 중 하나를 포크해야 합니다:

현재의 GitHub 사용자를 위해 사용하세요.

배포 키 생성

빈 암호구문으로 SSH 키 페어를 생성하세요:

ssh-keygen -f certified-operators-key

포크한 리포지토리를 위해 Deploy Keys를 생성하세요 (Settings/Deploy keys/Add new을 클릭하여 해당 리포지토리에 추가하세요) 그리고 certified-operators-key.pub를 추가하세요.

환경 설정

위의 설정과 나중에 필요한 설정을 사용하여 쉘 설정을 위해 my.env 파일을 생성하는 것이 유용할 수 있습니다:

VERSION="0.11.0"
# 파이프라인
export KUBECONFIG=/path/to/secure/location/kubeconfig

CLUSTER_DIR=/path/to/clusters/clusterX
export OC=${CLUSTER_DIR}/bin/oc-x.y.z
export TKN=${CLUSTER_DIR}/bin/tkn

# RH Connect 포털에서 Pyxis API 키를 생성하거나 1Password(operator-secrets.yaml)에서 찾으세요
export PYXIS_API_KEY_FILE=pyxis-key-operator-bundle.txt

# 포크된 리포지토리에 대한 배포 키(위의 "리포지토리 포크" 섹션 참조)
# 대안으로 'gl-distribution-oc'를 사용하는 경우 1Password(GitHub Operator Certification deploy key)에서 얻으세요
export SSH_KEY_FILE=gl-distribution-oc/gl-distribution-oc-deploy

# 포크된 리포지토리에 대한 GitHub API 키(위의 "리포지토리 포크" 섹션 참조)
# 대안으로 'gl-distribution-oc'를 사용하는 경우 1Password(GitHub Operator Certification API token)에서 얻으세요
export GITHUB_TOKEN_FILE=gl-distribution-oc/gh-token.txt

# 아래 섹션은 'gl-distribution-oc' GitHub 사용자를 기준으로 작성되었습니다
# 다른 GitHub 계정을 사용하는 경우에는 해당 설정을 조정하세요
export GIT_USERNAME="gl-distribution-oc"
export GIT_EMAIL="dmakovey+operator-certification@gitlab.com"
export GIT_FORK_REPO_URL="git@github.com:gl-distribution-oc/certified-operators.git"
export GIT_BRANCH="gitlab-operator-kubernetes-${VERSION}"

# 상위 스트림 리포지토리 내의 오퍼레이터 번들 경로
export OPERATOR_BUNDLE_PATH="operators/gitlab-operator-kubernetes/${VERSION}"

참고 여기에서는 기본적으로 gl-distribution-oc 사용자를 사용합니다. 다른 사용자로 설정하려면 위의 설정을 조정하세요.

다음 명령을 실행하기 전에 반드시 my.env 파일을 소스로 지정합니다:

source my.env

OpenShift 클러스터 설정

redhat/operator-certification/scripts/operator_certification_pipeline.sh \
  create_cluster_infra

redhat/operator-certification/scripts/install_oco.sh create_manifest \
  apply_manifest

저장소 설정

API 토큰 (PAT) 생성

GitHub에서 프로필 설정으로 이동하여 Developer settings/Personal access tokens로 이동하고 repo 범위로 새로운(“클래식”) 토큰을 생성합니다. 이를 안전한 위치의 로컬 파일(${HOME}/secure/github_api_token.txt)에 저장합니다.

참고 이 시점에서 이 토큰은 GitHub 사용자의 모든 저장소에 액세스할 수 있습니다.

저장소 복제

REPO_HOME=${HOME}
pushd ${REPO_HOME}
git clone git@github.com:<YOUR-GITHUB-ACCOUNT>/certified-operators.git
git checkout -b gitlab-operator-kubernetes-${VERSION}
popd

향후 참조를 위해 환경변수 CATALOG_REPO_CLONE을 추가합니다:

export CATALOG_REPO_CLONE=${REPO_HOME}/certified-operators

RedHat Connect 포털에서 프로젝트 설정

Gitlab Operator Bundle로 이동한 후 설정 탭을 엽니다.

GitHub 사용자를 Authorized GitHub user accounts에 추가합니다.

파이프라인 설정

사전 요구 사항

  • 프로비저닝된 OpenShift 클러스터가 있어야 합니다:
    • 연결된 kubeconfig 파일($KUBECONFIG)
    • 연결된 tkn 이진 파일($TKN)
    • 연결된 oc 이진 파일($OC)
  • GitHub PAT($GITHUB_TOKEN_FILE)
    • 1Password: GitHub API 토큰 참조
  • RedHat에서 얻은 Pyxis API 토큰($PYXIS_API_KEY_FILE)
    • 1Password: operator-secrets.yaml에서 추출해야 함
  • SSH 키 쌍($SSH_KEY_FILE - 개인 키 파일)
    • fork된 프로젝트에 “배포 키”로 추가되어 있어야 함
    • 1Password: GitHub 배포 키 참조

참고 $GITHUB_TOKEN_FILE$PYXIS_API_KEY_FILE 파일이 줄 바꿈 문자(0x0a)를 포함하지 않도록 합니다:

hexdump -C $GITHUB_TOKEN_FILE
hexdump -C $PYXIS_API_KEY_FILE

그런 다음 시크릿을 생성하고 파이프라인을 설치합니다:

GITHUB_TOKEN_FILE=/path/to/github_token.txt \
  PYXIS_API_KEY_FILE=/path/to/pyxis_api_key.txt \
  SSH_KEY_FILE=/path/to/certified-operators-key \
  KUBECONFIG="${BASEDIR}/auth/kubeconfig" \
  redhat/operator-certification/scripts/operator_certification_pipeline.sh create_secrets install_pipeline_automated create_workspace_template

번들 생성

OSDK_BASE_DIR=".build/cert" \
    DOCKER="podman" \
    OLM_PACKAGE_VERSION=${VERSION} \
    OPERATOR_TAG=${VERSION} \
    scripts/olm_bundle.sh build_manifests generate_bundle patch_bundle

제출용 번들 주석 달기

BUNDLE_DIR=.build/cert/bundle \
    redhat/operator-certification/scripts/configure_bundle.sh adjust_annotations adjust_csv

변경 사항 복사 및 푸시

이 시점에서 번들을 새 위치로 복사해야 합니다 (CATALOG_REPO_CLONE 값을 fork된 저장소에서 필요합니다):

cp -r .build/cert/bundle ${CATALOG_REPO_CLONE}/operators/gitlab-operator-kubernetes/${VERSION}
( cd ${CATALOG_REPO_CLONE} && git add operators/gitlab-operator-kubernetes/${VERSION} \
   && git commit -am "Add gitlab-operator-${VERSION}" \
   && git push origin gitlab-operator-kubernetes-${VERSION})

인증 파이프라인 실행

이 단계에서는 GitHub 사용자 이름 및 이메일을 얻어야 하며 각각 GIT_USERNAMEGIT_EMAIL에 사용해야 합니다.

redhat/operator-certification/scripts/operator_certification_pipeline.sh \
  run_certification_pipeline_automated

이렇게 하면 upstream PR이 생성되고 RH 포털에서 제출이 열립니다.

참고 출력에 아래 내용이 표시되면

ValueError: Invalid header value b'Bearer XXXXXXXXXXXXXXXXXXXXXXX\n'
  • 어느 시크릿에 원치 않는 줄바꿈이 포함되어 있는 것으로 보입니다: pyxis-api-secret 또는 github-api-token. 오류 내용을 통해 어떤 것인지 확인할 수 있습니다.

정리

파이프라인이 완료된 후에는 개인 중심의 시크릿을 삭제하는 것이 좋습니다:

redhat/operator-certification/scripts/operator_certification_pipeline.sh cleanup_secrets