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 (オペレーション要件)
  • OpenShiftパイプライン(認証パイプライン要件)
  • (オプション)external-dns (CIでは必須)

OpenShift-プロビジョニングパイプライン

新しいOpenShiftクラスターをプロビジョニングする1つの方法は、OpenShift-provisioningパイプラインを使用することです。

パイプラインは、クラスターの認証情報と必要なバイナリを含む便利なアーティファクトを作成します。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 UI を使ってフォークを作成します。

デプロイキーの作成

空のパスフレーズでSSHキーペアを作成します:

ssh-keygen -f certified-operators-key

for forked repo createDeploy Keys (Settings/Deploy keys/Add new for the repo)

を追加しcertified-operators-key.pub

環境設定

上記のいくつかの設定と後で必要になる設定を使って、Shellセットアップ用のmy.env ファイルを作成すると便利です:

VERSION="0.11.0"
# Pipeline
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

# Generate Pyxis API key in RH Connect portal, or locate one in
# 1Password (operator-secrets.yaml)
export PYXIS_API_KEY_FILE=pyxis-key-operator-bundle.txt

# Deployment key for the forked repo (see "Fork repo" section)
# alternatively, is using 'gl-distribution-oc' - obtain from
# 1Password (GitHub Operator Certification deploy key)
export SSH_KEY_FILE=gl-distribution-oc/gl-distribution-oc-deploy

# GitHub API key for the forked repo (see "Fork repo" section)
# alternatively, is using 'gl-distribution-oc' - obtain from
# 1Pasword (GitHub Operator Certification API token)
export GITHUB_TOKEN_FILE=gl-distribution-oc/gh-token.txt 

# Below section is written assuming 'gl-distribution-oc' GitHub user
# if using different GitHub account - adjust accordingly
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}"

# Path within upstream repo to operator bundle
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 - 秘密鍵ファイル)
    • フォークしたプロジェクトに「デプロイ鍵」として追加
    • 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 の値が必要です):

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