129 lines
3.6 KiB
Markdown
129 lines
3.6 KiB
Markdown
# Урок 5.3 — Переиспользуемые шаблоны политик (Helm Chart)
|
|
|
|
## Структура
|
|
|
|
```
|
|
kyverno-policies/
|
|
├── Chart.yaml
|
|
├── values.yaml # дефолтные значения
|
|
├── values-staging.yaml # overrides для staging
|
|
├── values-production.yaml # overrides для production
|
|
├── templates/
|
|
│ ├── require-resource-limits.yaml
|
|
│ ├── disallow-privileged.yaml
|
|
│ ├── require-labels.yaml
|
|
│ └── generate-networkpolicy.yaml
|
|
└── tests/
|
|
├── kyverno-test.yaml
|
|
└── resources/
|
|
├── pod-compliant.yaml
|
|
├── pod-no-limits.yaml
|
|
├── pod-privileged.yaml
|
|
└── deployment-no-labels.yaml
|
|
```
|
|
|
|
## Запуск тестов (без кластера)
|
|
|
|
```bash
|
|
cd kyverno-policies
|
|
|
|
# Сгенерировать манифесты из шаблонов и протестировать
|
|
helm template . -f values.yaml | \
|
|
kyverno apply - --resource tests/resources/ --table
|
|
|
|
# Запустить встроенные kyverno тесты
|
|
# (сначала нужно отрендерить шаблоны в обычные YAML)
|
|
helm template . -f values.yaml --output-dir /tmp/rendered-policies
|
|
|
|
kyverno test tests/ \
|
|
--policy-report \
|
|
--detailed-results
|
|
```
|
|
|
|
## Деплой в кластер
|
|
|
|
```bash
|
|
# Staging — всё в Audit
|
|
helm upgrade --install kyverno-policies . \
|
|
--namespace kyverno \
|
|
--create-namespace \
|
|
-f values-staging.yaml
|
|
|
|
# Production — Enforce
|
|
helm upgrade --install kyverno-policies . \
|
|
--namespace kyverno \
|
|
--create-namespace \
|
|
-f values-production.yaml
|
|
|
|
# Проверить задеплоенные политики
|
|
kubectl get clusterpolicies -l helm.sh/chart=kyverno-policies-1.0.0
|
|
|
|
# Rollback если что-то пошло не так
|
|
helm rollback kyverno-policies 1 -n kyverno
|
|
```
|
|
|
|
## PolicyException — управляемые исключения
|
|
|
|
```bash
|
|
# Применить временное исключение для legacy-сервиса
|
|
kubectl apply -f - <<EOF
|
|
apiVersion: kyverno.io/v2beta1
|
|
kind: PolicyException
|
|
metadata:
|
|
name: legacy-app-exception
|
|
namespace: production
|
|
annotations:
|
|
exception.company.com/expires: "2025-03-01"
|
|
exception.company.com/reason: "Migration in progress — JIRA-1234"
|
|
exception.company.com/approved-by: "platform-team"
|
|
spec:
|
|
exceptions:
|
|
- policyName: require-resource-limits
|
|
ruleNames:
|
|
- check-container-limits
|
|
match:
|
|
resources:
|
|
kinds:
|
|
- Pod
|
|
namespaces:
|
|
- production
|
|
names:
|
|
- legacy-app-*
|
|
EOF
|
|
|
|
# Посмотреть все активные исключения
|
|
kubectl get policyexceptions -A
|
|
```
|
|
|
|
## CI/CD для Helm chart политик
|
|
|
|
```bash
|
|
# Линтинг
|
|
helm lint . -f values.yaml
|
|
helm lint . -f values-production.yaml
|
|
|
|
# Dry-run деплой
|
|
helm upgrade --install kyverno-policies . \
|
|
--namespace kyverno \
|
|
-f values-production.yaml \
|
|
--dry-run
|
|
|
|
# diff перед применением (требует helm-diff plugin)
|
|
helm plugin install https://github.com/databus23/helm-diff
|
|
helm diff upgrade kyverno-policies . \
|
|
--namespace kyverno \
|
|
-f values-production.yaml
|
|
```
|
|
|
|
## Версионирование изменений
|
|
|
|
```yaml
|
|
# При изменении политики — обновляйте версию в Chart.yaml
|
|
# и добавляйте запись в аннотацию политики:
|
|
annotations:
|
|
policies.kyverno.io/version: "1.1.0"
|
|
policies.kyverno.io/changelog: |
|
|
1.1.0: Добавлена проверка ephemeral containers
|
|
1.0.0: Начальная версия
|
|
```
|