This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第11章 イメージポリシー
11.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
インポートするイメージや、タグ付けしたり、クラスターで実行したりするイメージを制御することができます。この目的のために使用できる 2 つの機能があります。
インポート用に許可されるレジストリーは、イメージの起点 (origin) を特定の外部レジストリーのセットに制限できるイメージポリシー設定です。このルールセットはイメージストリームにインポートされるか、またはタグ付けされるすべてのイメージに適用されます。したがって、ルールセットと一致しないレジストリーを参照するイメージは拒否されます。
ImagePolicy 受付プラグイン を使用すると、クラスターでの実行を許可するイメージを指定できます。これは現時点ではベータ機能と見なされています。この機能により、以下を制御することができます。
- イメージソース: イメージのプルに使用できるレジストリーについての指定。
- イメージの解決: イメージが再タグ付けによって変更されないよう Pod のイミュータブルなダイジェストでの実行を強制する。
- コンテナーイメージラベルの制限: イメージのラベルを制限するか、または要求する。
- イメージアノテーションの制限: 統合コンテナーレジストリーでのイメージのアノテーションを制限するか、または要求する。
11.2. インポート用に許可されるレジストリーの設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の例に示されるように、master-config.yaml の imagePolicyConfig:allowedRegistriesForImport
セクションの下にインポート用に許可されるレジスターを設定できます。この設定がない場合は、すべてのイメージが許可されます。これはデフォルトになります。
例11.1 インポート用に許可されるレジストリーの設定例
各ルールは以下の属性で構成されています。
-
domainName
: ホスト名であり、オプションでその最後は:<port>
サフィックスになり、ここで特殊なワイルドカード文字 (?
、*
) が認識されます。ワイルドカード文字は:
区切り文字の前後の両方に置くことができます。ワイルドカードは区切り文字の前または後の部分に適用されます。 -
insecure
::<port>
の部分がdomainName
にない場合、一致するポートを判別するために使用されるブール値です。true の場合、domainName
はインポート時に非セキュアなフラグが使用されている限り、サフィックスが:80
のポートが設定されているか、またはポートが未指定のレジストリーに一致します。false の場合、サフィックスが:443
のポートか、またはポートが未指定のレジストリーが一致します。
ルールが同じドメインのセキュアなポートと非セキュアなポートの両方に一致する場合、ルールは 2 回一覧表示されるはずです (1 回は insecure=true
が設定され、もう 1 回は insecure=false
が設定されます)。
修飾されていないイメージ参照は、ルールの評価前に docker.io
に対して修飾されます。これらをホワイトリストに追加するには、domainName: docker.io
を使用します。
domainName: *
ルールは任意のレジストリーのホスト名に一致しますが、ポートは依然として 443
に制限された状態になります。任意のポートで機能する任意のレジストリーに一致させるには、domainName: *:*
を使用します。
インポート用に許可されるレジストリーの設定例で設定されるルールに基づいて、以下が実行されます。
-
oc tag --insecure reg.mydomain.com/app:v1 app:v1
は、mydomain.com
ルールの処理によってホワイトリストに追加されます。 -
oc import-image --from reg1.mydomain.com:80/foo foo:latest
もホワイトリストに追加されます。 -
oc tag local.registry.corp/bar bar:latest
は、ポートが 3 番目のルールの5000
に一致しないために拒否されます。
拒否されたイメージのインポートにより、以下のテキストのようなエラーメッセージが生成されます。
The ImageStream "bar" is invalid: * spec.tags[latest].from.name: Forbidden: registry "local.registry.corp" not allowed by whitelist: "local.registry.corp:5000", "*.mydomain.com:80", "registry.access.redhat.com:443" * status.tags[latest].items[0].dockerImageReference: Forbidden: registry "local.registry.corp" not allowed by whitelist: "local.registry.corp:5000", "*.mydomain.com:80", "registry.access.redhat.com:443"
The ImageStream "bar" is invalid:
* spec.tags[latest].from.name: Forbidden: registry "local.registry.corp" not allowed by whitelist: "local.registry.corp:5000", "*.mydomain.com:80", "registry.access.redhat.com:443"
* status.tags[latest].items[0].dockerImageReference: Forbidden: registry "local.registry.corp" not allowed by whitelist: "local.registry.corp:5000", "*.mydomain.com:80", "registry.access.redhat.com:443"
11.3. ImagePolicy 受付プラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスターで実行できるイメージを設定するには、ImagePolicy 受付プラグインを master-config.yaml
ファイルで設定します。1 つまたは複数のルールを必要に応じて設定できます。
特定のアノテーションを持つイメージの拒否:
このルールを使用して、特定のアノテーションが設定されたすべてのイメージを拒否します。以下は、
images.openshift.io/deny-execution
アノテーションを使用してすべてのイメージを拒否します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 特定のイメージが有害であるとみなされる場合、管理者はそれらのイメージにフラグを付けるためにこのアノテーションを設定できます。
ユーザーの Docker Hub からのイメージの実行を許可:
このルールを使用して、ユーザーが Docker Hub からのイメージを使用できるようにできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
以下は、複数の ImagePolicy 受付プラグインルールを master-config.yaml
ファイルに設定する設定例です。
アノテーション付きのサンプルファイル
- 1
- イミュータブルなイメージダイジェストを使用してイメージを解決し、Pod でイメージのプル仕様を更新します。
- 2
- 着信リソースに対して評価するルールの配列です。
reject: true
ルールのみがある場合、デフォルトは allow all になります。reject: false
である accept ルールがルールのいずれかに含まれる場合、ImagePolicy のデフォルト動作は deny all に切り替わります。 - 3
- ルールを実施するリソースを示します。何も指定されていない場合、デフォルトは pods になります。
- 4
- このルールが一致する場合、Pod は拒否されることを示します。
- 5
- イメージオブジェクトのメタデータで一致するアノテーションの一覧。
- 6
- イメージを解決できない場合に Pod は失敗しません。
- 7
- Kubernetes リソースでのイメージストリームの使用を許可するルールの配列。デフォルト設定は、pods、replicationcontrollers、replicasets、statefulsets、daemonsets、deployments および jobs がイメージフィールドで同じプロジェクトイメージストリームのタグ参照を使用することを許可します。
- 8
- このルールが適用されるグループおよびリソースを特定します。リソースが
*
の場合、このルールはそのグループのすべてのリソースに適用されます。 - 9
LocalNames
は、単一のセグメント名 (例:ruby:2.4
) が、リソースまたはターゲットイメージストリームでlocal name resolution
が有効にされている場合にのみ namespace のローカルイメージストリームとして解釈されるようにします。
デフォルトのレジストリープレフィックス (docker.io または registry.access.redhat.com など) を使用してプルされるインフラストラクチャーイメージを使用する場合、レジストリープレフィックスがないイメージは matchRegistries
値には一致しません。インフラストラクチャーイメージにイメージポリシーに一致するレジストリープレフィックスを持たせるには、master-config.yaml
ファイルに imageConfig.format 値を設定します。
11.4. ImagePolicy 受付プラグインのテスト リンクのコピーリンクがクリップボードにコピーされました!
openshift/image-policy-check
を使用して設定をテストします。たとえば、上記の情報を使用して、以下のようにテストします。
oc import-image openshift/image-policy-check:latest --confirm
oc import-image openshift/image-policy-check:latest --confirm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この YAML を使用して Pod を作成します。Pod が作成されるはずです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別のレジストリーを参照する別の Pod を作成します。Pod は拒否されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インポートされたイメージを使用して内部レジストリーを参照する Pod を作成します。Pod は作成され、イメージ仕様を確認すると、タグの位置にダイジェストが表示されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インポートされたイメージを使用して内部レジストリーを参照する Pod を作成します。Pod は作成され、イメージ仕様を確認すると、タグが変更されていないことを確認できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get istag/image-policy-check:latest
からダイジェストを取得し、これをoc annotate images/<digest> images.openshift.io/deny-execution=true
に使用します。以下は例になります。oc annotate images/sha256:09ce3d8b5b63595ffca6636c7daefb1a615a7c0e3f8ea68e5db044a9340d6ba8 images.openshift.io/deny-execution=true
$ oc annotate images/sha256:09ce3d8b5b63595ffca6636c7daefb1a615a7c0e3f8ea68e5db044a9340d6ba8 images.openshift.io/deny-execution=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この Pod を再作成します。Pod は拒否されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow