第 1 章 监管


对于在私有云、多云和混合云环境中部署的工作负载,企业必须满足内部对软件工程、安全工程、弹性、安全性以及规范标准的要求。Red Hat Advanced Cluster Management for Kubernetes 监管功能为企业引进自己的安全策略提供了一个可扩展的策略框架。

继续阅读 Red Hat Advanced Cluster Management 监管框架的相关主题:

1.1. 策略控制器

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

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

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

1.1.1. Kubernetes 配置策略控制器

使用配置策略控制器来配置任何 Kubernetes 资源,并在集群中应用安全策略。配置策略控制器与本地 Kubernetes API 服务器通信,以便您可以获取集群中的配置列表。

在安装过程中,配置策略控制器是在受管集群上创建的。配置策略在 hub 集群上的策略的 policy-templates 字段中提供,并由监管框架传播到所选受管集群。

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

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

1.1.1.1. 配置策略 YAML 结构

您可以通过运行 oc explain --api-version=policy.open-cluster-management.io/v1 ConfigurationPolicy.<field-path&gt; 命令来查找受管集群上的字段描述。将 <field-path > 替换为您需要的字段的路径。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: policy-config
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
    matchExpressions: []
    matchLabels: {}
  remediationAction: inform 
1

  customMessage:
    compliant: {}
    noncompliant: {}
  severity: low
  evaluationInterval:
    compliant: ""
    noncompliant: ""
  object-templates-raw: ""
  object-templates: 
2

   - complianceType: musthave
     metadataComplianceType:
     recordDiff: ""
     recreateOption: ""
     objectSelector:
       matchLabels: {}
       matchExpressions: []
     objectDefinition:
       apiVersion: v1
       kind: Pod
       metadata:
         name: pod
       spec:
         containers:
          - image: pod-image
            name: pod-name
            ports:
             - containerPort: 80
   - complianceType: mustonlyhave
     objectDefinition:
       apiVersion: v1
       kind: ConfigMap
       metadata:
         name: myconfig
         namespace: default
         data:
           testData: hello
...
Copy to Clipboard Toggle word wrap
1
指定没有名称的对象的配置策略只能设置为 inform。当将配置策略的 remediationAction 设置为 enforce 时,控制器会将指定的配置应用到目标受管集群。
2
在配置策略中的 object-templates 数组中定义 Kubernetes 对象,其中配置策略控制器的字段与受管集群上的对象进行比较。您还可以在配置策略中使用模板的值。对于更高级的用例,在 object-templates-raw 中指定一个字符串来创建您想要的 object-templates。如需更多信息,请参阅模板处理

1.1.1.2. 配置策略 YAML 标

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

apiVersion

必填

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

kind

必填

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

metadata.name

必填

策略的名称。

spec.namespaceSelector

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

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

spec.remediationAction

必填

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

spec.customMessage

选填

根据当前的合规性,配置配置策略发送的合规性消息。每个消息配置都是可以包含 Go 模板的字符串。.DefaultMessage.Policy 上下文变量可用于模板中。您可以使用 .DefaultMessage 参数访问默认消息。.Policy 上下文变量包含当前的策略对象,包括其状态。例如,您可以通过指定 .Policy.status.relatedObjects[*].object 字段来访问每个相关对象的状态。如果您为 watch 以外的 evaluationInterval 字段设置了值,则只有相关对象的 kind、name 和 namespace 可用。

[source,yaml] ---- .Policy.status.relatedObjects[*].object ----

如果您设置了 评估间隔,则只有 可识别的信息可用。

spec.customMessage.compliant

选填

为合规配置策略配置自定义消息。Go 模板和 UTF-8 编码字符(包括 emoji 和外字符)是支持的值。

spec.customMessage.noncompliant

选填

为不合规的配置策略配置自定义消息。Go 模板和 UTF-8 编码字符(包括 emoji 和外字符)是支持的值。

spec.severity

必填

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

spec.evaluationInterval

选填

指定处于特定合规状态时要评估的策略的频率。使用 合规不合规的 参数。合规和非合规参数的默认值监视 使用 Kubernetes API 监视而不是轮询 Kubernetes API 服务器。

当受管集群具有较低资源时,可以将评估间隔设置为长时间轮询间隔,以减少 Kubernetes API 和策略控制器上的 CPU 和内存使用情况。这是持续时间的格式。例如,1h25m3s 代表 1 小时、25 分钟和 3 秒。它们也可以设置为 never 以避免在策略处于特定合规状态后评估策略。

spec.evaluationInterval.compliant

选填

指定合规策略的评估频率。要启用前面的轮询行为,请将此参数设置为 10s

spec.evaluationInterval.noncompliant

选填

指定不合规策略的评估频率。要启用前面的轮询行为,请将此参数设置为 10s

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 }}
Copy to Clipboard Toggle word wrap

注: 虽然 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 之间的区别。支持以下选项:

  • 设置为 InStatus 以存储 ConfigurationPolicy 状态中的差别。
  • 设置为 Log,以记录控制器日志的区别。
  • 设置为 None 不会记录区别。

默认情况下,如果控制器没有检测区别中的敏感数据,则此参数被设置为 InStatus。否则,默认值为 None。如果检测到敏感数据,ConfigurationPolicy 状态会显示一条消息,以设置 recordDiff 以查看差异。

spec.object-templates[].recreateOption

选填

描述在需要更新时删除和重新创建对象的时间。当您将对象设置为 IfRequired 时,策略会在更新不可变字段时重新创建对象。当您将参数设置为 Always 时,策略会在任何更新上重新创建对象。当您将 remediationAction 设置为 inform 时,参数值 recreateOption 不会对对象产生影响。IfRequired 值对集群没有空运行更新支持的集群没有影响。默认值为 None

spec.object-templates[].objectDefinition

必填

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

spec.pruneObjectBehavior

选填

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

1.1.1.3. 其他资源

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

1.1.2. 证书策略控制器

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

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

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

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

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

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

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

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

1.1.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:
Copy to Clipboard Toggle word wrap
1.1.2.1.1. 证书策略控制器 YAML 表
Expand
表 1.2. 参数表
字段可选或必需的描述

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 郑则表达式语法

1.1.2.2. 证书策略示例

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

1.1.2.3. 其他资源

1.1.3. 策略控制器

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

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

备注:

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

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

1.1.3.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
    tolerations:
        - key: cluster.open-cluster-management.io/unavailable
          operator: Exists
        - key: cluster.open-cluster-management.io/unreachable
          operator: Exists
Copy to Clipboard Toggle word wrap

1.1.3.2. 策略设置表

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

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

apiVersion

必填

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

kind

必填

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

metadata.name

必填

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

spec

必填

添加策略的配置详情。

spec.policies

选填

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

1.1.3.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
Copy to Clipboard Toggle word wrap

1.1.3.4. 其他资源

1.1.4. Operator 策略控制器

Operator 策略控制器允许您在集群中监控和安装 Operator Lifecycle Manager operator。使用 Operator 策略控制器来监控操作器的不同部分的健康状况,并指定如何自动处理对 Operator 的更新。

您还可以使用监管框架将 Operator 策略分发到受管集群,并将策略添加到 hub 集群上的策略的 policy-templates 字段中。

您还可以使用 operator 策略的 operatorGroupsubscription 字段中的模板值。如需更多信息,请参阅模板处理

1.1.4.1. 先决条件

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

1.1.4.2. Operator 策略 YAML 表

Expand
字段可选或必需的描述

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 策略控制器生成此资源。查看以下参数描述:

  • 名称OperatorGroup 资源的名称。
  • 命名空间OperatorGroup 资源的命名空间。此参数必须与安装 Operator 的命名空间匹配。
  • targetNamespaces :操作器配置为监视和操作的命名空间列表。

spec.complianceType

必填

指定集群上 Operator 的所需状态。如果设置为 musthave,则当找到 Operator 时策略会合规。如果设置为 mustnothave,则在找不到 Operator 时策略合规。

spec.removalBehavior

选填

当您强制定义 complianceType: mustnothaveOperatorPolicy 资源时,决定需要保留或删除哪些资源类型。当 complianceType 设置为 musthave 时,没有影响。查看以下参数描述:

  • OperatorGroup 可以设置为 KeepDeleteIfUnused。默认值为 DeleteIfUnusued,它仅在任何其他 Operator 没有使用时删除 OperatorGroup 资源。
  • 订阅 可以设置为 KeepDelete。默认值为 Delete
  • ClusterServiceVersions 可以设置为 KeepDelete。默认值为 Delete
  • customresource definitions 可以设置为 KeepDelete。默认值为 Keep。如果把它设置为 Delete,则受管集群上的 CustomResourceDefintion 资源会被删除,并可能导致数据丢失。

spec.subscription

必填

定义创建 operator 订阅的配置。在以下字段中添加信息以创建 operator 订阅。查看以下参数描述:

  • 频道 :如果没有指定,则从 operator 目录中选择默认频道。默认在不同的 OpenShift Container Platform 版本中可能会有所不同。
  • name :指定 Operator 的软件包名称。
  • 命名空间 :如果没有指定,用于 OpenShift Container Platform 受管集群的默认命名空间是 openshift-operators
  • Source: 如果没有指定,则会选择包含 Operator 的目录。
  • sourceNamespace :如果没有指定,则会选择包含 Operator 的目录的命名空间。
  • config可选.指定 operator 订阅的额外配置详情。name 字段是唯一的必填字段。其他字段会根据受管集群中的目录信息填充。

注: 如果您在此参数中为 installPlanApproval 字段定义了一个值,策略将变为不合规。在 OperatorPolicy 资源中使用 spec.upgradeApproval

spec.complianceConfig

选填

使用此参数定义与操作器关联的特定场景的合规性行为。您可以单独设置以下选项,其中支持的值为 CompliantNonCompliant

  • catalogSourceUnhealthy :定义 Operator 的目录源不健康时的合规性。默认值为 Compliant,因为这只会影响到可能的升级。
  • deploymentsUnavailable :定义至少一个 Operator 部署没有完全可用时的合规性。默认值为 NonCompliant,因为这反映了 Operator 提供的服务的可用性。
  • upgrade Available :定义有可用于 Operator 的升级时的合规性。默认值为 Compliant,因为现有 Operator 安装可能会正确运行。

spec.upgradeApproval

必填

如果 upgradeApproval 字段设置为 Automatic,策略将设置为 enforce 时,策略会批准集群中的版本升级。如果将字段设置为 None,当策略设置为 enforce 时,到特定 Operator 的版本将不会被批准。

spec.versions

选填

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

1.1.4.3. 其他资源

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat