Index
Документация по настройке глобального балансировщика, VPN-безопасных internal-доменов и Authentik SSO в Kubernetes.
Оглавление
- Описание
- Архитектура
- Быстрый старт
- Команды
- Настройка Authentik Outpost
- Внутренние сервисы
- Публичные сервисы
- Troubleshooting
Описание
Ingress NGINX Controller и Cert-Manager обеспечивают глобальную балансировку нагрузки для Kubernetes кластера с автоматическим управлением TLS сертификатами через Let's Encrypt.
Возможности
- ✅ Глобальный балансировщик через hostNetwork (порты 80/443 на всех мастер нодах)
- ✅ Автоматическое получение TLS сертификатов (Let's Encrypt)
- ✅ VPN whitelist для внутренних сервисов (10.99.0.0/24)
- ✅ Authentik SSO для защиты внутренних сервисов
- ✅ HTTP-01 challenge для Let's Encrypt
- ✅ Автоматическое обновление сертификатов
Текущая конфигурация
- Ingress Controller: ingress-nginx (DaemonSet, hostNetwork, порты 80/443 на всех мастер нодах)
- Cert-Manager: автоматическое управление TLS сертификатами
- ClusterIssuer: Let's Encrypt Production (HTTP-01)
- VPN Network: 10.99.0.0/24 (WireGuard)
- Domain: ai-ops.tech
Архитектура
Внутренние сервисы (VPN + SSO)
auth.internal.ai-ops.tech→ Authentik UIs3.internal.ai-ops.tech→ MinIO Browser (встроенный UI)longhorn.internal.ai-ops.tech→ Longhorn UIk8s-dashboard.internal.ai-ops.tech→ Kubernetes Dashboardredis.internal.ai-ops.tech→ Redis Insight UIpostgres.internal.ai-ops.tech→ PostgreSQL Operator UIglitchtip.internal.ai-ops.tech→ GlitchTip UInexus.internal.ai-ops.tech→ Nexus Repository Manager UIsonarqube.internal.ai-ops.tech→ SonarQube UIvault.internal.ai-ops.tech→ Vault UIkafka.internal.ai-ops.tech→ Kafka UI
Компоненты
| Компонент | Namespace | Описание |
|---|---|---|
| Ingress NGINX Controller | ingress-nginx |
Глобальный балансировщик (DaemonSet, hostNetwork, порты 80/443 на всех мастер нодах) |
| Cert-Manager | cert-manager |
Автоматическое управление TLS сертификатами |
| ClusterIssuer | Cluster-wide | Let's Encrypt (HTTP-01 challenge) |
Быстрый старт
1. Очистка старой установки (если ingress-nginx установлен через Ansible)
Если ingress-nginx был установлен ранее через Ansible, его нужно удалить перед установкой через Helm:
1 2 | |
2. Установка ingress-nginx и cert-manager
1 | |
Эта команда: 1. Установит ingress-nginx через Helm (DaemonSet, hostNetwork, порты 80/443 на всех мастер нодах) 2. Установит cert-manager через Helm 3. Создаст ClusterIssuer для Let's Encrypt
Примечание: Если ingress-nginx был установлен ранее через Ansible, команда ingress-install-nginx автоматически обнаружит это и предложит сначала выполнить make ingress-cleanup-old.
Важно: Ingress controller будет размещен на всех мастер нодах (DaemonSet). Убедитесь, что: - Порты 80 и 443 свободны на всех мастер нодах - DNS записи для доменов указывают на IP адреса всех мастер нод (A записи) - Firewall разрешает входящие соединения на порты 80 и 443 на всех мастер нодах
2. Настройка Authentik Outpost
См. раздел Настройка Authentik Outpost
3. Применение ingress манифестов
1 | |
4. Проверка статуса
1 | |
Важно: Убедитесь, что ClusterIssuer создан:
1 | |
После применения ingress манифестов, cert-manager автоматически создаст Certificate ресурсы и запросит сертификаты у Let's Encrypt. Проверьте статус сертификатов:
1 2 | |
Примечание: Создание сертификатов может занять 1-2 минуты. Если сертификат не создается, см. раздел Troubleshooting.
Команды
Управление
1 2 3 4 5 6 7 | |
Настройка Authentik Outpost
Authentik Outpost необходим для защиты внутренних сервисов через SSO. Outpost должен быть настроен в Authentik UI.
Шаг 1: Создание Proxy Provider в Authentik
- Откройте Authentik UI:
https://auth.internal.ai-ops.tech - Перейдите в Applications → Providers
- Нажмите Create → Proxy Provider
- Заполните форму:
- Name:
nginx-proxy - Authorization flow: выберите существующий flow или создайте новый
- External host:
https://auth.internal.ai-ops.tech - Internal host:
http://authentik.tech-authentik.svc.cluster.local:9000 - Internal host SSL Validation: отключено (если используется HTTP внутри кластера)
- Сохраните Provider
Шаг 2: Создание Application в Authentik
- Перейдите в Applications → Applications
- Нажмите Create
- Заполните форму:
- Name:
Internal Services - Slug:
internal-services - Provider: выберите созданный
nginx-proxy - Launch URL:
https://auth.internal.ai-ops.tech - Сохраните Application
Шаг 3: Создание Outpost в Authentik
- Перейдите в Applications → Outposts
- Нажмите Create
- Заполните форму:
- Name:
nginx-outpost - Type:
Proxy - Integration:
Docker - Applications: выберите созданное приложение
Internal Services - Configuration: оставьте по умолчанию
- Сохраните Outpost
Шаг 4: Проверка Outpost
После создания Outpost, Authentik автоматически создаст необходимые endpoints:
- https://auth.internal.ai-ops.tech/outpost.goauthentik.io/auth/nginx - для проверки аутентификации
- https://auth.internal.ai-ops.tech/outpost.goauthentik.io/start?rd=$scheme://$host$request_uri - для редиректа на страницу входа
Эти URL используются в аннотациях ingress для внутренних сервисов.
Внутренние сервисы
Все внутренние сервисы имеют следующие характеристики:
- ✅ VPN Whitelist: доступ только из сети 10.99.0.0/24
- ✅ Authentik SSO: защита через Authentik Proxy Outpost
- ✅ TLS: автоматические сертификаты через cert-manager
- ✅ HTTPS Redirect: автоматическое перенаправление на HTTPS
Список внутренних сервисов
| Домен | Сервис | Namespace | Порт |
|---|---|---|---|
auth.internal.ai-ops.tech |
Authentik UI | tech-authentik |
9000 |
s3.internal.ai-ops.tech |
MinIO Browser | tech-minio-tenants |
9000 |
longhorn.internal.ai-ops.tech |
Longhorn UI | longhorn-system |
8000 |
k8s-dashboard.internal.ai-ops.tech |
Kubernetes Dashboard | tech-dashboard |
8000 |
redis.internal.ai-ops.tech |
Redis Insight UI | tech-redis-clusters |
5540 |
postgres.internal.ai-ops.tech |
PostgreSQL Operator UI | tech-postgres-operator |
8080 |
glitchtip.internal.ai-ops.tech |
GlitchTip UI | tech-glitchtip |
80 |
nexus.internal.ai-ops.tech |
Nexus UI | tech-nexus-instances |
8081 |
sonarqube.internal.ai-ops.tech |
SonarQube UI | tech-sonarqube |
9000 |
vault.internal.ai-ops.tech |
Vault UI | tech-vault-instances |
8200 |
kafka.internal.ai-ops.tech |
Kafka UI | tech-kafka-clusters |
8080 |
Аннотации для внутренних сервисов
Все внутренние ingress используют следующие аннотации:
1 2 3 4 5 6 7 8 9 10 11 | |
Создание новых ingress
Для создания нового внутреннего сервиса создайте файл в manifests/ingress/internal/ с аналогичной структурой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | |
Troubleshooting
Ingress controller не отвечает
1 2 3 4 5 6 7 8 9 10 11 12 | |
Cert-manager не выдает сертификаты
Важно: Если вы видите фейковый сертификат "Kubernetes Ingress Controller Fake Certificate" в браузере, это означает, что cert-manager не смог создать валидный сертификат. Наиболее частая причина - отсутствие ClusterIssuer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
Сертификат не создается
Возможные причины:
-
ClusterIssuer не создан (самая частая причина):
1 2 3 4 5 6
# Проверить наличие ClusterIssuer kubectl get clusterissuer letsencrypt-http # Если отсутствует, создать: cd infra/k8s/ingress make ingress-install-cert-manager -
DNS записи неправильно настроены: домен должен указывать на IP адреса всех мастер нод (A записи)
1 2 3 4
# Проверить DNS nslookup auth.internal.ai-ops.tech dig auth.internal.ai-ops.tech # Должны быть возвращены IP адреса всех мастер нод -
HTTP-01 challenge недоступен: cert-manager должен иметь доступ к
.well-known/acme-challenge/пути1 2 3
# Проверить доступность challenge пути curl -I http://auth.internal.ai-ops.tech/.well-known/acme-challenge/test # Должен вернуть 404 (это нормально для несуществующего challenge) -
Порт 80 недоступен из интернета: Let's Encrypt должен иметь возможность обратиться к домену по HTTP на порту 80
1 2 3
# Проверить доступность порта 80 на всех мастер нодах telnet <master-node-ip> 80 # Повторить для каждой мастер ноды -
Лимиты Let's Encrypt: не более 50 сертификатов в неделю на домен
1 2 3 4 5 6 7 8 | |
Authentik SSO не работает
- Проверьте Outpost: убедитесь, что Outpost создан и активен в Authentik UI
- Проверьте URL: убедитесь, что URL в аннотациях ingress совпадают с URL Outpost
- Проверьте доступность Authentik:
https://auth.internal.ai-ops.techдолжен быть доступен
1 2 3 4 5 6 | |
VPN whitelist не работает
- Проверьте IP адрес: убедитесь, что ваш IP находится в диапазоне 10.99.0.0/24
- Проверьте WireGuard: убедитесь, что VPN подключен и работает
- Проверьте аннотации: убедитесь, что аннотация
whitelist-source-rangeприсутствует
1 2 3 4 5 | |
Сервис недоступен через ingress
- Проверьте сервис: убедитесь, что сервис существует и имеет правильный порт
- Проверьте ingress: убедитесь, что ingress правильно настроен
- Проверьте endpoints: убедитесь, что у сервиса есть активные endpoints
1 2 3 4 5 6 7 8 9 | |
Проблемы с DNS
- Проверьте DNS записи: убедитесь, что домены указывают на IP адреса всех мастер нод (A записи)
- Проверьте внешний балансировщик: убедитесь, что внешний балансировщик правильно настроен
- Проверьте порты на всех мастер нодах: убедитесь, что порты 80 и 443 открыты и доступны
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Дополнительные ресурсы
- 📚 Ingress NGINX Documentation
- 📚 Cert-Manager Documentation
- 📚 Authentik Documentation
- 📚 Let's Encrypt Documentation