検索

2.10. ビルドでの Red Hat サブスクリプションの使用

download PDF

以下のセクションを使用して、OpenShift Container Platform ビルド内に Red Hat サブスクリプションコンテンツをインストールします。

2.10.1. Red Hat Universal Base Image へのイメージストリームタグの作成

ビルド内に Red Hat Enterprise Linux (RHEL) パッケージをインストールするには、Red Hat Universal Base Image (UBI) を参照するイメージストリームタグを作成します。

クラスター内の すべてのプロジェクトで UBI を利用可能にするには、イメージストリームタグを openshift namespace に追加します。または、特定のプロジェクトで UBI を利用可能にするには、イメージストリームタグをそのプロジェクトに追加します。

イメージストリームタグは、他のユーザーにプルシークレットを公開せずに、インストールプルシークレットにある registry.redhat.io の認証情報を使用して UBI へのアクセスを許可します。この方法は、各プロジェクトで registry.redhat.io の認証情報を使用してプルシークレットをインストールするよう各開発者に求める方法よりも便利です。

手順

  • すべてのプロジェクトの開発者が利用できるように、openshift namespace に ImageStreamTag リソースを作成するには、次のコマンドを入力します。

    $ oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi9:latest -n openshift
    ヒント

    または、以下の YAML を適用して openshift namespace に ImageStreamTag リソースを作成できます。

    apiVersion: image.openshift.io/v1
    kind: ImageStream
    metadata:
      name: ubi9
      namespace: openshift
    spec:
      tags:
      - from:
          kind: DockerImage
          name: registry.redhat.io/ubi9/ubi:latest
        name: latest
        referencePolicy:
          type: Source
  • 単一のプロジェクトで ImageStreamTag リソースを作成するには、次のコマンドを入力します。

    $ oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi:latest
    ヒント

    または、以下の YAML を適用して単一のプロジェクトに ImageStreamTag リソースを作成できます。

    apiVersion: image.openshift.io/v1
    kind: ImageStream
    metadata:
      name: ubi9
    spec:
      tags:
      - from:
          kind: DockerImage
          name: registry.redhat.io/ubi9/ubi:latest
        name: latest
        referencePolicy:
          type: Source

2.10.2. ビルドシークレットとしてのサブスクリプションエンタイトルメントの追加

Red Hat サブスクリプションを使用してコンテンツをインストールするビルドには、ビルドシークレットとしてエンタイトルメントキーを含める必要があります。

前提条件

  • サブスクリプションを通じて Red Hat Enterprise Linux (RHEL) パッケージリポジトリーにアクセスできる必要があります。これらのリポジトリーにアクセスするためのエンタイトルメントシークレットは、クラスターがサブスクライブされるときに、Insights Operator によって自動的に作成されます。
  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる必要があります。または、openshift-config-managed プロジェクト内のシークレットにアクセスする権限を持っている必要があります。

手順

  1. 次のコマンドを実行して、openshift-config-managed namespace からビルドの namespace にエンタイトルメントシークレットをコピーします。

    $ cat << EOF > secret-template.txt
    kind: Secret
    apiVersion: v1
    metadata:
      name: etc-pki-entitlement
    type: Opaque
    data: {{ range \$key, \$value := .data }}
      {{ \$key }}: {{ \$value }} {{ end }}
    EOF
    $ oc get secret etc-pki-entitlement -n openshift-config-managed -o=go-template-file --template=secret-template.txt | oc apply -f -
  2. etc-pki-entitlement シークレットをビルド設定の Docker ストラテジーでビルドボリュームとして追加します。

    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: ubi9:latest
        volumes:
        - name: etc-pki-entitlement
          mounts:
          - destinationPath: /etc/pki/entitlement
          source:
            type: Secret
            secret:
              secretName: etc-pki-entitlement

2.10.3. Subscription Manager を使用したビルドの実行

2.10.3.1. Subscription Manager を使用した Docker ビルド

Docker ストラテジービルドでは、yum または dnf を使用して追加の Red Hat Enterprise Linux (RHEL) パッケージをインストールできます。

前提条件

  • エンタイトルメントキーは、ビルドストラテジーのボリュームとして追加する必要があります。

