5.5. 集成 Gatekeeper 约束和约束模板
要创建 Gatekeeper 策略,请使用 ConstraintTemplates
和约束。在 Policy
资源的 policy-templates
中添加模板和限制。查看 Red Hat Advanced Cluster Management 策略中使用 Gatekeeper 约束的以下 YAML 示例:
ConstraintTemplates
和约束: 使用 Red Hat Advanced Cluster Management 策略在 hub 集群上进行多集群发布 Gatekeeper 约束和 Gatekeeper 审计结果聚合。以下示例定义了一个 GatekeeperConstraintTemplate
和 constraint (K8sRequiredLabels
),以确保在所有命名空间中设置了gatekeeper
标签: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 会检测并警告您创建或更新缺少gatekeeper
标签的命名空间。如果策略remediationAction
设置为enforce
,则 Gatekeeper 约束enforcementAction
字段会被覆盖为deny
。在这种情况下,此配置可防止任何用户创建或更新缺少gatekeeper
标签的命名空间。 - 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 审计结果,请转至策略模板 结果 页面。如果启用了搜索,请查看失败的审计的 Kubernetes 对象的 YAML。
备注:
- 相关 resources 部分仅在 Gatekeeper 生成审计结果时可用。
- Gatekeeper 审计默认每分钟运行一次。审计结果会发回到 hub 集群,以便在受管集群的 Red Hat Advanced Cluster Management 策略状态中查看。
policy-gatekeeper-admission
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gatekeeper-admission spec: remediationAction: inform 1 severity: low object-templates: - complianceType: mustnothave objectDefinition: apiVersion: v1 kind: Event metadata: namespace: openshift-gatekeeper-system 2 annotations: constraint_action: deny constraint_kind: K8sRequiredLabels constraint_name: ns-must-have-gk event_type: violation
5.5.1. 其他资源
如需了解更多详细信息,请参阅以下资源: