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 is key: "hello\nworld".

如需 hub 集群和受管集群模板的比较,请参阅下表:

1.2.1. hub 集群和受管集群模板的比较

表 1.4. 比较表
模板hub 集群受管集群(managed cluster)

Syntax

golang 文本模板规格

golang 文本模板规格

Delimiter

{{hub … hub}}

{{ … }}

Context

上下文变量 .ManagedClusterName、.ManagedClusterLabels 和 .PolicyMetadata 可用。.ManagedClusterName 解析为传播策略的目标集群的名称。.ManagedClusterLabels 解析为传播策略的受管集群中标签的键和值映射。.PolicyMetadata 使用 root 策略中的值解析为带有 名称、命名空间、标签和注解 键的映射。

对于ConfigurationPolicy资源,上下文变量.ObjectName 、 .ObjectNamespace和.Object在objectDefinition内可用。如果对象不是集群范围的,则 ObjectNamespace会解析为您指定的spec.namespaceSelector或metadata.namespace中选择的命名空间的名称。.ObjectName解析为您指定的objectSelector或metadata.name中的对象名称。.Object是当前位于集群上的完整目标对象。

Access control

默认情况下,您只能引用与 Policy 对象相同的命名空间中的命名空间 Kubernetes 资源,以及策略传播到的集群的 ManagedCluster 对象。

或者,您可以将 Policy 对象中的 spec.hubTemplateOptions.serviceAccountName 字段指定到与 Policy 资源相同的命名空间中的服务帐户。当您指定字段时,服务帐户用于所有 hub 集群模板查找。

注: 服务帐户必须具有在 hub 集群模板中查找的任何资源 的列表 和监视 权限。

您可以引用集群中的任何资源。

Functions

组模板功能,支持对 Kubernetes 资源和字符串操作的动态访问。如需更多信息,请参阅模板功能。有关查询限制,请参阅 Access control 行。

hub 集群上的 fromSecret 模板功能将生成的值作为加密字符串存储在受管集群命名空间中。

等效的调用可能使用以下语法:{{hub "(lookup "v1" "Secret" "default" "my-hub-secret").data.message | protect hub}}

组模板功能,支持对 Kubernetes 资源和字符串操作的动态访问。如需更多信息,请参阅模板功能。

Function output storage

在与受管集群同步前,模板功能的输出存储在 hub 集群上每个适用的受管集群命名空间中的 Policy 资源对象中。这意味着,对 hub 集群上的 Policy 资源对象的读取访问权限的任何人都可以读取模板功能的任何敏感结果,以及对受管集群上 ConfigurationPolicy 或 OperatorPolicy 资源对象的读取访问权限的任何人。另外,如果启用了 etcd 加密,策略资源对象不会被加密。使用返回敏感输出的模板功能(如从机密中)时,最好仔细考虑这一点。

模板功能的输出不存储在策略相关的资源对象中。

Processing

在 hub 集群的运行时,处理会在复制策略传播到集群的过程中进行。只有在创建或更新模板时,策略中的策略和 hub 集群模板才会在 hub 集群中处理。

在受管集群中进行处理。策略定期处理,利用所引用资源中的数据自动更新解析的对象定义。每当引用的资源更改时,Operator 策略会自动更新。

Processing errors

hub 集群模板中的错误显示为策略应用到的受管集群中的违反情况。

受管集群模板中的错误会在发生违反情况的特定目标集群中以违反的形式显示。

继续阅读以下主题:

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部