搜索

2.3. 策略控制器简介

download PDF

策略控制器监控并报告集群是否合规。使用支持的策略模板应用由这些控制器管理的策略,使用 Red Hat Advanced Cluster Management for Kubernetes 策略框架。策略控制器管理 Kubernetes 自定义资源定义实例。

策略控制器检查策略违反情况,如果控制器支持强制功能,可以使集群状态兼容。查看以下主题以了解有关以下 Red Hat Advanced Cluster Management for Kubernetes 策略控制器的更多信息:

重要: 只有配置策略控制器策略支持 enforce 功能。当策略控制器不支持 enforce 功能时,您必须手动修复策略。

2.3.1. Kubernetes 配置策略控制器

配置策略控制器可用于配置任何 Kubernetes 资源,并在集群中应用安全策略。配置策略在 hub 集群上的策略的 policy-templates 字段中提供,并由监管框架传播到所选受管集群。

在配置策略中的 object-templates 数组中定义了 Kubernetes 对象(完整或部分),指示字段的配置策略控制器与受管集群上的对象进行比较。配置策略控制器与本地 Kubernetes API 服务器通信,以获取集群中的配置列表。

配置策略控制器是在安装过程中在受管集群上创建的。配置策略控制器支持 enforceInformOnly 功能,以便在配置策略不合规时修复。

当将配置策略的 remediationAction 设置为 enforce 时,控制器会将指定的配置应用到目标受管集群。

当配置策略的 remediationAction 设置为 InformOnly 时,父策略不会强制执行配置策略,即使父策略中的 remediationAction 被设置为 enforce

注: 指定没有名称的对象的配置策略只能是 inform

您还可以在配置策略中使用模板的值。如需更多信息,请参阅模板处理

如果您想将现有的 Kubernetes 清单放入到一个策略,则策略生成器是完成此任务的有用工具。

2.3.1.1. 配置策略示例

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: policy-config
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
    matchExpressions: []
    matchLabels: {}
  remediationAction: inform
  severity: low
  evaluationInterval:
    compliant:
    noncompliant:
  object-templates:
  - complianceType: musthave
    objectDefinition:
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod
      spec:
        containers:
        - image: pod-image
          name: pod-name
          ports:
          - containerPort: 80
  - complianceType: musthave
    objectDefinition:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myconfig
      namespace: default
      data:
      testData: hello
    spec:
...

2.3.1.2. 配置策略 YAML 标

表 2.2. 参数表
字段可选或必需的描述

apiVersion

必填

将值设置为 policy.open-cluster-management.io/v1

kind

必填

将值设为 ConfigurationPolicy 以表示策略类型。

metadata.name

必填

策略的名称。

spec.namespaceSelector

没有指定命名空间的命名空间对象是必需的

决定对象要应用到的受管集群中的命名空间。includeexclude 参数接受根据名称包含和排除命名空间的文件路径表达式。matchExpressionsmatchLabels 参数指定要包含的命名空间。请参阅 Kubernetes 标签和选择器文档。生成的列表通过使用来自所有参数的结果的交集进行编译。

spec.remediationAction

必填

指定当策略不合规时要执行的操作。使用以下参数值: informInformOnlyenforce

spec.severity

必填

当策略不合规时,指定严重性。使用以下参数值:low, medium, high, 或 critical

spec.evaluationInterval.compliant

选填

用于定义策略处于合规状态时的评估频率。该值的格式必须是一个持续时间,它是带有时间单元后缀的数字序列。例如:12h30m5s 代表 12 小时、30 分钟和 5 秒。另外,也可以将其设定为 never,以便策略不会在合规集群中重新评估,除非更新了策略 spec

默认情况下,当 evaluationInterval.compliant is set 或 empty 时,配置策略评估之间的最短时间大约为 10 秒。如果配置策略控制器在受管集群中饱和,则这可能会更长。

spec.evaluationInterval.noncompliant

选填

用于定义策略处于不合规状态时的频率。与 evaluationInterval.compliant 参数类似,值必须采用持续时间格式,后者是时间后缀的序列。另外,也可以将其设定为 never,以便策略不会在不合规的集群中重新评估,除非更新了策略 spec

spec.object-templates

选填

用于控制器的 Kubernetes 对象数组(已定义或包含字段子集),以便与受管集群上的对象进行比较。注: 虽然 spec.object-templatesspec.object-templates-raw 列为可选,但必须设置两个参数字段中的一个。

spec.object-templates-raw

选填

用于使用原始 YAML 字符串设置对象模板。指定对象模板的条件,其中支持 if-else 语句和 range 函数等高级功能。例如,添加以下值以避免在 object-templates 定义中出现重复:

{{- if eq .metadata.name "policy-grc-your-meta-data-name" }} replicas: 2 {{- else }} replicas: 1 {{- end }}

注: 虽然 spec.object-templatesspec.object-templates-raw 列为可选,但必须设置两个参数字段中的一个。

spec.object-templates[].complianceType

必填

在受管集群中定义 Kubernetes 对象的所需状态。您必须使用以下动词之一作为参数值:

mustonlyhave :代表必须存在带有在 objectDefinition 中定义的特定字段和值。

musthave :代表必须存在名称与 objectDefinition 中指定的相同字段的对象。在 object-template 中指定的任何现有字段都会被忽略。通常,会附加数组值。要修补数组的一个例外是,当项目包含一个与现有项匹配的 name 值时。如果要替换数组,请使用 mustonlyhave 合规类型来完全定义 objectDefinition

mustnothave :代表一个具有与 objectDefinition 中指定的字段相同的对象不能存在。

spec.object-templates[].metadataComplianceType

选填

当将清单的 metadata 部分与集群中的对象比较时覆盖 spec.object-templates[].complianceType ("musthave", "mustonlyhave")。默认没有设置,这不会为原始覆盖 complianceType

spec.object-templates[].recordDiff

选填

指定在策略中记录对象与 objectDefinition 之间的区别。设置为 Log 以记录控制器日志中的区别或 None 来记录区别。默认情况下,此参数为空,不记录区别。

spec.object-templates[].objectDefinition

必填

用于控制器的 Kubernetes 对象数组(完整定义或包含字段子集),以便与受管集群上的对象进行比较。

spec.pruneObjectBehavior

选填

决定在从受管集群中删除策略时是否清理与策略相关的资源。

2.3.1.3. 其他资源

如需更多信息,请参阅以下主题:

2.3.2. 证书策略控制器

您可以使用证书策略控制器来检测即将过期的证书、持续时间(小时)或包含无法与指定模式匹配的 DNS 名称。您可以将证书策略添加到 hub 集群上的策略的 policy-templates 字段中,它使用监管框架传播到所选受管集群。有关 hub 集群策略的详情,请参阅策略概述文档。

通过更新控制器策略中的以下参数来配置和自定义证书策略控制器:

  • minimumDuration
  • minimumCADuration
  • maximumDuration
  • maximumCADuration
  • allowedSANPattern
  • disallowedSANPattern

由于以下情况之一,您的策略可能会变得不合规:

  • 当证书过期的时间少于最短持续时间,或超过最长时间时。
  • 当 DNS 名称与指定模式匹配时。

证书策略控制器是在受管集群上创建的。控制器与本地 Kubernetes API 服务器通信,以获取包含证书的 secret 列表,并确定所有不合规的证书。

证书策略控制器不支持 enforce 功能。

注: 证书策略控制器只自动在 tls.crt 密钥中的 secret 中查找证书。如果 secret 存储在不同的密钥下,请添加名为 certificate_key_name 的标签,并将值设为键,以便证书策略控制器知道查看不同的密钥。例如,如果 secret 包含存储在名为 sensor-cert.pem 的键中的证书,请将以下标签添加到 secret: certificate_key_name: sensor-cert.pem

2.3.2.1. 证书策略控制器 YAML 结构

查看证书策略的以下示例,并查看 YAML 表中的元素:

apiVersion: policy.open-cluster-management.io/v1
kind: CertificatePolicy
metadata:
  name: certificate-policy-example
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
    matchExpressions: []
    matchLabels: {}
  labelSelector:
    myLabelKey: myLabelValue
  remediationAction:
  severity:
  minimumDuration:
  minimumCADuration:
  maximumDuration:
  maximumCADuration:
  allowedSANPattern:
  disallowedSANPattern:
2.3.2.1.1. 证书策略控制器 YAML 表
表 2.3. 参数表
字段可选或必需的描述

apiVersion

必填

将值设置为 policy.open-cluster-management.io/v1

kind

必填

将值设为 CertificatePolicy 以表示策略类型。

metadata.name

必填

用于标识策略的名称。

metadata.labels

选填

在证书策略中,category=system-and-information-integrity 标签将对策略进行分类,并促进查询证书策略。如果您的证书策略中 category 键的值不同,该值会被证书控制器覆盖。

spec.namespaceSelector

必填

决定监控 secret 的受管集群中的命名空间。includeexclude 参数接受根据名称包含和排除命名空间的文件路径表达式。matchExpressionsmatchLabels 参数指定要包含在标签中的命名空间。请参阅 Kubernetes 标签和选择器文档。生成的列表通过使用来自所有参数的结果的交集进行编译。

注: 如果证书策略控制器的 namespaceSelector 与任何命名空间不匹配,则该策略被视为合规。

spec.labelSelector

选填

指定识别对象属性。请参阅 Kubernetes 标签和选择器文档。

spec.remediationAction

必填

指定您的策略的修复。将参数值设置为 inform。证书策略控制器只支持 inform 功能。

spec.severity

选填

当策略不合规时,会告知用户的严重性。使用以下参数值:low, medium, high, 或 critical

spec.minimumDuration

必填

如果没有指定值,则默认为 100h。参数指定证书被视为不合规前的最短持续时间(以小时为单位)。参数值使用 Golang 的持续时间格式。如需更多信息,请参阅 Golang 解析持续时间

spec.minimumCADuration

选填

设定一个与其他证书不同的值来标识可能很快过期的签名证书。如果没有指定参数值,则 CA 证书过期时间作为 minimumDuration 的值。如需更多信息,请参阅 Golang 解析持续时间

spec.maximumDuration

选填

指定一个值来标识创建的时间超过您所期望的限制值的证书。参数使用 Golang 的持续时间格式。如需更多信息,请参阅 Golang 解析持续时间

spec.maximumCADuration

选填

创建一个值来标识创建的时间超过您定义的限制值的签名的证书。参数使用 Golang 的持续时间格式。如需更多信息,请参阅 Golang 解析持续时间

spec.allowedSANPattern

选填

正则表达式,必须与您证书中定义的每个 SAN 条目匹配。这个参数会根据特征检查 DNS 名称。如需更多信息,请参阅 Golang 郑则表达式语法

spec.disallowedSANPattern

选填

正则表达式,不能与证书中定义的任何 SAN 条目匹配。这个参数会根据特征检查 DNS 名称。

:要检测通配符证书,请使用以下 SAN 模式:disallowedSANPattern: "[\\*]"

如需更多信息,请参阅 Golang 郑则表达式语法

2.3.2.2. 证书策略示例

当在 hub 集群上创建证书策略控制器时,会在受管集群上创建复制策略。请参阅 policy-certificate.yaml 查看证书策略示例。

2.3.2.3. 其他资源

2.3.3. IAM 策略控制器(已弃用)

Identity and Access Management (IAM) 策略控制器可以用来接收有关不合规的 IAM 策略的通知。合规性检查是基于您在 IAM 策略中配置的参数。IAM 策略在 hub 集群上的策略的 policy-templates 字段中提供,并由监管框架传播到所选受管集群。有关 hub 集群策略的详情,请参阅策略 YAML 结构文档。

IAM 策略控制器监控集群中具有特定集群角色(例如 ClusterRole)所需的最大数量用户数。要监控的默认集群角色是 cluster-admin。IAM 策略控制器与本地 Kubernetes API 服务器通信。

IAM 策略控制器在您的受管集群上运行。查看以下部分以了解更多信息:

2.3.3.1. IAM 策略 YAML 结构

查看 IAM 策略的以下示例,并查看 YAML 表中的参数:

apiVersion: policy.open-cluster-management.io/v1
kind: IamPolicy
metadata:
  name:
spec:
  clusterRole:
  severity:
  remediationAction:
  maxClusterRoleBindingUsers:
  ignoreClusterRoleBindings:

2.3.3.2. IAM 策略 YAML 表

查看以下参数表以获详细信息:

表 2.4. 参数表
字段可选或必需的描述

apiVersion

必填

将值设置为 policy.open-cluster-management.io/v1

kind

必填

将值设为 Policy 以表示策略类型。

metadata.name

必填

用于标识策略资源的名称。

spec.clusterRole

选填

要监控的集群角色(如 ClusterRole)。如果没有指定,则默认为 cluster-admin

spec.severity

选填

当策略不合规时,会告知用户的严重性。使用以下参数值:low, medium, high, 或 critical

spec.remediationAction

选填

指定您的策略的修复。输入 inform。IAM 策略控制器只支持 inform 功能。

spec.ignoreClusterRoleBindings

选填

正则表达式(regex)值列表,指示要忽略的集群角色绑定名称。这些正则表达式值必须遵循 Go regexp 语法。默认情况下,所有具有以 system: 开头的名称的集群角色绑定都将被忽略。建议将其设置为更严格的值。要不忽略任何集群角色绑定名称,请将列表设置为单个值 .^ 或一些永不匹配的其他正则表达式。

spec.maxClusterRoleBindingUsers

必填

在策略被视为不合规前可用的 IAM rolebinding 的最大数量。

2.3.3.3. IAM 策略示例

请参阅 policy-limitclusteradmin.yaml 查看 IAM 策略示例。如需更多信息,请参阅管理安全策略。如需更多主题,请参阅策略控制器

2.3.4. 策略控制器

策略控制器将策略状态范围聚合到同一命名空间中定义的策略。创建策略集合(PolicySet),以对同一命名空间中的策略进行分组。PolicySet 中的所有策略都放在选定集群中,方法是创建一个 PlacementBinding 来绑定 PolicySetPlacement。策略集已部署到 hub 集群。

另外,当策略是多个策略集的一部分时,现有和新的 Placement 资源保留在策略中。当用户从策略集合中删除策略时,策略不会应用到在策略集合中选择的集群,但放置会保留。策略控制器只检查包括策略设置放置的集群中的违反情况。

备注:

  • Red Hat Advanced Cluster Management 示例策略集使用集群放置。如果使用集群放置,请将包含策略的命名空间绑定到受管集群集。有关使用集群放置的详情,请参阅在集群中部署策略
  • 要使用 放置资源ManagedClusterSet 资源必须绑定到带有 ManagedClusterSetBinding 资源的 Placement 资源的命名空间。如需了解更多详细信息 ,请参阅创建 ManagedClusterSetBinding 资源

在以下部分了解更多有关策略设置结构的详细信息:

2.3.4.1. 策略设置 YAML 结构

您的策略集可能类似以下 YAML 文件:

apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: demo-policyset
spec:
  policies:
  - policy-demo

---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
  name: demo-policyset-pb
placementRef:
  apiGroup: cluster.open-cluster-management.io
  kind: Placement
  name: demo-policyset-pr
subjects:
- apiGroup: policy.open-cluster-management.io
  kind: PolicySet
  name: demo-policyset
---
apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
  name: demo-policyset-pr
spec:
  predicates:
  - requiredClusterSelector:
      labelSelector:
        matchExpressions:
          - key: name
            operator: In
            values:
              - local-cluster

2.3.4.2. 策略设置表

查看以下参数表以获详细信息:

表 2.5. 参数表
字段可选或必需的描述

apiVersion

必填

将值设为 policy.open-cluster-management.io/v1beta1

kind

必填

将值设为 PolicySet 以表示策略类型。

metadata.name

必填

用于标识策略资源的名称。

spec

必填

添加策略的配置详情。

spec.policies

选填

要在策略集合中分组的策略列表。

2.3.4.3. 策略示例

apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: pci
  namespace: default
spec:
  description: Policies for PCI compliance
  policies:
  - policy-pod
  - policy-namespace
status:
  compliant: NonCompliant
  placement:
  - placementBinding: binding1
    placement: placement1
    policySet: policyset-ps

2.3.4.4. 其他资源

2.3.5. Operator 策略控制器(技术预览)

Operator 策略控制器允许您监控和安装集群中的 Operator Lifecycle Manager (OLM) Operator。使用 Operator 策略控制器来监控 Operator 的各种部分的健康状况,并指定如何自动处理 Operator 更新。您还可以使用监管框架将 operator 策略分发到受管集群,并将策略添加到 hub 集群上的策略的 policy-templates 字段中。

2.3.5.1. 先决条件

  • OLM 必须在受管集群中可用。这在 Red Hat OpenShift Container Platform 上默认启用。
  • 需要的访问权限:集群管理员

2.3.5.2. Operator 策略 YAML 表

字段可选或必需的描述

apiVersion

必填

将值设为 policy.open-cluster-management.io/v1beta1

kind

必填

将值设为 OperatorPolicy 以表示策略类型。

metadata.name

必填

用于标识策略资源的名称。

spec.remediationAction

必填

如果将 operator 策略的 remediationAction 设置为 enforce,则控制器会在目标受管集群上创建资源,以与 OLM 通信以根据策略中指定的版本安装 Operator 并根据策略中指定的版本批准更新。+ 如果 remediationAction 设置为 inform,控制器只报告 Operator 的状态,包括任何升级可用。

spec.operatorGroup

选填

默认情况下,如果没有指定 operatorGroup 字段,控制器会在与订阅相同的命名空间中生成一个 AllNamespaces 类型 OperatorGroup。此资源由 Operator 策略控制器生成。

spec.subscription

必填

定义用于创建 operator 订阅的配置。您必须在以下字段中添加信息来创建 operator 订阅:

  • channel
  • name
  • namespace
  • source
  • sourceNamespace

subscriptions.installPlanApproval

必填

如果 installPlanApproval 字段被设置为 Manual,并且 spec.versions 字段为空,则必须在相关 InstallPlan 资源中手动修补 .spec.approved 字段才能继续安装过程。Operator 的 InstallPlan 资源是在控制器创建订阅后生成的,表示安装所需 Operator 的特定版本的意图。

spec.versions

选填

声明 Operator 的兼容版本。如果字段为空,则集群中运行的任何版本都被视为合规。如果字段不为空,则受管集群上的版本必须与要合规的策略列表中的一个版本匹配。如果策略被设置为 enforce 且列表不为空,则集群中控制器批准此处列出的版本。

2.3.5.3. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.