init
This commit is contained in:
104
k8s/README.md
Normal file
104
k8s/README.md
Normal file
@ -0,0 +1,104 @@
|
||||
# Kubernetes манифесты для Demo SPA App
|
||||
|
||||
## Структура манифестов
|
||||
|
||||
```
|
||||
k8s/
|
||||
├── namespace.yaml # Namespace для приложения
|
||||
├── deployment.yaml # React SPA приложение
|
||||
├── service.yaml # Внутренний сервис
|
||||
├── dex-authenticator.yaml # DexAuthenticator для аутентификации
|
||||
├── ingress.yaml # Внешний доступ с SSL
|
||||
└── kustomization.yaml # Kustomize конфигурация
|
||||
```
|
||||
|
||||
## Развертывание
|
||||
|
||||
### 1. Подготовка образа
|
||||
|
||||
```bash
|
||||
# Сборка образа
|
||||
docker build -t demo-spa-app:latest .
|
||||
|
||||
# Размещение в registry (замените на ваш registry)
|
||||
docker tag demo-spa-app:latest your-registry.com/demo-spa-app:latest
|
||||
docker push your-registry.com/demo-spa-app:latest
|
||||
```
|
||||
|
||||
### 2. Настройка конфигурации
|
||||
|
||||
Перед развертыванием обновите следующие параметры:
|
||||
|
||||
- **Домен**: `demo-spa.example.com` → ваш домен
|
||||
- **SSL сертификат**: убедитесь что cert-manager настроен
|
||||
- **Dex**: должен быть развернут в кластере (обычно в namespace `d8-user-authn`)
|
||||
|
||||
### 3. Развертывание в Kubernetes
|
||||
|
||||
```bash
|
||||
# Применение всех манифестов
|
||||
kubectl apply -k k8s/
|
||||
|
||||
# Или по отдельности
|
||||
kubectl apply -f k8s/namespace.yaml
|
||||
kubectl apply -f k8s/deployment.yaml
|
||||
kubectl apply -f k8s/service.yaml
|
||||
kubectl apply -f k8s/dex-authenticator.yaml
|
||||
kubectl apply -f k8s/ingress.yaml
|
||||
```
|
||||
|
||||
### 4. Проверка развертывания
|
||||
|
||||
```bash
|
||||
# Проверка подов
|
||||
kubectl get pods -n demo-spa
|
||||
|
||||
# Проверка сервисов
|
||||
kubectl get svc -n demo-spa
|
||||
|
||||
# Проверка ingress
|
||||
kubectl get ingress -n demo-spa
|
||||
|
||||
# Логи приложения
|
||||
kubectl logs -f deployment/demo-spa-app -n demo-spa
|
||||
|
||||
# Логи DexAuthenticator
|
||||
kubectl logs -f deployment/demo-spa-auth -n demo-spa
|
||||
```
|
||||
|
||||
## Конфигурация DexAuthenticator
|
||||
|
||||
### Настройка Dex
|
||||
|
||||
DexAuthenticator автоматически интегрируется с Dex, развернутым в кластере. Дополнительная настройка OAuth2 клиентов не требуется - Deckhouse управляет этим автоматически.
|
||||
|
||||
### Основные параметры DexAuthenticator
|
||||
|
||||
- **applicationDomain**: домен вашего приложения
|
||||
- **sendAuthorizationHeader**: отправка заголовков авторизации в приложение
|
||||
- **keepUsersLoggedInFor**: время жизни сессии (по умолчанию 24h)
|
||||
- **allowedGroups**: список разрешенных групп (пустой = все группы)
|
||||
- **cookieConfig**: настройки безопасности куки
|
||||
|
||||
## Архитектура
|
||||
|
||||
```
|
||||
Internet → Ingress → DexAuthenticator → React SPA
|
||||
↓
|
||||
Dex (аутентификация)
|
||||
```
|
||||
|
||||
- **Ingress**: Внешний доступ с SSL
|
||||
- **DexAuthenticator**: Нативная аутентификация через Dex
|
||||
- **React SPA**: Основное приложение
|
||||
- **Dex**: OIDC провайдер
|
||||
|
||||
## Мониторинг
|
||||
|
||||
```bash
|
||||
# Проверка health check
|
||||
curl https://demo-spa.example.com/health
|
||||
|
||||
# Проверка аутентификации
|
||||
curl -I https://demo-spa.example.com/
|
||||
```
|
||||
53
k8s/deployment.yaml
Normal file
53
k8s/deployment.yaml
Normal file
@ -0,0 +1,53 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: demo-spa-app
|
||||
namespace: demo-spa
|
||||
labels:
|
||||
app: demo-spa-app
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
matchLabels:
|
||||
app: demo-spa-app
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: demo-spa-app
|
||||
spec:
|
||||
containers:
|
||||
- name: demo-spa-app
|
||||
image: demo-spa-app:latest
|
||||
imagePullPolicy: Never
|
||||
ports:
|
||||
- containerPort: 80
|
||||
resources:
|
||||
requests:
|
||||
memory: "64Mi"
|
||||
cpu: "50m"
|
||||
limits:
|
||||
memory: "128Mi"
|
||||
cpu: "100m"
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: 80
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 10
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: 80
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
env:
|
||||
- name: NODE_ENV
|
||||
value: "production"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
22
k8s/dex-authenticator.yaml
Normal file
22
k8s/dex-authenticator.yaml
Normal file
@ -0,0 +1,22 @@
|
||||
apiVersion: deckhouse.io/v1
|
||||
kind: DexAuthenticator
|
||||
metadata:
|
||||
name: demo-spa-auth
|
||||
namespace: demo-spa
|
||||
spec:
|
||||
# Домен приложения
|
||||
applicationDomain: "demo-spa.127.0.0.1.sslip.io"
|
||||
|
||||
# Отправка заголовков авторизации
|
||||
sendAuthorizationHeader: true
|
||||
|
||||
# SSL сертификат
|
||||
applicationIngressCertificateSecretName: ingress-tls
|
||||
applicationIngressClassName: nginx
|
||||
|
||||
# Время жизни сессии
|
||||
keepUsersLoggedInFor: "720h" # 30 дней
|
||||
|
||||
# Разрешенные группы (пустой массив = все группы)
|
||||
allowedGroups: []
|
||||
|
||||
27
k8s/ingress.yaml
Normal file
27
k8s/ingress.yaml
Normal file
@ -0,0 +1,27 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: demo-spa-ingress
|
||||
namespace: demo-spa
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/auth-url: "https://demo-spa.127.0.0.1.sslip.io/dex-authenticator/auth"
|
||||
nginx.ingress.kubernetes.io/auth-signin: "http://demo-spa.127.0.0.1.sslip.io/dex-authenticator/sign_in"
|
||||
nginx.ingress.kubernetes.io/auth-response-headers: "X-Auth-Request-User,X-Auth-Request-Email,X-Auth-Request-Groups"
|
||||
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
tls:
|
||||
- hosts:
|
||||
- demo-spa.127.0.0.1.sslip.io
|
||||
secretName: demo-spa-tls
|
||||
rules:
|
||||
- host: demo-spa.127.0.0.1.sslip.io
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: demo-spa-service
|
||||
port:
|
||||
number: 80
|
||||
15
k8s/namespace.yaml
Normal file
15
k8s/namespace.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: demo-spa
|
||||
labels:
|
||||
name: demo-spa
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
25
k8s/service.yaml
Normal file
25
k8s/service.yaml
Normal file
@ -0,0 +1,25 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: demo-spa-service
|
||||
namespace: demo-spa
|
||||
labels:
|
||||
app: demo-spa-app
|
||||
spec:
|
||||
selector:
|
||||
app: demo-spa-app
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: 80
|
||||
protocol: TCP
|
||||
type: ClusterIP
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user