# Урок 7.2 — Работа с внешними данными и API ## Файлы | Файл | Описание | |------|----------| | `check-image-vulnerabilities.yaml` | Проверка уязвимостей через внешний API | | `external-data-cache.yaml` | ConfigMap + CronJob + RBAC для кэша внешних данных | | `validate-registry-from-cache.yaml` | Валидация реестра через кэшированный ConfigMap | ## Паттерн 1: Прямой вызов внешнего API ```yaml # Требует включения в Kyverno: # admissionController.extraArgs: # - --enableExternalDataCall=true context: - name: result apiCall: urlPath: "https://your-api.company.com/check" method: POST data: - key: image value: "{{ request.object.spec.containers[0].image }}" jmesPath: "status" ``` ### Включение external data calls ```bash helm upgrade kyverno kyverno/kyverno \ --namespace kyverno \ --reuse-values \ --set admissionController.extraArgs="{--enableExternalDataCall=true}" # Проверить kubectl get deployment kyverno-admission-controller -n kyverno \ -o jsonpath='{.spec.template.spec.containers[0].args}' | \ grep enableExternalDataCall ``` ## Паттерн 2: Кэш через ConfigMap (рекомендуется) Прямые вызовы внешних API медленные и создают зависимость. Лучший паттерн: CronJob обновляет ConfigMap → политика читает из ConfigMap. ``` Внешний API ──(каждые N минут)──► CronJob ──► ConfigMap │ Kyverno политика ◄───┘ (кэш, быстро) ``` ### Применение кэша ```bash # Применить всё: ConfigMap + CronJob + RBAC kubectl apply -f external-data-cache.yaml # Проверить ConfigMap kubectl get configmap external-data-cache -n kyverno -o yaml # Запустить CronJob вручную для немедленного обновления kubectl create job --from=cronjob/update-policy-cache \ manual-update -n kyverno # Следить за логами kubectl logs -n kyverno \ -l job-name=manual-update \ --follow # Применить политику использующую кэш kubectl apply -f validate-registry-from-cache.yaml ``` ## Паттерн 3: HashiCorp Vault интеграция ```bash # Проверить доступность Vault перед деплоем с Vault секретами kubectl apply -f - <