検索

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

download PDF

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

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

  • 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 つのクラスターに同じ名前の名前空間を作ることができなくなります。

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. 生成された Access Token は、次のセクションで使用するためにコピーして保存します。

9.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>

    その結果、新たに作成された秘密鍵と証明書が、指定された秘密の中に配置されます。シークレットは、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

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

    $ oc create -f quay-webhook.yaml
  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
  8. 以下のコマンドを実行して CA を取得し、その結果を 1 行にまとめて MutatingWebhookConfiguration リソースに入力できるようにします。

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

    quay-mutating-webhook.yaml

    apiVersion: admissionregistration.k8s.io/v1
    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
        matchPolicy: Exact
        timeoutSeconds: 30
        sideEffects: None
        admissionReviewVersions: [v1beta1]

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

    $ oc create -f quay-mutating-webhook.yaml

    オペレータが動作するまでは、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

    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

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

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

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.