第9章 Bridge Operator で Red Hat Quay を OpenShift に統合


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

Bridge Operator の主な目的は、統合 OpenShift レジストリーの機能を新規の Red Hat Quay レジストリーに複製することです。この Operator で有効にされている機能には以下が含まれます。

  • OpenShift namespace を Red Hat Quay の組織として同期します。

    • 各デフォルト namespace サービスアカウント用のロボットアカウントの作成
    • 作成された各ロボットアカウントのシークレットの作成 (各ロボットシークレットをマウント可能なイメージプルシークレットとしてサービスアカウントに関連付ける)
    • 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 つのクラスターに同じ名前の namespace を作成できなくなります。

9.1. Quay Bridge Operator の実行

9.1.1. 前提条件

Bridge Operator をセットアップする前に、以下を有効にしておく必要があります。

  • スーパーユーザーパーミッションを持つ既存の Red Hat Quay 環境
  • クラスター管理者パーミッションのある Red Hat OpenShift Container Platform 環境 (4.2 以降のバージョンを推奨)
  • OpenShift コマンドラインツール (oc コマンド)

9.1.2. OpenShift Red Hat Quay のセットアップおよび設定

Red Hat Quay および OpenShift 設定の両方が必要です。

9.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. 次のセクションで使用する生成されたアクセストークンをコピーして保存します。

9.1.2.2. OpenShift セットアップ

Quay Bridge Operator 用に OpenShift を設定するには、以下を含む複数の手順が必要になります。

  • OpenShift シークレットの作成: Quay の初期段階で作成された OAuth トークンを使用して、OpenShift シークレットを作成します。
  • MutatingWebhookConfiguration サポートの追加: Red Hat Quay の OpenShift への統合をサポートするには、新しいビルド要求をインターセプトして、OpenShift の統合レジストリーではなく Red Hat Quay をターゲットに出力を変更できるようにする必要があります。

OpenShift の通常のビルドプロセスの一部として実行される API 要求の動的インターセプションのサポートは、MutatingWebhookConfiguration によって容易になります。MutatingWebhookConfiguration は、特定の API 要求が受信される際に、OpenShift のプロジェクト内で実行中の API を呼び出すことを可能にします。

Kubernetes では、クラスターの認証局を使用する証明書を使用して SSL で Webhook エンドポイントのセキュリティーを保護する必要があります。OpenShift はクラスターによって署名される証明書の生成をサポートします。

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

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

    その結果、新たに作成された秘密鍵と証明書が、指定された秘密の中に配置されます。シークレットは Operator の Deployment に宣言されるように Operator 内の適切な場所にマウントされます。

  4. Operator の Webhook エンドポイントのサービスを作成します。

    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 を検索します。
    • Install を選択します。
    • Installation Mode (all namespaces)、 Update Channel、および Approval Strategy (Automatic or Manual) を選択します。
    • 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 を namespace の名前および先に作成したトークンが含まれるシークレットに置き換えます。
    3
    QUAY_URL を Red Hat Quay インスタンスのホスト名に置き換えます。
    4
    whitelistNamespaces は任意です。これが使用されない場合、Bridge Operator は openshift の接頭辞が付けられたプロジェクトを除き、すべての namespace を Red Hat Quay に同期します。この例では、ホワイトリストに入れられた namespace (デフォルト) で Red Hat Quay 組織が関連付けられます。ここで任意の namespace を使用します。
    5
    Quay が自己署名証明書を使用している場合、プロパティー insecureRegistry: true を設定します。

    その結果、Red Hat Quay 内の組織は、OpenShift の関連 namespace 用に作成されます。

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

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

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

作成済みのホワイトリストに入れられた namespace には Red Hat Quay 組織が含まれるはずです。oc new-app などのコマンドを使用して、その namespace で新規アプリケーションを作成する場合、内部レジストリーを使用する代わりに、作成された新しい Red Hat Quay リポジトリーが表示されます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat