第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 トークンを生成します。
- スーパーユーザー権限を持つユーザーとしてRed Hat Quayにログインし、外部アプリケーションを設定する組織を選択します。
- 左のナビゲーションで Applications を選択します。
-
Create New Application
を選択し、新しいアプリケーションの名前を入力します(例:openshift
)。 - 新しいアプリケーションが表示された状態で、それを選択します。
-
左側のナビゲーションで
Generate Token
を選択し、新しいOAuth2トークンを作成します。 - すべてのチェックボックスを選択して、統合に必要なアクセスを許可します。
-
割り当てられた権限を確認し、
Authorize Application
を選択して確認します。 - 生成された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はクラスタで署名された証明書の生成をサポートしています。
-
OpenShift
oc
コマンドラインツールを使用して、クラスタ管理者として OpenShift にログインします。 -
openshift-operators
など、使用するOpenShiftネームスペースを選択するか、新しいネームスペースを作成します。 OpenShiftのシークレットを作成し、<access_token>を先ほどRed Hat Quayから取得したAccess Tokenに置き換えます。例えば、これはあなたの<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のデプロイメントでの宣言の通りに、オペレーター内の適切な場所にマウントされます。
OperatorのWebhookエンドポイントのServiceを作成します。
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を検索します。
- インストールを選択します。
- インストールモード(全ネームスペース)、アップデートチャンネル、承認方法(自動または手動)を選択します。
- Subscribe を選択します。
QuayIntegration
というカスタムリソース(CR)を作成します。例:quay-integration.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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の関連する名前空間のために作成する必要があります。
以下のように
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インスタンスがリンクされます。
作成したホワイトリストの名前空間には、Red Hat Quay の組織があるはずです。oc new-app
のようなコマンドを使用してその名前空間に新しいアプリケーションを作成すると、内部レジストリを使用する代わりに、新しい Red Hat Quay リポジトリが作成されます。