2.11. サードパーティーポリシーコントローラーの統合
サードパーティーポリシーを統合してポリシーテンプレート内にカスタムアノテーションを作成し、コンプライアンス標準、制御カテゴリー、制御を 1 つ以上指定します。
policy-collection/community からサードパーティーポリシーを使用することもできます。
以下のサードパーティーポリシーを統合する方法を説明します。
2.11.1. gatekeeper 制約および制約テンプレートの統合
Gatekeeper は、Open Policy Agent (OPA) で実行されるカスタムリソース定義ベースのポリシーを強制できる監査機能を備えた検証 Webhook です。Gatekeeper Operator ポリシーを使用して、クラスターに Gatekeeper をインストールできます。Gatekeeper 制約を使用して、Kubernetes リソースのコンプライアンスを評価できます。ポリシーエンジンとして OPA を活用し、ポリシー言語に Rego を使用できます。
前提条件: Gatekeeper をインストールし、Gatekeeper ポリシーをクラスターに適用するには、Red Hat Advanced Cluster Management for Kubernetes または Red Hat OpenShift Container Platform Plus サブスクリプションが必要です。Gatekeeper は、最新バージョンの Red Hat Advanced Cluster Management でサポートされるバージョン 3.11 を除く、OpenShift Container Platform のバージョンでのみサポートされます。
gatekeeper ポリシーは、制約テンプレート (ConstraintTemplates
) と制約を使用して記述されます。Red Hat Advanced Cluster Management ポリシーで Gatekeeper 制約を使用する以下の YAML の例を表示します。
ConstraintTemplates
と制約: Red Hat Advanced Cluster Management ポリシーを使用して Gatekeeper 統合機能を使用し、Gatekeeper 制約のマルチクラスター分散とハブクラスターでの Gatekeeper 監査結果の集約を行います。次の例では、GatekeeperConstraintTemplate
と制約 (K8sRequiredLabels
) を定義して、gatekeeper
ラベルがすべての namespace に設定されていることを確認します。apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: require-gatekeeper-labels-on-ns spec: remediationAction: inform 1 disabled: false policy-templates: - objectDefinition: apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8srequiredlabels annotations: policy.open-cluster-management.io/severity: low 2 spec: crd: spec: names: kind: K8sRequiredLabels validation: openAPIV3Schema: properties: labels: type: array items: string targets: - target: admission.k8s.gatekeeper.sh rego: | package k8srequiredlabels violation[{"msg": msg, "details": {"missing_labels": missing}}] { provided := {label | input.review.object.metadata.labels[label]} required := {label | label := input.parameters.labels[_]} missing := required - provided count(missing) > 0 msg := sprintf("you must provide labels: %v", [missing]) } - objectDefinition: apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sRequiredLabels metadata: name: ns-must-have-gk annotations: policy.open-cluster-management.io/severity: low 3 spec: enforcementAction: dryrun match: kinds: - apiGroups: [""] kinds: ["Namespace"] parameters: labels: ["gatekeeper"]
- 1
remediationAction
がinform
に設定されているため、Gatekeeper 制約のenforcementAction
フィールドはwarn
にオーバーライドされます。これは、gatekeeper
ラベルが欠落している namespace の作成または更新を Gatekeeper が検出し、警告することを意味します。remediationAction
ポリシーがenforce
に設定されている場合、Gatekeeper 制約のenforcementAction
フィールドはdeny
にオーバーライドされます。このコンテキストでは、この設定により、gatekeeper
ラベルが欠落している namespace をユーザーが作成または更新できなくなります。- 2 3
- オプション: 各 Gatekeeper 制約または制約テンプレートに対して、
policy.open-cluster-management.io/severity
アノテーションの重大度値を設定します。有効な値は、他の Red Hat Advanced Cluster Management ポリシータイプと同じです (low
、medium
、high
、またはcritical
)。
以前のポリシーでは、ポリシーステータスメッセージ
warn - you must provide labels: {"gatekeeper"} (on Namespace default); warn - you must provide labels: {"gatekeeper"} (on Namespace gatekeeper-system)
が表示される場合があります。Gatekeeper 制約またはConstraintTemplates
を含むポリシーが削除されると、制約およびConstraintTemplates
もマネージドクラスターから削除されます。コンソールから特定のマネージドクラスターの Gatekeeper 監査結果を表示するには、ポリシーテンプレートの Results ページに移動します。検索が有効になっている場合は、監査に失敗した Kubernetes オブジェクトの YAML を表示します。
注記:
- Related resources セクションは、監査結果が Gatekeeper バージョン 3.9 以降で生成された場合にのみ使用できます。
- Gatekeeper の監査機能は、デフォルトでは 1 分ごとに実行されます。監査結果はハブクラスターに返送され、マネージドクラスターの Red Hat Advanced Cluster Management ポリシーステータスで表示されます。
policy-gatekeeper-admission
: Red Hat Advanced Cluster Management ポリシー内のpolicy-gatekeeper-admission
設定ポリシーを使用して、Gatekeeper アドミッション Webhook によって拒否された Kubernetes API リクエストを確認します。apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gatekeeper-admission spec: remediationAction: inform # will be overridden by remediationAction in parent policy severity: low object-templates: - complianceType: mustnothave objectDefinition: apiVersion: v1 kind: Event metadata: namespace: openshift-gatekeeper-system # set it to the actual namespace where gatekeeper is running if different annotations: constraint_action: deny constraint_kind: K8sRequiredLabels constraint_name: ns-must-have-gk event_type: violation
2.11.1.1. 関連情報
-
詳細は、
policy-gatekeeper-operator.yaml
を参照してください。
詳細は、OPA ゲートキーパーとは を参照してください。
2.11.2. ポリシージェネレーター
ポリシージェネレーターは、Kustomize を使用して Red Hat Advanced Cluster Management ポリシーを生成する Red Hat Advanced Cluster Management for Kubernetes アプリケーションライフサイクルサブスクリプション GitOps ワークフローの一部です。ポリシージェネレーターは、設定に使用される PolicyGenerator
マニフェスト YAML ファイル提供の Kubernetes マニフェスト YAML ファイルから Red Hat Advanced Cluster Management ポリシーをビルドします。ポリシージェネレーターは、Kustomize ジェネレータープラグインとして実装されます。Kustomize の詳細は、Kustomize のドキュメント を参照してください。
詳細は、以下のセクションを参照してください。
2.11.2.1. ポリシージェネレーター機能
ポリシージェネレーターと Red Hat Advanced Cluster Management アプリケーションライフサイクルサブスクリプション GitOps ワークフローとの統合により、OpenShift Container Platform マネージドクラスターへの Kubernetes リソースオブジェクトの配布と、Red Hat Advanced Cluster Management ポリシーによる Kubernetes クラスターが簡素化されます。
ポリシージェネレーターを使用して、次のアクションを実行します。
- Kustomize ディレクトリーから作成されたマニフェストを含む、任意の Kubernetes マニフェストファイルを Red Hat Advanced Cluster Management 設定ポリシーに変換します。
- 生成された Red Hat Advanced Cluster Management ポリシーに挿入される前に、入力された Kubernetes マニフェストにパッチを適用します。
- Red Hat Advanced Cluster Management for Kubernetes で、Gatekeeper ポリシー違反について報告できるように追加の設定ポリシーを生成します。
- ハブクラスターでポリシーセットを生成します。
2.11.2.2. ポリシージェネレーターの設定構造
ポリシージェネレーターは、PolicyGenerator
の種類および policy.open-cluster-management.io/v1
API バージョンのマニフェストで設定される Kustomize ジェネレータープラグインです。
プラグインを使用するには、まず、kustomization.yaml
ファイルに generators
セクションを追加します。以下の例を参照してください。
generators: - policy-generator-config.yaml
直前の例で参照される policy-generator-config.yaml
ファイルは、生成するポリシーの手順を含む YAML ファイルです。単純な PolicyGenerator
設定ファイルは以下の例のようになります。
apiVersion: policy.open-cluster-management.io/v1 kind: PolicyGenerator metadata: name: config-data-policies policyDefaults: namespace: policies policySets: [] policies: - name: config-data manifests: - path: configmap.yaml
configmap.yaml
は、ポリシーに含まれる Kubernetes マニフェスト YAML ファイルを表します。また、Kustomize ディレクトリー、または複数の Kubernetes マニフェスト YAML ファイルを含むディレクトリーへのパスを設定できます。以下の例を参照してください。
apiVersion: v1 kind: ConfigMap metadata: name: my-config namespace: default data: key1: value1 key2: value2
生成された Policy
、PlacementRule
と PlacementBinding
は以下の例のようになります。
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-config-data namespace: policies spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: [] --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-config-data namespace: policies placementRef: apiGroup: apps.open-cluster-management.io kind: PlacementRule name: placement-config-data subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: config-data --- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/description: name: config-data namespace: policies spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: config-data spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 data: key1: value1 key2: value2 kind: ConfigMap metadata: name: my-config namespace: default remediationAction: inform severity: low
2.11.2.3. ポリシージェネレーター設定の参照テーブル
namespace
を除く policyDefaults
セクションのすべてのフィールドはポリシーごとにオーバーライドでき、policySetDefaults
セクションのすべてのフィールドはポリシーセットごとにオーバーライドできることに注意してください。
フィールド | 任意または必須 | 説明 |
---|---|---|
| 必須 |
この値は |
| 必須 |
ポリシーのタイプを指定するには、値を |
| 必須 | ポリシーリソースを識別する名前。 |
| 任意 |
複数のポリシーが同じ配置を使用する場合、この名前は結果の |
| 必須 |
|
| 必須 | すべてのポリシーの namespace。 |
| 任意 |
マニフェストとクラスターのオブジェクトを比較する場合のポリシーコントローラーの動作を決定します。使用できる値は、 |
| 任意 |
マニフェストメタデータセクションをクラスター上のオブジェクトと比較するときに、 |
| 任意 |
|
| 任意 |
|
| 任意 |
|
| 任意 |
ポリシーの |
| 任意 |
生成された設定ポリシーに設定するアノテーションのキーと値のペアです。たとえば、 |
| 任意 |
すべてのポリシーのラベルとアノテーションをコピーし、レプリカポリシーに追加します。デフォルトでは |
| 任意 |
ポリシー違反の重大度。デフォルト値は |
| 任意 |
ポリシーが無効になっているかどうか、つまり、ポリシーが伝播されておらず、結果としてステータスがないことを意味します。ポリシーを有効にするデフォルト値は |
| 任意 |
ポリシーの修復メカニズム。パラメーターの値は |
| namespace が指定されていない namespace 付きオブジェクトに必要 |
オブジェクトが適用されるマネージドクラスター内の namespace を決定します。 |
| 任意 |
特定のコンプライアンス状態にある場合にポリシーが評価される頻度を指定するには、パラメーター |
| 任意 |
このポリシーが適用される前に、特定のコンプライアンス状態にある必要があるオブジェクトのリスト。 |
| 必須 | 依存しているオブジェクトの名前。 |
| 任意 | 依存しているオブジェクトの namespace。デフォルトは、ポリシージェネレーターに設定されたポリシーの namespace です。 |
| 任意 |
オブジェクトが必要とするコンプライアンス状態。デフォルト値は |
| 任意 |
オブジェクトの種類。デフォルトでは、種類は |
| 任意 |
オブジェクトの API バージョン。デフォルト値は |
| 任意 |
このポリシーが適用される前に、特定のコンプライアンス状態にある必要があるオブジェクトのリスト。定義した依存関係は、 |
| 必須 | 依存しているオブジェクトの名前。 |
| 任意 | 依存しているオブジェクトの namespace。デフォルトでは、値はポリシージェネレーターに設定されたポリシーの namespace 間に設定されます。 |
| 任意 |
オブジェクトが必要とするコンプライアンス状態。デフォルト値は |
| 任意 |
オブジェクトの種類。デフォルト値は |
| 任意 |
オブジェクトの API バージョン。デフォルト値は |
| 任意 |
ポリシージェネレーターがその依存関係が目的の状態に達するのを待機しているときに、コンプライアンスステータスチェックをバイパスします。デフォルト値は |
| 任意 |
ポリシーの |
| 任意 |
ポリシーテンプレートに |
| 任意 |
これは、ポリシーでラップされるすべてのマニフェストに対して設定ポリシーを 1 つ生成するかどうかを決定します。 |
| 任意 |
Gatekeeper マニフェストを設定ポリシーで定義せずに直接使用するには、 |
| 任意 |
このポリシーが Kyverno ポリシーマニフェストを参照すると、Kyverno ポリシーの違反時に Red Hat Advanced Cluster Management でポリシー違反を受け取るために、設定ポリシーを追加で生成するかどうかが決定されます。デフォルト値は |
| 任意 |
ポリシーが参加するポリシーセットの配列。ポリシーセットの詳細は、 |
| 任意 |
ポリシーの配置マニフェストを生成します。デフォルトでは |
| 任意 |
ポリシーがポリシーセットの一部である場合、デフォルトでは、ポリシーセットの配置が生成されるため、ジェネレーターはこのポリシーの配置を生成しません。ポリシーの配置とポリシーセットの配置の両方でポリシーをデプロイするには、 |
| 任意 | ポリシーの配置設定。このデフォルトは、すべてのクラスターに一致する配置設定になります。 |
| 任意 | 同じクラスターセレクターが含まれる配置ルールを統合するための名前を指定します。 |
| 任意 |
クラスターにすでに存在する配置を使用するには、このパラメーターを定義します。 |
| 任意 |
既存の配置を再利用するには、 |
| 任意 |
|
| 任意 |
|
| 任意 |
|
| 任意 |
|
| 任意 |
ポリシーセットのデフォルト値。このパラメーターにリストされているデフォルト値は、 |
| 任意 |
ポリシーの配置設定。このデフォルトは、すべてのクラスターに一致する配置設定になります。このフィールドの説明は、 |
| 任意 |
ポリシーセットの配置マニフェストを生成します。デフォルトでは |
| 必須 |
デフォルト値または |
| 必須 | 作成するポリシーの名前。 |
| 必須 |
デフォルト値、この |
| 必須 |
単一のファイル、ファイルのフラットディレクトリー、または |
| 任意 |
パスのマニフェストに適用する Kustomize パッチのリスト。複数のマニフェストがある場合は、Kustomize がパッチの適用先のマニフェストを特定できるように、パッチに |
| 任意 |
作成するポリシーセットのリストと、デフォルト値または |
| 必須 | 作成するポリシーセットの名前です。 |
| 任意 | 作成するポリシーセットの説明です。 |
| 任意 |
ポリシーセットに含まれるポリシーのリストです。 |
2.11.2.4. 関連情報
- Operator をインストールするためのポリシーの生成 を参照してください。
- 詳細は、ポリシーセットコントローラー を参照してください。
- 詳細は、カスタマイズの適用 を参照してください。
- その他のトピックは、ガバナンスに関する ドキュメントを参照してください。
-
kustomization.yaml
ファイルの例を参照してください。 - Kubernetes のラベルとセレクター のドキュメントを参照してください。
- 詳細は、Gatekeeper を参照してください。
- Kustomize ドキュメント を参照してください。
- サードパーティーポリシーコントローラーの統合 ドキュメントに戻ります。
2.11.3. Operator をインストールするためのポリシーの生成
Red Hat Advanced Cluster Management ポリシーの一般的な用途は、Operator を 1 つ以上の Red Hat OpenShift Container Platform マネージドクラスターにインストールすることです。ポリシージェネレーターを使用してポリシーを生成する方法、および生成されたポリシーを使用して OpenShift GitOps Operator をインストールする方法については、引き続きお読みください。
2.11.3.1. OpenShift GitOps をインストールするポリシーの生成
ポリシージェネレーターを使用して、OpenShift GitOps をインストールするポリシーを生成できます。OpenShift GitOps Operator は次の例で使用されている all namespaces インストールモードを提供します。次の例のように、openshift-gitops-subscription.yaml
という Subscription
マニフェストファイルを作成します。
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: openshift-gitops-operator namespace: openshift-operators spec: channel: stable name: openshift-gitops-operator source: redhat-operators sourceNamespace: openshift-marketplace
Operator の特定のバージョンに固定するには、パラメーターと値 spec.startingCSV: openshift-gitops-operator.v<version>
を追加します。<version>
を希望のバージョンに置き換えます。
PolicyGenerator
設定ファイルが必要です。policy-generator-config.yaml
という名前の設定ファイルを使用してポリシーを生成し、すべての OpenShift Container Platform マネージドクラスターに OpenShift GitOps をインストールします。以下の例を参照してください。
apiVersion: policy.open-cluster-management.io/v1 kind: PolicyGenerator metadata: name: install-openshift-gitops policyDefaults: namespace: policies placement: clusterSelectors: vendor: "OpenShift" remediationAction: enforce policies: - name: install-openshift-gitops manifests: - path: openshift-gitops-subscription.yaml
最後に必要なファイルは kustomization.yaml
で、次の設定が必要です。
generators: - policy-generator-config.yaml
生成されたポリシーは、以下のファイルのようになります。
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-install-openshift-gitops namespace: policies spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: - key: vendor operator: In values: - OpenShift --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-install-openshift-gitops namespace: policies placementRef: apiGroup: apps.open-cluster-management.io kind: PlacementRule name: placement-install-openshift-gitops subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: install-openshift-gitops --- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/description: name: install-openshift-gitops namespace: policies spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: install-openshift-gitops spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: openshift-gitops-operator namespace: openshift-operators spec: channel: stable name: openshift-gitops-operator source: redhat-operators sourceNamespace: openshift-marketplace remediationAction: enforce severity: low
OpenShift Container Platform ドキュメントのマニフェストから生成されたポリシーがサポートされています。ポリシージェネレーターを使用して、OpenShift Container Platform ドキュメントの設定ガイダンスを適用できます。
2.11.3.2. Compliance Operator をインストールするポリシーの生成
Compliance Operator などの namespaced インストールモードを使用する Operator の場合、OperatorGroup
マニフェストも必要になります。
Namespace
、Subscription
、および compliance-operator.yaml
という OperatorGroup
マニフェストを含む YAML ファイルを作成します。以下の例では、これらのマニフェストを compliance-operator
namespace にインストールします。
apiVersion: v1 kind: Namespace metadata: name: openshift-compliance --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - compliance-operator --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator namespace: openshift-compliance spec: channel: release-0.1 name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace
PolicyGenerator
設定ファイルが必要です。すべての OpenShift Container Platform マネージドクラスターに Compliance Operator をインストールする以下の PolicyGenerator
ポリシーの例を表示します。
apiVersion: policy.open-cluster-management.io/v1 kind: PolicyGenerator metadata: name: install-compliance-operator policyDefaults: namespace: policies placement: clusterSelectors: vendor: "OpenShift" remediationAction: enforce policies: - name: install-compliance-operator manifests: - path: compliance-operator.yaml
最後に必要なファイルは kustomization.yaml
で、次の設定が必要です。
generators: - policy-generator-config.yaml
その結果、生成されたポリシーは次のファイルのようになります。
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-install-compliance-operator namespace: policies spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: - key: vendor operator: In values: - OpenShift --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-install-compliance-operator namespace: policies placementRef: apiGroup: apps.open-cluster-management.io kind: PlacementRule name: placement-install-compliance-operator subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: install-compliance-operator --- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/description: name: install-compliance-operator namespace: policies spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: install-compliance-operator spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 kind: Namespace metadata: name: openshift-compliance - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator namespace: openshift-compliance spec: channel: release-0.1 name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - compliance-operator remediationAction: enforce severity: low
2.11.3.3. OperatorGroups でのポリシー依存関係の使用
OperatorGroup
マニフェストを使用して Operator をインストールする場合、Subscription
が作成される前に、クラスターに OperatorGroup
が存在している必要があります。ポリシージェネレーターとともにポリシー依存関係機能を使用して、Subscription
ポリシーを実施する前に OperatorGroup
ポリシーが準拠していることを確認します。
必要な順序でマニフェストを一覧表示して、ポリシーの依存関係を設定します。たとえば、namespace ポリシーを最初に作成し、次に OperatorGroup
を作成し、最後に Subscription
を作成することができます。
ポリシージェネレーター設定マニフェストで policyDefaults.orderManifests
パラメーターを有効にし、policyDefaults.consolidateManifests
を無効にして、マニフェスト間の依存関係を自動的に設定します。
2.11.4. OpenShift GitOps (ArgoCD) を使用したポリシー定義の管理
ArgoCD に基づく OpenShift GitOps を使用して、ポリシー定義を管理することもできます。このワークフローを許可するには、Red Hat Advanced Cluster Management ハブクラスターでポリシーを作成するためのアクセス権を OpenShift GitOps に付与する必要があります。ポリシーと配置を作成、読み取り、更新、および削除するためのアクセス権を持つ、openshift-gitops-policy-admin
と呼ばれる以下の ClusterRole
リソースを作成します。ClusterRole
は次の例のようになります。
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin rules: - verbs: - get - list - watch - create - update - patch - delete apiGroups: - policy.open-cluster-management.io resources: - policies - policysets - placementbindings - verbs: - get - list - watch - create - update - patch - delete apiGroups: - apps.open-cluster-management.io resources: - placementrules - verbs: - get - list - watch - create - update - patch - delete apiGroups: - cluster.open-cluster-management.io resources: - placements - placements/status - placementdecisions - placementdecisions/status
ClusterRoleBinding
オブジェクトを作成して、OpenShift GitOps サービスアカウントに openshift-gitops-policy-admin
ClusterRole
オブジェクトへのアクセスを許可します。ClusterRoleBinding
は次の例のようになります。
kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: openshift-gitops-policy-admin
Red Hat Advanced Cluster Management ポリシー定義が OpenShift GitOps でデプロイされると、ポリシーのコピーが各マネージドクラスター名前空間に作成されます。これらのコピーは、複製されたポリシーと呼ばれます。OpenShift GitOps がこの複製されたポリシーを繰り返し削除したり、ArgoCD Application
が同期していないことを示したりするのを防ぐために、argocd.argoproj.io/compare-options: IgnoreExtraneous
アノテーションは、Red Hat Advanced Cluster Management ポリシーフレームワークによって、それぞれのレプリケーションされたポリシーに自動的に設定されます。
ArgoCD がオブジェクトを追跡するために使用するラベルとアノテーションがあります。複製されたポリシーが ArgoCD にまったく表示されないようにするには、Red Hat Advanced Cluster Management ポリシー定義で spec.copyPolicyMetadata
を false
に設定して、これらの ArgoCD 追跡ラベルとアノテーションが複製されたポリシーにコピーされないようにすることができます。
2.11.4.1. ポリシージェネレーターと OpenShift GitOps (ArgoCD) の統合
ArgoCD に基づく OpenShift GitOps を使用して、GitOps を介してポリシージェネレーターを使用してポリシーを生成することもできます。ポリシージェネレーターは OpenShift GitOps コンテナーイメージにプリインストールされていないため、カスタマイズを行う必要があります。続行するには、OpenShift GitOps Operator を Red Hat Advanced Cluster Management ハブクラスターにインストールし、ハブクラスターにログインする必要があります。
Kustomize の実行時、OpenShift GitOps がポリシージェネレーターにアクセスできるようにするには、Red Hat Advanced Cluster Management Application Subscription コンテナーイメージから OpenShift GitOps コンテナーに Policy Generator バイナリーをコピーするための Init コンテナーが必要です。さらに、Kustomize の実行時、--enable-alpha-plugins
フラグを提供するように、OpenShift GitOps を設定する必要があります。以下のコマンドを使用して、OpenShift GitOps argocd
オブジェクトの編集を開始します。
oc -n openshift-gitops edit argocd openshift-gitops
次に、OpenShift GitOps argocd
オブジェクトを変更して、以下の追加の YAML コンテンツを含めます。Red Hat Advanced Cluster Management の新しいメジャーバージョンがリリースされ、ポリシージェネレーターを新しいバージョンに更新したい場合は、Init コンテナーで使用される registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel8
イメージをより新しいタグに更新する必要があります。以下の例を見て、<version>
を 2.8 または目的の Red Hat Advanced Cluster Management バージョンに置き換えます。
apiVersion: argoproj.io/v1alpha1 kind: ArgoCD metadata: name: openshift-gitops namespace: openshift-gitops spec: kustomizeBuildOptions: --enable-alpha-plugins repo: env: - name: KUSTOMIZE_PLUGIN_HOME value: /etc/kustomize/plugin initContainers: - args: - -c - cp /etc/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator/PolicyGenerator /policy-generator/PolicyGenerator command: - /bin/bash image: registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel8:v<version> name: policy-generator-install volumeMounts: - mountPath: /policy-generator name: policy-generator volumeMounts: - mountPath: /etc/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator name: policy-generator volumes: - emptyDir: {} name: policy-generator
OpenShift GitOps がポリシージェネレーターを使用できるようになったので、Red Hat Advanced Cluster Management ハブクラスターでポリシーを作成するためのアクセス権を OpenShift GitOps に付与する必要があります。ポリシーとプレースメントを作成、読み取り、更新、および削除するためのアクセス権を持つ、openshift-gitops-policy-admin
という名前の ClusterRole
リソースを作成します。前の ClusterRole
の例を参照してください。
さらに、ClusterRoleBinding
オブジェクトを作成して、OpenShift GitOps サービスアカウントに openshift-gitops-policy-admin
ClusterRole
へのアクセスを許可します。ClusterRoleBinding
は、次のようなリソースになる場合があります。
kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: openshift-gitops-policy-admin
2.11.4.2. 関連情報
- OperatorGroups でのポリシー依存関係の使用 を参照してください。
- ArgoCD ドキュメントを参照してください。
- Operator をインストールするためのポリシーの生成 に戻ります。