You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Helm安装Kyverno策略时遇request函数未定义错误求助

解决Helm安装Kyverno策略时的request函数未定义错误

错误根源是Helm模板渲染时,误将Kyverno策略中的request内置变量当成了Helm模板函数解析。request是Kyverno运行时用于获取请求上下文的专属变量,不需要Helm处理,必须让Helm将其原封不动输出到最终的ClusterPolicy资源中。

修改方案

对Kyverno表达式中的{{ ... }}进行转义,阻止Helm解析这部分内容,修改后的require-network-policy.yaml如下:

{{- $name := "require-network-policy" }}
{{ if not (and $name .Values.disableDefaultTemplates) }}
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
 name: {{ $name }}
 annotations:
    policies.kyverno.io/title: Require NetworkPolicy
    policies.kyverno.io/category: Sample
    policies.kyverno.io/minversion: 1.6.0
    kyverno.io/kyverno-version: 1.6.2
    kyverno.io/kubernetes-version: "1.23"
    policies.kyverno.io/subject: Deployment, NetworkPolicy
    policies.kyverno.io/description: >-
      NetworkPolicy is used to control Pod-to-Pod communication
      and is a good practice to ensure only authorized Pods can send/receive
      traffic. This policy checks incoming Deployments to ensure
      they have a matching, preexisting NetworkPolicy.      
spec:
  validationFailureAction: {{ .Values.validationFailureAction }}
  background: false
  rules:
  - name: require-network-policy
      match:
        any:
        - resources:
            kinds:
            - Deployment
      preconditions:
        any:
        - key: "{{`{{request.operation || 'BACKGROUND'}}`}}"
          operator: Equals
          value: CREATE
      validate:
        message: "Every Deployment requires a matching NetworkPolicy."
        deny:
          conditions:
            any:
            - key: "{{`{{ request.operation == 'CREATE' && resources[kind=='NetworkPolicy'].length > 0 && resources[kind=='NetworkPolicy'].spec.podSelector.matchLabels == request.object.spec.template.metadata.labels }}`}}"
              operator: Equals
              value: false
{{- end }}

修改说明

  • 用{{{{ ... }}}}的语法(反引号包裹Kyverno表达式),让Helm直接输出内部的{{ ... }}结构,不再尝试解析其中的request变量。
  • 这种写法彻底避免了Helm与Kyverno模板语法的冲突,确保Kyverno能正常读取request上下文变量。

修改完成后重新执行helm install kyverno-policies即可完成安装。

内容的提问来源于stack exchange,提问作者Marwan Tarek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:52:39