第8章 Bridge Operator でRed Hat QuayをOpenShiftに統合する


Quay Bridge Operator を使用すると、OpenShift の統合コンテナレジストリを Red Hat Quay レジストリで置き換えることができます。これにより、統合されたOpenShiftレジストリは、ロールベースのアクセスコントロール(RBAC)機能が強化された、可用性の高いエンタープライズグレードのRed Hat Quayレジストリになります。

Bridge Operatorの主な目的は、統合されたOpenShiftレジストリの機能を、新しいRed Hat Quayレジストリに複製することです。このオペレーターで可能な機能は以下の通りです。

  • Red Hat Quay の組織として OpenShift の名前空間を同期させます。

    • デフォルトネームスペースのサービスアカウントごとのロボットアカウントの作成
    • 作成されたロボットアカウントごとにシークレットを作成(各ロボットシークレットをサービスアカウントにMountableとImage Pull Secretとして関連付ける)。
    • OpenShiftのImageStreamをQuayのリポジトリとして同期させる
  • Red Hat Quay に出力するために ImageStream を使用して新しいビルドを自動的に書き換えます。
  • ビルドが完了すると自動的にImageStreamタグをインポートする

この手順をQuay Bridge Operatorで使用すると、Red Hat QuayとOpenShiftクラスター間の双方向通信が可能になります。

警告

Quay Bridge Operator から同じ Red Hat Quay インスタンスを指している OpenShift Container Platform クラスタを複数にすることはできません。そうすると、2つのクラスターに同じ名前の名前空間を作ることができなくなります。

8.1. Quay Bridge Operator の実行

8.1.1. 前提条件

Bridge Operatorをセットアップする前に、以下のものを用意してください。

  • スーパーユーザー権限を持つ既存の Red Hat Quay 環境
  • クラスタ管理者権限を持つRed Hat OpenShift Container Platform環境(4.2以降を推奨)。
  • OpenShiftのコマンドラインツール(ocコマンド)

8.1.2. OpenShiftとRed Hat Quayのセットアップと設定

Red Hat QuayとOpenShiftの両方の設定が必要です。

8.1.2.1. Red Hat Quay のセットアップ

Red Hat Quay の専用組織を作成し、その組織内で作成した新規アプリケーションから、OpenShift の Quay Bridge Operator で使用する OAuth トークンを生成します。

  1. スーパーユーザー権限を持つユーザーとしてRed Hat Quayにログインし、外部アプリケーションを設定する組織を選択します。
  2. 左のナビゲーションで Applications を選択します。
  3. Create New Applicationを選択し、新しいアプリケーションの名前を入力します(例: openshift)。
  4. 新しいアプリケーションが表示された状態で、それを選択します。
  5. 左側のナビゲーションでGenerate Tokenを選択し、新しいOAuth2トークンを作成します。
  6. すべてのチェックボックスを選択して、統合に必要なアクセスを許可します。
  7. 割り当てられた権限を確認し、Authorize Applicationを選択して確認します。
  8. 生成されたAccess Tokenは、次のセクションで使用するためにコピーして保存します。

8.1.2.2. OpenShift のセットアップ

Quay Bridge OperatorにOpenShiftをセットアップするには、以下のようないくつかのステップが必要です。

  • OpenShiftシークレットの作成: Quayで先に作成したOAuthトークンを使って、OpenShiftシークレットを作成します。
  • MutatingWebhookConfiguration のサポートを追加: OpenShift と Red Hat Quay の統合をサポートするために、新しい Build リクエストをインターセプトして、OpenShift の統合レジストリではなく Red Hat Quay をターゲットにするように出力を変更できるようにします。

OpenShift の典型的なビルドプロセスの一部として実行される API リクエストの動的な傍受のサポートは、MutatingWebhookConfiguration によって促進されます。MutatingWebhookConfigurationは、特定のAPIリクエストを受信したときに、OpenShift上のプロジェクト内で実行されているAPIを起動することができます。

Kubernetesでは、Webhookエンドポイントがクラスタの証明機関を利用した証明書を用いてSSLで保護されている必要があります。幸いなことに、OpenShiftはクラスタで署名された証明書の生成をサポートしています。

  1. OpenShiftocコマンドラインツールを使用して、クラスタ管理者として OpenShift にログインします。
  2. openshift-operatorsなど、使用するOpenShiftネームスペースを選択するか、新しいネームスペースを作成します。
  3. OpenShiftのシークレットを作成し、<access_token>を先ほどRed Hat Quayから取得したAccess Tokenに置き換えます。例えば、これはあなたの<access_token>を使ってquay-integrationというシークレットをtokenというキーで作成します。

    $ oc create secret generic quay-integration --from-literal=token=<access_token>
    Copy to Clipboard Toggle word wrap

    その結果、新たに作成された秘密鍵と証明書が、指定された秘密の中に配置されます。シークレットは、Operatorのデプロイメントでの宣言の通りに、オペレーター内の適切な場所にマウントされます。

  4. OperatorのWebhookエンドポイントのServiceを作成します。

    quay-webhook.yaml

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: quay-bridge-operator
      name: quay-bridge-operator
      namespace: openshift-operators
    spec:
      ports:
        - name: https
          port: 443
          protocol: TCP
          targetPort: 8443
      selector:
        name: quay-bridge-operator
      sessionAffinity: None
      type: ClusterIP
    Copy to Clipboard Toggle word wrap

  5. 次のようにWebhookサービスを作成します。

    $ oc create -f quay-webhook.yaml
    Copy to Clipboard Toggle word wrap
  6. webhook-create-signed-cert.shスクリプトをダウンロードして、Kubernetes認証局で署名された証明書を生成するために使用できるようにします。
  7. 以下のコマンドを実行して、証明書を要求します。

    $ ./webhook-create-signed-cert.sh --namespace openshift-operators \
       --secret quay-bridge-operator-webhook-certs \
       --service quay-bridge-operator
    Copy to Clipboard Toggle word wrap
  8. 以下のコマンドを実行してCAを取得し、その結果を1行にまとめてMutatingWebhookConfigurationリソースに入力できるようにします。

    $ oc get configmap -n kube-system \
       extension-apiserver-authentication \
       -o=jsonpath='{.data.client-ca-file}' | base64 | tr -d '\n'
    Copy to Clipboard Toggle word wrap
  9. 以下のMutatingWebhookConfigurationのYAMLで、${CA_BUNDLE}変数を置き換えてください。

    quay-mutating-webhook.yaml

    apiVersion: admissionregistration.k8s.io/v1beta1
    kind: MutatingWebhookConfiguration
    metadata:
      name: quay-bridge-operator
    webhooks:
      - name: quayintegration.redhatcop.redhat.io
        clientConfig:
          service:
            namespace: openshift-operators
            name: quay-bridge-operator
            path: "/admissionwebhook"
          caBundle: "${CA_BUNDLE}" 
    1
    
        rules:
        - operations:  [ "CREATE" ]
          apiGroups: [ "build.openshift.io" ]
          apiVersions: ["v1" ]
          resources: [ "builds" ]
        failurePolicy: Fail
    Copy to Clipboard Toggle word wrap

    1
    ${CA_BUNDLE}を前のステップの出力で置き換えます。これは、${CA_BUNDLE}を置き換えるためにコピー&ペーストする1つの長い行として表示されます。
  10. 以下のようにMutatingWebhookConfigurationを作成します。

    $ oc create -f quay-mutating-webhook.yaml
    Copy to Clipboard Toggle word wrap

    オペレータが動作するまでは、MutatingWebhookConfigurationが呼び出すWebサーバが利用できず、オブジェクトをetcdに永続化するために適切なisレスポンスが必要となるため、ビルドに対する新しいリクエストは失敗します。

  11. OpenShiftのコンソールに移動し、以下のようにQuay Bridge Operatorをインストールします。

    • OperatorHubを選択し、Quay Bridge Operatorを検索します。
    • インストールを選択します。
    • インストールモード(全ネームスペース)、アップデートチャンネル、承認方法(自動または手動)を選択します。
    • Subscribe を選択します。
  12. QuayIntegrationというカスタムリソース(CR)を作成します。例:

    quay-integration.yaml

    apiVersion: redhatcop.redhat.io/v1alpha1
    kind: QuayIntegration
    metadata:
      name: example-quayintegration
    spec:
      clusterID: openshift  
    1
    
      credentialsSecretName: openshift-operators/quay-integration 
    2
    
      quayHostname: https://<QUAY_URL>   
    3
    
      whitelistNamespaces: 
    4
    
        - default
      insecureRegistry: false 
    5
    Copy to Clipboard Toggle word wrap

    1
    clusterIDの値は、エコシステム全体で一意でなければなりません。この値はオプションで、デフォルトではopenshiftが使用されます。
    2
    credentialsSecretNameには、openshift-operators/quay-integrationを名前空間の名前と、先に作成したトークンを含むシークレットに置き換えます。
    3
    QUAY_URL を Red Hat Quay インスタンスのホスト名に置き換えてください。
    4
    whitelistNamespacesはオプションです。使用しない場合、Bridge Operatorはopenshiftの接頭辞を持つプロジェクトを除くすべての名前空間をRed Hat Quayに同期します。この例では、ホワイトリストのネームスペース(デフォルト)に、Red Hat Quay の組織が関連付けられています。ここでは、好きな名前空間を使用してください。
    5
    Quayが自己署名証明書を使用している場合、プロパティinsecureRegistry: trueを設定します。

    その結果、Red Hat Quay内の組織は、OpenShiftの関連する名前空間のために作成する必要があります。

  13. 以下のようにQuayIntegrationを作成します。

    $ oc create -f quay-integration.yaml
    Copy to Clipboard Toggle word wrap

この時点でQuayの統合リソースが作成され、OpenShiftクラスタとRed Hat Quayインスタンスがリンクされます。

作成したホワイトリストの名前空間には、Red Hat Quay の組織があるはずです。oc new-appのようなコマンドを使用してその名前空間に新しいアプリケーションを作成すると、内部レジストリを使用する代わりに、新しい Red Hat Quay リポジトリが作成されます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat