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 프로비저닝 파이프라인을 사용하는 것입니다.

파이프라인은 클러스터에 대한 인증 정보뿐만 아니라 모든 필요한 바이너리를 포함하는 편리한 아티팩트를 생성합니다. deploy_cluster 작업에 의해 생성된 아티팩트를 포함하는 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 사용자를 위해.

GitHub UI를 사용하여 포크를 만듭니다.

배포 키 생성

비밀번호를 비워둔 SSH 키파일을 만듭니다:

ssh-keygen -f certified-operators-key

포크된 리포지토리를 위해 배포 키를 만듭니다 (Settings/Deploy keys/Add new for the repo)

그리고 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}"

# upstream 리포지토리 내의 연산자 번들 경로 
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로 이동하여 Settings 탭을 엽니다.

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 PREVIOUS_OPERATOR_VERSION="x.y.z" \
    redhat/operator-certification/scripts/configure_bundle.sh adjust_annotations adjust_csv

변경 사항 복사 및 푸시

이 단계에서 번들을 새 위치로 복사해야 합니다 (CATALOG_REPO_CLONE의 값을 fork repo에서 찾아야 합니다.):

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 "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'

를 받는 경우 - Secrets 중 하나에 원치 않는 새 줄이 포함됨: pyxis-api-secret 또는 github-api-token, 오류의 내용이 어떤 것인지 확인하여 결정해야 합니다.

정리

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

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