第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 トークンを生成します。
- スーパーユーザーアクセスのあるユーザーとして Red Hat Quay にログインし、外部アプリケーションを設定する組織を選択します。
- 左側のナビゲーションにある Applications を選択します。
-
Create New Application
を選択し、新規アプリケーションの名前を入力します (例:openshift
)。 - 新しいアプリケーションが表示されたら、これを選択します。
-
左側のナビゲーションで
Generate Token
を選択し、新規 OAuth2 トークンを作成します。 - すべてのチェックボックスを選択し、統合に必要なアクセスを付与します。
-
割り当てられたパーミッションを確認してから
Authorize Application
を選択してこれを確定します。 - 次のセクションで使用する生成されたアクセストークンをコピーして保存します。
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 はクラスターによって署名される証明書の生成をサポートします。
-
OpenShift
oc
コマンドラインツールを使用して、クラスター管理者として OpenShift にログインします。 -
openshift-operators
などの、使用する OpenShift namespace を選択するか、または新規 namespace を作成します。 OpenShift シークレットを作成し、<access_token> を先に Red Hat Quay から取得したアクセストークンに置き換えます。例えば、これはあなたの<access_token>を使って
quay-integration
というシークレットをtoken
というキーで作成します。oc create secret generic quay-integration --from-literal=token=<access_token>
$ oc create secret generic quay-integration --from-literal=token=<access_token>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その結果、新たに作成された秘密鍵と証明書が、指定された秘密の中に配置されます。シークレットは Operator の Deployment に宣言されるように Operator 内の適切な場所にマウントされます。
Operator の Webhook エンドポイントのサービスを作成します。
quay-webhook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のように Webhook サービスを作成します。
oc create -f quay-webhook.yaml
$ oc create -f quay-webhook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - webhook-create-signed-cert.sh スクリプトをダウンロードして、Kubernetes 認証局で署名された証明書を生成するために使用できるようにします。
以下のコマンドを実行して、証明書を要求します。
./webhook-create-signed-cert.sh --namespace openshift-operators \ --secret quay-bridge-operator-webhook-certs \ --service quay-bridge-operator
$ ./webhook-create-signed-cert.sh --namespace openshift-operators \ --secret quay-bridge-operator-webhook-certs \ --service quay-bridge-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して CA を取得し、その結果を 1 行にまとめて MutatingWebhookConfiguration リソースに入力できるようにします。
oc get configmap -n kube-system \ extension-apiserver-authentication \ -o=jsonpath='{.data.client-ca-file}' | base64 | tr -d '\n'
$ oc get configmap -n kube-system \ extension-apiserver-authentication \ -o=jsonpath='{.data.client-ca-file}' | base64 | tr -d '\n'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の MutatingWebhookConfiguration の YAML で、${CA_BUNDLE}変数を置き換えてください。
quay-mutating-webhook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ${CA_BUNDLE} を直前の手順の出力に置き換えます。${CA_BUNDLE} の置き換えとしてコピーし、貼り付ける 1 行は長い行で表示されます。
以下のように MutatingWebhookConfiguration を作成します。
oc create -f quay-mutating-webhook.yaml
$ oc create -f quay-mutating-webhook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オペレータが動作するまでは、MutatingWebhookConfiguration が呼び出す Web サーバーが利用できず、オブジェクトを etcd に永続化するために適切な is レスポンスが必要となるため、ビルドに対する新しいリクエストは失敗します。
OpenShift コンソールに移動し、以下のように Quay Bridge Operator をインストールします。
- OperatorHub を選択し、Quay Bridge Operator を検索します。
- Install を選択します。
- Installation Mode (all namespaces)、 Update Channel、および Approval Strategy (Automatic or Manual) を選択します。
- Subscribe を選択します。
QuayIntegration
というカスタムリソース (CR) を作成します。以下は例になります。quay-integration.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 用に作成されます。
以下のように
QuayIntegration
を作成します。oc create -f quay-integration.yaml
$ oc create -f quay-integration.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この時点で Quay の統合リソースが作成され、OpenShift クラスターと Red Hat Quay インスタンスがリンクされます。
作成済みのホワイトリストに入れられた namespace には Red Hat Quay 組織が含まれるはずです。oc new-app
などのコマンドを使用して、その namespace で新規アプリケーションを作成する場合、内部レジストリーを使用する代わりに、作成された新しい Red Hat Quay リポジトリーが表示されます。