Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

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 インターフェイスを使って実行されます。

プロジェクトが作成されると、通常のサービスアカウント (builderdefault、および deployer) が自動的に作成され、プロジェクト管理者ユーザーにはパーミッションが付与されます。匿名ユーザーを含め、異なるユーザーにイメージをプッシュ/プルする権限を付与できます。

すべてのユーザーがレジストリー内の新規プロジェクトからイメージをプルできるようにするなどのいくつかのユースケースがありますが、OpenShift Container Platform とレジストリー間に 1:1 の関係を持たせることを希望している場合で、ユーザーが特定のプロジェクトからイメージのプッシュおよびプルを実行できるようにする場合には、いくつかの手順を実行する必要があります。

警告

レジストリー Web コンソールはプル/プッシュ操作に使用されるトークンを表示しますが、ここに表示されるトークンはセッショントークンであるため、期限切れになります。特定のパーミッションを持つサービスアカウントを作成することにより、管理者はサービスアカウントのパーミッションを制限することができ、たとえばイメージのプッシュ/プルに異なるサービスアカウントを使用できるようにできます。その後はサービスアカウントトークンの期限切れが生じなくなるため、トークンの期限切れ、シークレットの再作成その他のタスクについて設定する必要がなくなります。

手順
  1. 新規プロジェクトを作成します。

    $ oc new-project <my_project>
  2. レジストリープロジェクトを作成します。

    $ oc new-project <registry_project>
  3. サービスアカウントをレジストリープロジェクトに作成します。

    $ oc create serviceaccount <my_serviceaccount> -n <registry_project>
  4. registry-editor ロールを使用してイメージのプッシュおよびプルのパーミッションを付与します。

    $ oc adm policy add-role-to-user registry-editor -z <my_serviceaccount> -n <registry_project>

    プルパーミッションのみが必要な場合、registry-viewer ロールを使用できます。

  5. サービスアカウントトークンを取得します。

    $ TOKEN=$(oc sa get-token <my_serviceaccount> -n <registry_project>)
  6. トークンをパスワードとして使用し、dockercfg シークレットを作成します。

    $ oc create secret docker-registry <my_registry> \
      --docker-server=<myregistry.example.com> --docker-username=<notused> --docker-password=${TOKEN} --docker-email=<me@example.com>
  7. dockercfg シークレットを使用し、シークレットをプル操作を実行するサービスアカウントにリンクして、イメージをレジストリーからプルします。イメージをプルするためのデフォルトのサービスアカウント名は default です。

    $ oc secrets link default <my_registry> --for=pull
  8. S2I 機能を使用してイメージをプッシュする場合、dockercfg シークレットは S2I Pod にマウントされるため、これをビルドを実行する適切なサービスアカウントにリンクする必要があります。イメージをビルドするために使用されるデフォルトのサービスアカウントの名前は builder です。

    $ oc secrets link builder <my_registry>
  9. 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]...