This commit is contained in:
2026-03-26 18:58:53 +07:00
commit 38ecc2ad24
12 changed files with 225 additions and 0 deletions

62
README.md Normal file
View File

@@ -0,0 +1,62 @@
# Custom Nginx + Image Signing + Kyverno Policy
## Описание
Демонстрация полного цикла: сборка кастомного nginx-образа, подпись через HashiCorp Vault, деплой в Kubernetes через Helm и валидация подписи Kyverno.
---
## Шаги запуска
### 1. Подготовка Vault
- Настройте Transit Engine и сгенерируйте ключ `container-sign` в Vault.
- Примените политику из `vault_approle_policy.hcl`:
```sh
vault policy write container-sign vault_approle_policy.hcl
```
- Создайте appRole и получите RoleID/SecretID:
```sh
sh vault_approle_setup.sh
```
- Сохраните RoleID и SecretID для переменных CI/CD.
### 2. Настройка GitLab CI/CD
- В настройках проекта добавьте переменные:
- `VAULT_ROLE_ID` — из Vault
- `VAULT_SECRET_ID` — из Vault
- Убедитесь, что `.gitlab-ci.yml` корректно настроен под ваш реестр и адрес Vault.
### 3. Сборка и подпись образа
- Запустите pipeline в GitLab.
- Образ будет собран, отправлен в реестр и подписан через cosign с использованием Vault.
### 4. Деплой в Kubernetes
- Перейдите в директорию helm-чарта:
```sh
cd helm/nginx
helm install nginx .
```
- Проверьте, что деплой прошёл успешно.
### 5. Настройка Kyverno
- Получите публичный ключ из Vault:
```sh
vault read -field=public_key transit/keys/container-sign
```
- Вставьте ключ в `kyverno-image-signature-policy.yaml` вместо `<VAULT_PUBLIC_KEY>`.
- Примените политику:
```sh
kubectl apply -f kyverno-image-signature-policy.yaml
```
---
## Итог
- Только подписанные образы будут запускаться в кластере.
- Весь процесс автоматизирован через CI/CD и Vault.