1.2. 模板处理
配置策略和操作器策略支持包含 Golang 文本模板。这些模板在 hub 集群或目标受管集群的运行时使用与该集群相关的配置解决。这可让您使用动态内容定义配置策略,并通知或强制实施为目标集群自定义的 Kubernetes 资源。
策略定义可以包含 hub 集群和受管集群模板。hub 集群模板首先在 hub 集群中处理,然后将带有已解析 hub 集群模板的策略定义传播到目标集群。在受管集群中,ConfigPolicyController 处理策略定义中的任何受管集群模板,然后强制执行或验证完全解析的对象定义。
模板语法必须符合 Golang 模板语言规范,并且从解析的模板生成的资源定义必须是有效的 YAML。如需更多与 Package 模板相关的信息,请参阅 Golang 文档。模板验证中的任何错误都将识别为策略违反情况。当您使用自定义模板功能时,这些值会在运行时被替换。
重要:
-
重要: 如果您使用 hub 集群模板传播 secret 或其他敏感数据,则敏感数据存在于 hub 集群上的受管集群命名空间和发布该策略的受管集群中。模板内容在策略中扩展,策略不会由 OpenShift Container Platform ETCD 加密支持加密。要解决这个问题,请使用
fromSecret或copySecretData,它会自动加密 secret 中的值,或protect加密其他值。 当您添加多行字符串值(如 certificate)时,始终在模板管道末尾添加
| toRawJson | toLiteral语法来处理换行符。例如,如果您要从Secret资源复制证书并将其包含在ConfigMap资源中,则模板管道可能类似如下:ca.crt: '{{ fromSecret "openshift-config" "ca-config-map-secret" "ca.crt" | base64dec | toRawJson | toLiteral }}'toRawJson模板函数将输入值转换为 JSON 字符串,其中新行转义不会影响 YAML 结构。toLiteral模板函数从输出中删除外部单引号。例如,当对键处理模板时:'{{ 'hello\nworld' | toRawJson }}'模板管道,输出为key: '"hello\nworld"'。键的输出:"{{ 'hello\nworld' | toRawJson | toLiteral }}'template pipeline iskey: "hello\nworld".
如需 hub 集群和受管集群模板的比较,请参阅下表:
1.2.1. hub 集群和受管集群模板的比较 复制链接链接已复制到粘贴板!
| 模板 | hub 集群 | 受管集群(managed cluster) |
|---|---|---|
| Syntax | golang 文本模板规格 | golang 文本模板规格 |
| Delimiter | {{hub … hub}} | {{ … }} |
| Context |
上下文变量 |
对于 |
| Access control |
默认情况下,您只能引用与
或者,您可以将
注: 服务帐户必须具有在 hub 集群模板中查找的任何资源 | 您可以引用集群中的任何资源。 |
| Functions | 组模板功能,支持对 Kubernetes 资源和字符串操作的动态访问。如需更多信息,请参阅模板功能。有关查询限制,请参阅 Access control 行。
hub 集群上的
等效的调用可能使用以下语法: | 组模板功能,支持对 Kubernetes 资源和字符串操作的动态访问。如需更多信息,请参阅模板功能。 |
| Function output storage |
在与受管集群同步前,模板功能的输出存储在 hub 集群上每个适用的受管集群命名空间中的 | 模板功能的输出不存储在策略相关的资源对象中。 |
| Processing | 在 hub 集群的运行时,处理会在复制策略传播到集群的过程中进行。只有在创建或更新模板时,策略中的策略和 hub 集群模板才会在 hub 集群中处理。 | 在受管集群中进行处理。策略定期处理,利用所引用资源中的数据自动更新解析的对象定义。每当引用的资源更改时,Operator 策略会自动更新。 |
| Processing errors | hub 集群模板中的错误显示为策略应用到的受管集群中的违反情况。 | 受管集群模板中的错误会在发生违反情况的特定目标集群中以违反的形式显示。 |
继续阅读以下主题: