5.5. Gatekeeper の制約および制約テンプレートの統合
Gatekeeper ポリシーを作成するには、ConstraintTemplates と制約を使用します。Policy リソースの policy-templates にテンプレートと制約を追加します。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: inform1 disabled: false policy-templates: - objectDefinition: apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8srequiredlabels annotations: policy.open-cluster-management.io/severity: low2 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: low3 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 を表示します。
注記:
- 関連資料 セクションは、Gatekeeper が監査結果を生成した場合にのみ使用できます。
- 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: inform1 severity: low object-templates: - complianceType: mustnothave objectDefinition: apiVersion: v1 kind: Event metadata: namespace: openshift-gatekeeper-system2 annotations: constraint_action: deny constraint_kind: K8sRequiredLabels constraint_name: ns-must-have-gk event_type: violation
5.5.1. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
詳細は、以下のリソースを参照してください。