5.4. イメージプルシークレットの使用
OpenShift イメージレジストリーを使用し、同じプロジェクトにあるイメージストリームからプルしている場合は、Pod のサービスアカウントに適切なパーミッションがすでに設定されているために追加のアクションは不要です。
ただし、Red Hat OpenShift Service on AWS プロジェクト全体でイメージを参照する場合や、セキュリティー保護されたレジストリーからイメージを参照するなどの他のシナリオでは、追加の設定手順が必要になります。
イメージの プルシークレットは、Red Hat OpenShift Cluster Manager から取得 できます。このプルシークレットは pullSecret
と呼ばれます。
このプルシークレットを使用し、Red Hat OpenShift Service on AWS コンポーネントのコンテナーイメージを提供する組み込まれた認証局 (Quay.io および registry.redhat.io) によって提供されるサービスで認証できます。
5.4.1. Pod が複数のプロジェクト間でイメージを参照できるようにする設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift イメージレジストリーを使用している場合で project-a
の Pod が project-b
のイメージを参照できるようにするには、project-a
のサービスアカウントが project-b
の system:image-puller
ロールにバインドされている必要があります。
Pod サービスアカウントまたは namespace を作成するときは、サービスアカウントが Docker プルシークレットでプロビジョニングされるまで待ちます。サービスアカウントが完全にプロビジョニングされる前に Pod を作成すると、Pod は OpenShift イメージレジストリーにアクセスできません。
手順
project-a
の Pod がproject-b
のイメージを参照できるようにするには、project-a
のサービスアカウントをproject-b
のsystem:image-puller
ロールにバインドします。oc policy add-role-to-user \ system:image-puller system:serviceaccount:project-a:default \ --namespace=project-b
$ oc policy add-role-to-user \ system:image-puller system:serviceaccount:project-a:default \ --namespace=project-b
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このロールを追加すると、デフォルトのサービスアカウントを参照する
project-a
の Pod はproject-b
からイメージをプルできるようになります。project-a
のすべてのサービスアカウントにアクセスを許可するには、グループを使用します。oc policy add-role-to-group \ system:image-puller system:serviceaccounts:project-a \ --namespace=project-b
$ oc policy add-role-to-group \ system:image-puller system:serviceaccounts:project-a \ --namespace=project-b
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.2. Pod が他のセキュリティー保護されたレジストリーからイメージを参照できるようにする設定 リンクのコピーリンクがクリップボードにコピーされました!
他のプライベートレジストリーレジストリーまたは保護されたレジストリーから保護されたコンテナーをプルするには、Docker や Podman などのコンテナークライアント認証情報からプルシークレットを作成し、それをサービスアカウントに追加する必要があります。
Docker と Podman は設定ファイルを使用して、保護されたレジストリーまたは保護されていないレジストリーへのログインに使用する認証の詳細を保存します。
-
Docker: Docker は、デフォルトで
$HOME/.docker/config.json
を使用します。 -
Podman: Podman は、デフォルトで
$HOME/.config/containers/auth.json
を使用します。
以前に保護されたレジストリーまたは保護されていないレジストリーにログインしたことがある場合、これらのファイルには認証情報が保存されます。
quay.io
や quay.io/<example_repository>
のような一意のパスがある場合、Docker と Podman の認証情報ファイルおよび関連するプルシークレットには、同一レジストリーへの複数の参照を含めることができます。ただし、Docker および Podman のいずれも、まったく同じレジストリーパスの複数エントリーはサポートしていません。
config.json
ファイルのサンプル
プルシークレットの例
5.4.2.1. プルシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
手順
既存の認証ファイルからシークレットを作成します。
.docker/config.json
を使用する Docker クライアントの場合は、次のコマンドを入力します。oc create secret generic <pull_secret_name> \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
$ oc create secret generic <pull_secret_name> \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
Copy to Clipboard Copied! Toggle word wrap Toggle overflow .config/containers/auth.json
を使用する Podman クライアントの場合は、次のコマンドを入力します。oc create secret generic <pull_secret_name> \ --from-file=<path/to/.config/containers/auth.json> \ --type=kubernetes.io/podmanconfigjson
$ oc create secret generic <pull_secret_name> \ --from-file=<path/to/.config/containers/auth.json> \ --type=kubernetes.io/podmanconfigjson
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
セキュアなレジストリーの Docker 認証情報ファイルがまだない場合は、次のコマンドを実行してシークレットを作成できます。
oc create secret docker-registry <pull_secret_name> \ --docker-server=<registry_server> \ --docker-username=<user_name> \ --docker-password=<password> \ --docker-email=<email>
$ oc create secret docker-registry <pull_secret_name> \ --docker-server=<registry_server> \ --docker-username=<user_name> \ --docker-password=<password> \ --docker-email=<email>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.2.2. ワークロードでのプルシークレットの使用 リンクのコピーリンクがクリップボードにコピーされました!
プルシークレットを使用すると、ワークロードが次のいずれかの方法でプライベートレジストリーからイメージをプルできるようになります。
-
シークレットを
ServiceAccount
にリンクする。これにより、そのサービスアカウントを使用するすべての Pod にシークレットが自動的に適用されます。 -
ワークロード設定で
imagePullSecrets
を直接定義する。これは GitOps や ArgoCD などの環境に役立ちます。
手順
サービスアカウントにシークレットを追加することで、Pod のイメージをプルするためのシークレットを使用できます。サービスアカウントの名前は、Pod が使用するサービスアカウントの名前と一致する必要があることに注意してください。デフォルトのサービスアカウントは
default
です。次のコマンドを入力してプルシークレットを
ServiceAccount
にリンクします。oc secrets link default <pull_secret_name> --for=pull
$ oc secrets link default <pull_secret_name> --for=pull
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を確認するために、次のコマンドを入力します。
oc get serviceaccount default -o yaml
$ oc get serviceaccount default -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットをサービスアカウントにリンクする代わりに、Pod またはワークロード定義で直接参照することもできます。これは ArgoCD などの GitOps ワークフローに役立ちます。以下に例を示します。
Pod 仕様の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ArgoCD ワークフローの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.2.3. 委任された認証を使用したプライベートレジストリーからのプル リンクのコピーリンクがクリップボードにコピーされました!
プライベートレジストリーは認証を別個のサービスに委任できます。この場合、イメージプルシークレットは認証およびレジストリーのエンドポイントの両方に対して定義される必要があります。
手順
委任された認証サーバーのシークレットを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プライベートレジストリーのシークレットを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow