RedHat 오퍼레이터 번들 인증 프로세스

이 문서는 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 (오퍼레이터 요구 사항)
  • 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

리포지터리 포크

다음 중 하나를 fork해야 합니다:

현재 GitHub 사용자에 대해 fork해야 합니다.

배포 키 생성

빈 암호구문으로 SSH 키페어를 생성하십시오.

ssh-keygen -f certified-operators-key

fork된 리포지터리에 대해 Deploy Keys(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(opeartor-secrets.yaml)에서 찾기
export PYXIS_API_KEY_FILE=pyxis-key-operator-bundle.txt

# fork된 리포지터리의 배포 키(섹션 "리포지터리 포크" 참조)
# 또는 'gl-distribution-oc'을 사용하는 경우 - 1Password(깃허브 오퍼레이터 인증 전용 키)에서 얻기
export SSH_KEY_FILE=gl-distribution-oc/gl-distribution-oc-deploy

# fork된 리포지터리의 GitHub API 키(섹션 "리포지터리 포크" 참조)
# 또는 'gl-distribution-oc'을 사용하는 경우 - 1Password(깃허브 오퍼레이터 인증 API 토큰)에서 얻기
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로 이동하여 새로운 (“classic”) 토큰을 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 토큰 찾기
  • Pyxis API 토큰 ($PYXIS_API_KEY_FILE)은 RedHat에서 가져와야 합니다.
    • 1Password: operator-secrets.yaml에서 추출해야 합니다.
  • SSH 키페어 ($SSH_KEY_FILE - 비공개 키 파일)
    • fork된 프로젝트에 “배포 키”로 추가되었습니다.
    • 1Password: 깃허브 배포 키 찾기

참고 파일 $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

포크된 리포지터리로 변경 내용 복사 및 푸시

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

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

이렇게 하면 업스트림 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