7.3.8. OpenShift Container Platform レジストリーの統合
OpenShift Container Platform をスタンドアロンのコンテナーイメージレジストリーとしてインストールし、レジストリー機能のみを提供できるようにすることができます。 これには、OpenShift Container Platform プラットフォームを実行するようにこのレジストリーを使用できる利点があります。
OpenShift Container Platform レジストリーについての詳細は、OpenShift Container レジストリーのスタンドアロンデプロイメントのインストール を参照してください。
OpenShift Container Platform レジストリーを有効にするには、直前のすべてのセクションが適用されます。OpenShift Container Platform の観点では、このスタンドアロンの OpenShift Container レジストリーは外部レジストリーとして処理されますが、これはマルチテナントレジストリーであり、OpenShift Container Platform の承認モデルが使用されるため、いくつかの追加タスクが必要になります。 このレジストリーは新規プロジェクトを独自の環境に作成するのではなく、これが通信するよう設定された OpenShift Container Platform 内に作成するため、作成されるすべてのプロジェクトに影響を与えます。
7.3.8.1. レジストリープロジェクトのクラスターへの接続
レジストリーはレジストリー Pod と Web インターフェイスを含む完全な OpenShift Container Platform 環境であるため、レジストリーに新規プロジェクトを作成するプロセスは、oc new-project
または oc create
コマンドラインを使用して実行されるか、または Web インターフェイスを使って実行されます。
プロジェクトが作成されると、通常のサービスアカウント (builder
、default
、および deployer
) が自動的に作成され、プロジェクト管理者ユーザーにはパーミッションが付与されます。匿名ユーザーを含め、異なるユーザーにイメージをプッシュ/プルする権限を付与できます。
すべてのユーザーがレジストリー内の新規プロジェクトからイメージをプルできるようにするなどのいくつかのユースケースがありますが、OpenShift Container Platform とレジストリー間に 1:1 の関係を持たせることを希望している場合で、ユーザーが特定のプロジェクトからイメージのプッシュおよびプルを実行できるようにする場合には、いくつかの手順を実行する必要があります。
レジストリー Web コンソールはプル/プッシュ操作に使用されるトークンを表示しますが、ここに表示されるトークンはセッショントークンであるため、期限切れになります。特定のパーミッションを持つサービスアカウントを作成することにより、管理者はサービスアカウントのパーミッションを制限することができ、たとえばイメージのプッシュ/プルに異なるサービスアカウントを使用できるようにできます。その後はサービスアカウントトークンの期限切れが生じなくなるため、トークンの期限切れ、シークレットの再作成その他のタスクについて設定する必要がなくなります。
手順
新規プロジェクトを作成します。
$ oc new-project <my_project>
レジストリープロジェクトを作成します。
$ oc new-project <registry_project>
サービスアカウントをレジストリープロジェクトに作成します。
$ oc create serviceaccount <my_serviceaccount> -n <registry_project>
registry-editor
ロールを使用してイメージのプッシュおよびプルのパーミッションを付与します。$ oc adm policy add-role-to-user registry-editor -z <my_serviceaccount> -n <registry_project>
プルパーミッションのみが必要な場合、
registry-viewer
ロールを使用できます。サービスアカウントトークンを取得します。
$ TOKEN=$(oc sa get-token <my_serviceaccount> -n <registry_project>)
トークンをパスワードとして使用し、
dockercfg
シークレットを作成します。$ oc create secret docker-registry <my_registry> \ --docker-server=<myregistry.example.com> --docker-username=<notused> --docker-password=${TOKEN} --docker-email=<me@example.com>
dockercfg
シークレットを使用し、シークレットをプル操作を実行するサービスアカウントにリンクして、イメージをレジストリーからプルします。イメージをプルするためのデフォルトのサービスアカウント名はdefault
です。$ oc secrets link default <my_registry> --for=pull
S2I 機能を使用してイメージをプッシュする場合、
dockercfg
シークレットは S2I Pod にマウントされるため、これをビルドを実行する適切なサービスアカウントにリンクする必要があります。イメージをビルドするために使用されるデフォルトのサービスアカウントの名前はbuilder
です。$ oc secrets link builder <my_registry>
buildconfig
では、シークレットをプッシュまたはプル操作用に指定する必要があります。"type": "Source", "sourceStrategy": { "from": { "kind": "DockerImage", "name": "<myregistry.example.com/registry_project/my_image:stable>" }, "pullSecret": { "name": "<my_registry>" }, ...[OUTPUT ABBREVIATED]... "output": { "to": { "kind": "DockerImage", "name": "<myregistry.example.com/registry_project/my_image:latest>" }, "pushSecret": { "name": "<my_registry>" }, ...[OUTPUT ABBREVIATED]...