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: 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 会检测并警告您创建或更新缺少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 策略状态中查看。
:使用 Red Hat Advanced Cluster Management 策略中的 policy-gatekeeper-admission 配置策略来检查 Gatekeeper 准入 Webhook 拒绝的 Kubernetes API 请求。查看以下示例:policy-gatekeeper-admissionapiVersion: 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. 其他资源 复制链接链接已复制到粘贴板!
如需了解更多详细信息,请参阅以下资源: