63 lines
2.1 KiB
Markdown
63 lines
2.1 KiB
Markdown
# 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.
|