2.3. 策略控制器
策略控制器监控并报告集群是否合规。通过使用开箱即用的策略模板应用由这些控制器管理的策略,使用 Red Hat Advanced Cluster Management for Kubernetes 策略框架。策略控制器管理 Kubernetes 自定义资源定义 (CRD) 实例。
策略控制器监控策略违反情况,如果控制器支持强制功能,可以使集群状态兼容。查看以下主题以了解有关以下 Red Hat Advanced Cluster Management for Kubernetes 策略控制器的更多信息:
重要 :只有配置策略控制器策略支持 enforce
功能。当策略控制器不支持 enforce
功能时,您必须手动修复策略。
有关管理您的策略的更多主题,请参阅监管。
2.3.1. Kubernetes 配置策略控制器
配置策略控制器可用于配置任何 Kubernetes 资源,并在集群中应用安全策略。配置策略在 hub 集群上的策略的 policy-templates
字段中提供,并由监管框架传播到所选受管集群。
在配置策略中的 object-templates
数组中定义了 Kubernetes 对象(完整或部分),指示字段的配置策略控制器与受管集群上的对象进行比较。配置策略控制器与本地 Kubernetes API 服务器通信,以获取集群中的配置列表。
配置策略控制器是在安装过程中在受管集群上创建的。配置策略控制器支持在配置策略不合规时修复 enforce
功能。当将配置策略的 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 标
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 策略的名称。 |
| 没有指定命名空间的命名空间对象是必需的 |
决定对象要应用到的受管集群中的命名空间。 |
| 必填 |
指定当策略不合规时要执行的操作。使用以下参数值: |
| 必填 |
当策略不合规时,指定严重性。使用以下参数值: |
| 选填 |
用于定义策略处于合规状态时的评估频率。该值的格式必须是一个持续时间,它是带有时间单元后缀的数字序列。例如:
默认情况下,当 |
| 选填 |
用于定义策略处于不合规状态时的频率。与 |
| 选填 |
用于控制器的 Kubernetes 对象数组(已定义或包含字段子集),以便与受管集群上的对象进行比较。注: 虽然 |
| 选填 |
用于使用原始 YAML 字符串设置对象模板。指定对象模板的条件,其中支持 if-else 语句和
注: 虽然 |
| 必填 | 在受管集群中定义 Kubernetes 对象的所需状态。您必须使用以下动词之一作为参数值:
|
| 选填 |
当将清单的 metadata 部分与集群中的对象比较时覆盖 |
| 必填 | 用于控制器的 Kubernetes 对象数组(完整定义或包含字段子集),以便与受管集群上的对象进行比较。 |
| 选填 | 决定在从受管集群中删除策略时是否清理与策略相关的资源。 |
2.3.1.3. 其他资源
如需更多信息,请参阅以下主题:
- 有关 hub 集群策略的详情,请参阅策略概述。
-
请参阅
CM-Configuration-Management
目录获取使用NIST Special Publication 800-53 (Rev. 4) 的,被 Red Hat Advanced Cluster Management 支持的策略示例。 - 了解策略如何应用到您的 hub 集群,请参阅支持的策略以了解更多详细信息。
- 有关控制器的详情,请参阅策略控制器。
- 自定义策略控制器配置。请参阅策略控制器高级配置。
- 参阅清理由策略创建的资源文档中的有关清理资源及其他相关的内容。
- 请参阅策略生成器。
- 了解如何创建和自定义策略,请参阅管理安全策略。
- 请参阅模板处理。
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 表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略的名称。 |
| 选填 |
在证书策略中, |
| 必填 |
决定监控 secret 的受管集群中的命名空间。
注: 如果证书策略控制器的 |
| 选填 | 指定识别对象属性。请参阅 Kubernetes 标签和选择器文档。 |
| 必填 |
指定您的策略的修复。将参数值设置为 |
| 选填 |
当策略不合规时,会告知用户的严重性。使用以下参数值: |
| 必填 |
如果没有指定值,则默认为 |
| 选填 |
设定一个与其他证书不同的值来标识可能很快过期的签名证书。如果没有指定参数值,则 CA 证书过期时间作为 |
| 选填 | 指定一个值来标识创建的时间超过您所期望的限制值的证书。参数使用 Golang 的持续时间格式。如需更多信息,请参阅 Golang 解析持续时间。 |
| 选填 | 创建一个值来标识创建的时间超过您定义的限制值的签名的证书。参数使用 Golang 的持续时间格式。如需更多信息,请参阅 Golang 解析持续时间。 |
| 选填 | 正则表达式,必须与您证书中定义的每个 SAN 条目匹配。这个参数会根据特征检查 DNS 名称。如需更多信息,请参阅 Golang 郑则表达式语法。 |
| 选填 | 正则表达式,不能与证书中定义的任何 SAN 条目匹配。这个参数会根据特征检查 DNS 名称。
注:要检测通配符证书,请使用以下 SAN 模式: 如需更多信息,请参阅 Golang 郑则表达式语法。 |
2.3.2.2. 证书策略示例
当在 hub 集群上创建证书策略控制器时,会在受管集群上创建复制策略。请参阅 policy-certificate.yaml
查看证书策略示例。
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 表
查看以下参数表以获详细信息:
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 选填 |
要监控的集群角色(如 |
| 选填 |
当策略不合规时,会告知用户的严重性。使用以下参数值: |
| 选填 |
指定您的策略的修复。输入 |
| 选填 |
正则表达式(regex)值列表,指示要忽略的集群角色绑定名称。这些正则表达式值必须遵循 Go regexp 语法。默认情况下,所有具有以 |
| 必填 | 在策略被视为不合规前可用的 IAM rolebinding 的最大数量。 |
2.3.4. 策略控制器
策略控制器将策略状态范围聚合到同一命名空间中定义的策略。创建策略集合(PolicySet
),以对同一命名空间中的策略进行分组。PolicySet
中的所有策略都放在选定集群中,方法是创建一个 PlacementBinding
来绑定 PolicySet
和 Placement
。策略集已部署到 hub 集群。
另外,当策略是多个策略集的一部分时,现有和新的 Placement
资源保留在策略中。当用户从策略集合中删除策略时,策略不会应用到在策略集合中选择的集群,但放置会保留。策略控制器只检查包括策略设置放置的集群中的违反情况。
注: Red Hat Advanced Cluster Management 强化示例策略集使用集群放置。如果使用集群放置,请将包含策略的命名空间绑定到受管集群集。有关使用集群放置的详情,请参阅在集群中部署策略。
在以下部分了解更多有关策略设置结构的详细信息:
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: apps.open-cluster-management.io kind: PlacementRule name: demo-policyset-pr subjects: - apiGroup: policy.open-cluster-management.io kind: PolicySet name: demo-policyset --- apiVersion: apps.open-cluster-management.io kind: PlacementRule metadata: name: demo-policyset-pr spec: clusterConditions:pagewidth: - status: "True" type: ManagedCLusterConditionAvailable clusterSelectors: matchExpressions: - key: name operator: In values: - local-cluster
2.3.4.2. 策略设置表
查看以下参数表以获详细信息:
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 添加策略的配置详情。 |
| 选填 | 要在策略集合中分组的策略列表。 |
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 placementRule: placement1 policySet: policyset-ps
2.3.4.4. 其他资源
- 请参阅 Red Hat OpenShift Platform Plus 策略集。
- 请参阅管理安全策略部分中的创建策略部分。
-
另外,查看 stable
PolicySets
,它要求 Policy Generator 用于部署,PolicySets- Stable。 - 返回到此主题的开头,策略设置控制器。