Использование переменной в пространстве имен сгенерированного ресурса

Я создал политику, которая генерируетServices для каждогоDeploymentв пространстве имен. Единственное, чего я не могу понять, это то, что этоPolicyа неClusterPolicyи я хочу сделать атрибут пространства имен динамическим. (Поскольку политика является частью наложения Kustomize, которое используется для определения сред qa и prod.) Однако, похоже, переменные в этом поле не интерпретируются до проверки политики:

веб-перехватчик допуска «validate-policy.kyverno.svc» отклонил запрос: путь: spec.rules[create-service]: политика пространства имен не может генерировать ресурсы в других пространствах имен, ожидается: bradmac-integration-platform, получено: {{ request. объект.метаданные.пространство имен }}

      apiVersion: kyverno.io/v1
kind: Policy
metadata:
  name: auto-generate-services
  annotations:
    policies.kyverno.io/title: Autogenerate services for deployments
    policies.kyverno.io/category: Argo
    policies.kyverno.io/severity: medium
    policies.kyverno.io/subject: Deployment, Service
    policies.kyverno.io/description: >-
      This policy generates `Service`s automatically based on `Deployment`s.
spec:
  generateExistingOnPolicyUpdate: true
  rules:
    - name: create-service
      match:
        all:
          - resources:
              kinds:
                - Deployment
      generate:
        apiVersion: v1
        kind: Service
        name: "{{ regex_replace_all('-deploy', request.object.metadata.name, '') }}-service"
        namespace: "{{request.object.metadata.name}}" # <- this variable isn't being interpolated
        synchronize: true
        data:
          metadata:
            ownerReferences:
              - apiVersion: v1
                kind: Deployment
                name: "{{ request.object.metadata.name }}"
                uid: "{{request.object.metadata.uid}}"
          spec:
            selector:
              app: "{{ regex_replace_all('-deploy', request.object.metadata.name, '') }}"
            ports:
              - port: 80
                targetPort: 8085
                protocol: "TCP"
            type: ClusterIP

Кто-нибудь знает какие-либо обходные пути, чтобы это могло работать для любого пространства имен, в которое его помещает наложение?

0 ответов

Другие вопросы по тегам