手順

  • 以下を Dockerfile の例として使用し、Subscription Manager でコンテンツをインストールします。

    FROM registry.redhat.io/ubi9/ubi:latest
    RUN rm -rf /etc/rhsm-host 1
    RUN yum --enablerepo=codeready-builder-for-rhel-9-x86_64-rpms install \ 2
        nss_wrapper \
        uid_wrapper -y && \
        yum clean all -y
    RUN ln -s /run/secrets/rhsm /etc/rhsm-host 3
    1
    yum または dnf コマンドを実行する前に、/etc/rhsm-host ディレクトリーとそのすべての内容を削除するコマンドを Dockerfile に含める必要があります。
    2
    Red Hat Package Browser を使用して、インストールされているパッケージの正しいリポジトリーを見つけます。
    3
    イメージと他の Red Hat コンテナーイメージとの互換性を維持するために、/etc/rhsm-host のシンボリックリンクを復元する必要があります。

2.10.4. Red Hat Satellite サブスクリプションを使用したビルドの実行

2.10.4.1. Red Hat Satellite 設定のビルドへの追加

Red Hat Satellite を使用してコンテンツをインストールするビルドは、Satellite リポジトリーからコンテンツを取得するための適切な設定を提供する必要があります。

前提条件

  • Satellite インスタンスからコンテンツをダウンロードするために、yum 互換リポジトリー設定ファイルを提供するか、これを作成する必要があります。

    サンプルリポジトリーの設定

    [test-<name>]
    name=test-<number>
    baseurl = https://satellite.../content/dist/rhel/server/7/7Server/x86_64/os
    enabled=1
    gpgcheck=0
    sslverify=0
    sslclientkey = /etc/pki/entitlement/...-key.pem
    sslclientcert = /etc/pki/entitlement/....pem

手順

  1. 次のコマンドを入力して、Satellite リポジトリー設定ファイルを含む ConfigMap オブジェクトを作成します。

    $ oc create configmap yum-repos-d --from-file /path/to/satellite.repo
  2. Satellite リポジトリー設定およびエンタイトルメントキーをビルドボリュームとして追加します。

    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: ubi9:latest
        volumes:
        - name: yum-repos-d
          mounts:
          - destinationPath: /etc/yum.repos.d
          source:
            type: ConfigMap
            configMap:
              name: yum-repos-d
        - name: etc-pki-entitlement
          mounts:
          - destinationPath: /etc/pki/entitlement
          source:
            type: Secret
            secret:
              secretName: etc-pki-entitlement

2.10.4.2. Red Hat Satellite サブスクリプションを使用した Docker ビルド

Docker ストラテジービルドは、Red Hat Satellite リポジトリーを使用してサブスクリプションコンテンツをインストールできます。

前提条件

  • エンタイトルメントキーと Satellite リポジトリー設定がビルドボリュームとして追加しておく。

手順

  • 次の例を使用して、Satellite を使用してコンテンツをインストールするための Dockerfile を作成します。

    FROM registry.redhat.io/ubi9/ubi:latest
    RUN rm -rf /etc/rhsm-host 1
    RUN yum --enablerepo=codeready-builder-for-rhel-9-x86_64-rpms install \ 2
        nss_wrapper \
        uid_wrapper -y && \
        yum clean all -y
    RUN ln -s /run/secrets/rhsm /etc/rhsm-host 3
    1
    yum または dnf コマンドを実行する前に、/etc/rhsm-host ディレクトリーとそのすべての内容を削除するコマンドを Dockerfile に含める必要があります。
    2
    ビルドのインストール済みパッケージの正しいリポジトリーを見つけるには、Satellite システム管理者に問い合わせてください。
    3
    イメージと他の Red Hat コンテナーイメージとの互換性を維持するために、/etc/rhsm-host のシンボリックリンクを復元する必要があります。

2.10.5. SharedSecret オブジェクトを使用したビルドの実行

SharedSecret オブジェクトを使用すると、ビルドでクラスターのエンタイトルメントキーにセキュアにアクセスできます。

SharedSecret オブジェクトを使用すると、namespace 間でシークレットを共有および同期できます。

重要

Shared Resource CSI Driver は、テクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

前提条件

  • フィーチャーゲートを使用して TechPreviewNoUpgrade 機能セットを有効にしている。詳細は、フィーチャーゲートを使用した機能の有効化 を参照してください。
  • 次のアクションを実行するためのパーミッションがある。

    • ビルド設定を作成し、ビルドを開始します。
    • oc get sharedsecretsコマンドを入力し、空でないリストを取得して、使用可能なSharedSecret CR インスタンスを見つけます。
    • namespace で使用可能な builder サービスアカウントが、指定された SharedSecret CR インスタンスの使用を許可されているかどうかを確認します。つまり、oc adm policy who-can use <identifier of specific SharedSecret> を使用して、namespace のbuilderサービスアカウントが一覧表示されているかどうかを確認できます。
注記

このリストの最後の 2 つの前提条件のいずれも満たされない場合は、必要なロールベースアクセス制御 (RBAC) を自身で確立するか、誰かに依頼して確立します。これにより、SharedSecret CR インスタンスを検出し、サービスアカウントを有効にして SharedSecret CR インスタンスを使用できるようになります。

手順

  1. oc apply を使用して、クラスターのエンタイトルメントシークレットで SharedSecret オブジェクトインスタンスを作成します。

    重要

    SharedSecret オブジェクトを作成するには、クラスター管理者の権限が必要です。

    YAML Role オブジェクト定義を使用した oc apply -f コマンドの例

    $ oc apply -f - <<EOF
    kind: SharedSecret
    apiVersion: sharedresource.openshift.io/v1alpha1
    metadata:
      name: etc-pki-entitlement
    spec:
      secretRef:
        name: etc-pki-entitlement
        namespace: openshift-config-managed
    EOF

  2. SharedSecret オブジェクトにアクセスするための権限を builder サービスアカウントに付与するロールを作成します。

    oc apply -f コマンドの例

    $ oc apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: builder-etc-pki-entitlement
      namespace: build-namespace
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedsecrets
        resourceNames:
          - etc-pki-entitlement
        verbs:
          - use
    EOF

  3. 次のコマンドを実行して、builder サービスアカウントに SharedSecret オブジェクトにアクセスするための権限を付与する RoleBinding オブジェクトを作成します。

    oc create rolebinding コマンドの例

    $ oc create rolebinding builder-etc-pki-entitlement --role=builder-etc-pki-entitlement --serviceaccount=build-namespace:builder

  4. CSI ボリュームマウントを使用して、エンタイトルメントシークレットを BuildConfig オブジェクトに追加します。

    YAML BuildConfig オブジェクト定義の例

    apiVersion: build.openshift.io/v1
    kind: BuildConfig
    metadata:
      name: uid-wrapper-rhel9
      namespace: build-namespace
    spec:
      runPolicy: Serial
      source:
        dockerfile: |
          FROM registry.redhat.io/ubi9/ubi:latest
          RUN rm -rf /etc/rhsm-host 1
          RUN yum --enablerepo=codeready-builder-for-rhel-9-x86_64-rpms install \ 2
              nss_wrapper \
              uid_wrapper -y && \
              yum clean all -y
          RUN ln -s /run/secrets/rhsm /etc/rhsm-host 3
      strategy:
        type: Docker
        dockerStrategy:
          volumes:
            - mounts:
                - destinationPath: "/etc/pki/entitlement"
              name: etc-pki-entitlement
              source:
                csi:
                  driver: csi.sharedresource.openshift.io
                  readOnly: true 4
                  volumeAttributes:
                    sharedSecret: etc-pki-entitlement 5
                type: CSI

    1
    yum または dnf コマンドを実行する前に、/etc/rhsm-host ディレクトリーとそのすべての内容を削除するコマンドを Dockerfile に含める必要があります。
    2
    Red Hat Package Browser を使用して、インストールされているパッケージの正しいリポジトリーを見つけます。
    3
    イメージと他の Red Hat コンテナーイメージとの互換性を維持するために、/etc/rhsm-host のシンボリックリンクを復元する必要があります。
    4
    ビルドで共有リソースをマウントするには、readOnlytrue に設定する必要があります。
    5
    ビルドに含める SharedSecret オブジェクトの名前を参照します。
  5. BuildConfig オブジェクトからビルドを開始し、oc コマンドを使用してログを追跡します。

    $ oc start-build uid-wrapper-rhel9 -n build-namespace -F

2.10.6. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.