Basic Infrastructure Deployment
На этом этапе мы развернём базовые инфраструктурные компоненты, которые необходимы для работы всех остальных сервисов: Traefik (ingress controller), Consul (service discovery), и Vault (управление секретами).
Порядок развёртывания
Helmfile автоматически развернёт сервисы в правильном порядке благодаря зависимостям, определённым в kubernetes/apps/_others.yaml. Порядок следующий:
- Namespaces - создание всех необходимых namespace
- Traefik - ingress controller для маршрутизации трафика
- Consul - service discovery и service mesh
- Vault - система управления секретами
Все остальные сервисы зависят от этих базовых компонентов.
Deployment базовых of Services
Выполнение развёртки
Navigate to директорию с Kubernetes конфигурацией:
cd kubernetes
Make sure, что Helmfile инициализирован (см. Развёртка Kubernetes кластера):
helmfile init --force
Run развёртку базовой инфраструктуры:
helmfile -e k8s apply
Эта команда:
- Прочитает все конфигурации из
releases/иenvs/k8s/ - Применит зависимости между сервисами
- Развернёт сервисы в правильном порядке
- Создаст все необходимые ресурсы в Kubernetes
Verification статуса
Check список всех релизов:
helmfile -e k8s list
Check статус подов:
kubectl get pods --all-namespaces
Make sure, что все системные поды запущены:
kubectl get pods -n ingress
kubectl get pods -n service
Traefik
Traefik - современный reverse proxy и load balancer, используемый как ingress controller.
Verification Traefik
Check статус подов Traefik:
kubectl get pods -n ingress -l app.kubernetes.io/name=traefik
Check сервисы:
kubectl get svc -n ingress
Verification ingress
После развёртки других сервисов, проверьте ingress:
kubectl get ingress --all-namespaces
Consul
Consul обеспечивает service discovery, health checking и service mesh функциональность.
Verification Consul
Check статус подов Consul:
kubectl get pods -n service -l app=consul
Check UI Consul (если включен):
kubectl get ingress -n service -l app=consul
Доступ к Consul UI обычно по адресу consul.local (зависит от конфигурации).
Vault
Vault - система управления секретами с централизованным хранением и политиками доступа.
Инициализация Vault
После развёртки Vault необходимо его инициализировать.
1. Verification доступности
Make sure, что Vault запущен:
kubectl get pods -n service -l app=vault
Все поды должны быть в статусе Running.
2. Инициализация Vault
Инициализируйте Vault (выполняется только один раз):
kubectl exec -n service deployment/vault -- vault operator init
Команда вернёт:
- Unseal Keys (5 ключей) - используйте любые 3 из 5 для распечатывания
- Initial Root Token - корневой токен для первоначальной настройки
ВАЖНО: Сохраните эти ключи в безопасном месте! Без них вы не сможете получить доступ к Vault.
Пример вывода:
Unseal Key 1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Unseal Key 2: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Unseal Key 3: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Unseal Key 4: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Unseal Key 5: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Initial Root Token: s.xxxxxxxxxxxxxxxxxxxxx
3. Распечатывание Vault (Unseal)
Для работы Vault необходимо распечатать его, используя unseal ключи. Нужно использовать минимум 3 из 5 ключей.
Для каждого пода Vault выполните unseal:
# Get list of Vault pods
kubectl get pods -n service -l app=vault
# Execute unseal for each pod (минимум 3 раза с разными ключами)
kubectl exec -n service vault-0 -- vault operator unseal <unseal-key-1>
kubectl exec -n service vault-0 -- vault operator unseal <unseal-key-2>
kubectl exec -n service vault-0 -- vault operator unseal <unseal-key-3>
# Повторите для других подов (vault-1, vault-2, если есть)
Check статус:
kubectl exec -n service deployment/vault -- vault status
Статус должен показать Sealed: false.
4. Configuration Vault для Kubernetes
Run скрипт настройки Vault:
cd kubernetes/scripts
chmod +x vault-setup.sh
./vault-setup.sh
Этот скрипт автоматически:
- Включает Kubernetes auth method
- Настраивает подключение к Kubernetes API
- Создаёт policies для всех сервисов
- Создаёт роли Kubernetes Auth для всех сервисов
5. Вход в Vault
Войдите в Vault используя root token:
kubectl exec -n service deployment/vault -- vault login <initial-root-token>
Или через UI:
# Получите URL для доступа к Vault UI
kubectl get ingress -n service -l app=vault
Откройте URL в браузере (обычно vault.local) и войдите используя root token.
6. Смена root token (рекомендуется)
После первоначальной настройки рекомендуется сменить root token:
kubectl exec -n service deployment/vault -- vault auth enable userpass
kubectl exec -n service deployment/vault -- vault write auth/userpass/users/admin \
password=<new-password> policies=root
Затем используйте новый пользователь для входа вместо root token.
Синхронизация Secrets с Vault
После настройки Vault, синхронизируйте секреты из _all.yaml:
cd kubernetes/scripts
./vault-sync-secrets.sh
Для синхронизации конкретного сервиса:
./vault-sync-secrets.sh authentik
./vault-sync-secrets.sh vaultwarden
Подробнее о работе с секретами см. Настройка секретов.
Автоматическое распечатывание Vault
Для автоматического распечатывания Vault после перезапуска можно использовать Vault Auto-unseal или хранить unseal ключи в Kubernetes Secrets (менее безопасно, но проще).
Рекомендуется настроить автоматическое распечатывание для production окружений.
Verification работы базовой инфраструктуры
После развёртки всех компонентов, проверьте:
Traefik
# Verification подов
kubectl get pods -n ingress
# Verification of Services
kubectl get svc -n ingress
# Verification ingress routes
kubectl get ingressroute --all-namespaces
Consul
# Verification подов
kubectl get pods -n service -l app=consul
# Verification of Services в Consul
kubectl exec -n service deployment/consul -- consul members
Vault
# Verification статуса
kubectl exec -n service deployment/vault -- vault status
# Verification списка Secrets
kubectl exec -n service deployment/vault -- vault kv list secret/
Troubleshooting
Issue: Traefik не запускается
Check логи:
kubectl logs -n ingress -l app.kubernetes.io/name=traefik
Check конфигурацию:
kubectl get configmap -n ingress
kubectl describe pod -n ingress -l app.kubernetes.io/name=traefik
Issue: Consul не может подключиться к узлам
Check сетевые политики:
kubectl get networkpolicies -n service
Check логи:
kubectl logs -n service -l app=consul
Issue: Vault запечатан (Sealed)
Выполните unseal:
kubectl exec -n service deployment/vault -- vault operator unseal <unseal-key>
Нужно выполнить минимум 3 раза с разными ключами.
Issue: Не могу синхронизировать секреты
Check, что Vault распечатан:
kubectl exec -n service deployment/vault -- vault status
Check права доступа:
kubectl exec -n service deployment/vault -- vault auth list
Next Steps
После успешной развёртки базовой инфраструктуры:
- Развёртка сервисов - развёртка всех остальных сервисов (базы данных, приложения, мониторинг)