Upload files to "loki-ingress-argocd-setup"

This commit is contained in:
2026-01-06 07:36:53 +00:00
parent dce0be1095
commit 3039f872aa
5 changed files with 1476 additions and 0 deletions

View File

@@ -0,0 +1,148 @@
╔═══════════════════════════════════════════════════════════════════════════╗
║ ║
║ 🚀 LOKI INGRESS для ArgoCD - НАЧНИ ОТСЮДА 🚀 ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════╝
📚 ДОКУМЕНТАЦИЯ (читай в этом порядке):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. INDEX.md → Общий обзор и навигация
2. README.md → Описание файлов и быстрый старт
3. CHEATSHEET.md → Шпаргалка с командами
4. ARGOCD_LOKI_INGRESS_SETUP.md → Полная пошаговая инструкция (MAIN!)
5. ARCHITECTURE.md → Схемы и диаграммы
📦 YAML ФАЙЛЫ ДЛЯ РАЗВЕРТЫВАНИЯ:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Для директории apps/loki/:
✓ secret-basic-auth.yaml → Basic Auth credentials
✓ middleware-auth.yaml → Traefik middleware
✓ ingress-loki.yaml → Ingress с HTTPS
Для директории apps/monitoring/:
✓ grafana-datasource-loki.yaml → Grafana datasource config
🤖 АВТОМАТИЗАЦИЯ:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ deploy-loki-ingress.sh → Скрипт автоматического развертывания
🚀 БЫСТРЫЙ СТАРТ:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ВАРИАНТ 1: Автоматический (рекомендуется)
──────────────────────────────────────────
1. Клонируй git репозиторий:
$ git clone http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops.git
$ cd k3s-gitops
2. Скопируй YAML файлы:
$ cp secret-basic-auth.yaml apps/loki/
$ cp middleware-auth.yaml apps/loki/
$ cp ingress-loki.yaml apps/loki/
3. Запусти скрипт развертывания:
$ chmod +x deploy-loki-ingress.sh
$ ./deploy-loki-ingress.sh
4. Настрой DNS для loki.thedevops.dev → 5.182.17.194
ВАРИАНТ 2: Ручной
──────────────────
См. подробную инструкцию в ARGOCD_LOKI_INGRESS_SETUP.md
✅ ПРОВЕРКА ПОСЛЕ УСТАНОВКИ:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Проверь статус ресурсов:
$ kubectl get ingress,certificate,secret -n loki
2. Тестовый запрос:
$ curl -u admin:lokipass123 https://loki.thedevops.dev/ready
Ожидается: "ready"
3. Открой в браузере:
URL: https://loki.thedevops.dev
Username: admin
Password: lokipass123
🔐 БЕЗОПАСНОСТЬ (ВАЖНО!):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ ОБЯЗАТЕЛЬНО измени пароль по умолчанию!
Генерация нового пароля:
$ htpasswd -nb admin your-secure-password
Затем обнови значение в secret-basic-auth.yaml
📋 ЧЕК-ЛИСТ:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[ ] Git репозиторий клонирован
[ ] YAML файлы скопированы в apps/loki/
[ ] Git commit и push выполнены
[ ] ArgoCD синхронизирован
[ ] DNS настроен для loki.thedevops.dev
[ ] Ingress получил IP адрес
[ ] Certificate создан (Ready: True)
[ ] Curl тест пройден
[ ] Браузер тест пройден
[ ] Пароль изменен
[ ] Loki добавлен в Grafana
[ ] Логи видны в Grafana Explore
🆘 НУЖНА ПОМОЩЬ?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Быстрые команды → CHEATSHEET.md
2. Troubleshooting → ARGOCD_LOKI_INGRESS_SETUP.md (раздел Troubleshooting)
3. Логи:
$ kubectl logs -n loki loki-0
$ kubectl logs -n cert-manager deployment/cert-manager
$ kubectl get events -n loki --sort-by='.lastTimestamp'
🎯 ИТОГОВЫЙ РЕЗУЛЬТАТ:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
После успешного развертывания ты получишь:
✓ Безопасный HTTPS доступ к Loki
✓ Автоматическое управление через ArgoCD
✓ Интеграция с Grafana для просмотра логов
✓ Production-ready конфигурация
✓ Централизованное хранение логов кластера
Доступ:
URL: https://loki.thedevops.dev
Username: admin
Password: lokipass123 (ИЗМЕНИ!)
📞 ТВОЯ ИНФРАСТРУКТУРА:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ArgoCD: https://argocd.thedevops.dev
Grafana: https://grafana.thedevops.dev
Gitea: http://gitea-http.gitea.svc.cluster.local:3000
Loki: https://loki.thedevops.dev (после развертывания)
🎉 Happy Logging! 🚀📊
╔═══════════════════════════════════════════════════════════════════════════╗
║ Vladimiras, начни с файла INDEX.md для полной навигации по документации ║
╚═══════════════════════════════════════════════════════════════════════════╝

View File

@@ -0,0 +1,321 @@
# Loki Architecture Diagram
## Архитектура решения
```mermaid
graph TB
subgraph "External Access"
Browser[🌐 Browser]
DNS[🔍 DNS: loki.thedevops.dev]
end
subgraph "Traefik Ingress Controller"
Traefik[⚡ Traefik<br/>Port 80/443]
LE[🔐 Let's Encrypt<br/>TLS Certificate]
end
subgraph "Loki Namespace"
Ingress[📥 Ingress<br/>loki.thedevops.dev]
Middleware[🔒 Basic Auth<br/>Middleware]
Secret[🗝️ Secret<br/>loki-basic-auth]
Service[🔌 Service<br/>loki:3100]
StatefulSet[💾 StatefulSet<br/>loki-0]
PVC[📀 PVC<br/>loki-data]
Promtail[📡 DaemonSet<br/>Promtail]
end
subgraph "Monitoring Namespace"
Grafana[📊 Grafana]
Prometheus[📈 Prometheus]
end
subgraph "ArgoCD"
ArgoCD[🔄 ArgoCD<br/>Auto-Sync]
GitRepo[📚 Gitea<br/>k3s-gitops]
end
subgraph "Storage"
Longhorn[💿 Longhorn<br/>Distributed Storage]
end
Browser -->|HTTPS| DNS
DNS -->|Resolve| Traefik
Traefik -->|TLS Termination| LE
Traefik -->|Route| Ingress
Ingress -->|Apply| Middleware
Middleware -->|Validate| Secret
Middleware -->|Forward| Service
Service -->|Load Balance| StatefulSet
StatefulSet -->|Store Logs| PVC
PVC -->|Backend| Longhorn
Promtail -.->|Push Logs| Service
Grafana -.->|Query LogQL| Service
Prometheus -.->|Scrape Metrics| StatefulSet
GitRepo -->|Watch| ArgoCD
ArgoCD -->|Deploy| Ingress
ArgoCD -->|Deploy| Middleware
ArgoCD -->|Deploy| Secret
ArgoCD -->|Deploy| StatefulSet
style Browser fill:#e1f5ff
style DNS fill:#e1f5ff
style Traefik fill:#ffe1e1
style LE fill:#ffe1e1
style Ingress fill:#fff4e1
style Middleware fill:#fff4e1
style Secret fill:#fff4e1
style Service fill:#e1ffe1
style StatefulSet fill:#e1ffe1
style PVC fill:#f0e1ff
style Promtail fill:#e1ffe1
style Grafana fill:#ffe1f5
style Prometheus fill:#ffe1f5
style ArgoCD fill:#e1f0ff
style GitRepo fill:#e1f0ff
style Longhorn fill:#f0e1ff
```
## Data Flow - Логи
```mermaid
sequenceDiagram
participant Apps as Kubernetes Pods
participant Promtail as Promtail DaemonSet
participant Loki as Loki StatefulSet
participant Storage as Longhorn PVC
participant Grafana as Grafana
Apps->>Promtail: Write logs to stdout/stderr
Note over Promtail: Parse & Label logs
Promtail->>Loki: HTTP POST /loki/api/v1/push
Note over Loki: Index labels<br/>Compress chunks
Loki->>Storage: Write compressed chunks
Grafana->>Loki: LogQL Query
Loki->>Storage: Read chunks
Loki->>Grafana: Return log lines
Note over Grafana: Display in UI
```
## Access Flow - External User
```mermaid
sequenceDiagram
participant User as Browser
participant DNS as DNS Server
participant Traefik as Traefik
participant Ingress as Ingress
participant Middleware as Middleware
participant Secret as Secret
participant Loki as Loki Service
User->>DNS: Resolve loki.thedevops.dev
DNS->>User: Return IPs
User->>Traefik: HTTPS Request
Note over Traefik: TLS Termination<br/>(Let's Encrypt)
Traefik->>Ingress: Route to loki namespace
Ingress->>Middleware: Apply loki-auth
Middleware->>Secret: Get credentials
Middleware->>Middleware: Validate Basic Auth
alt Valid Credentials
Middleware->>Loki: Forward request
Loki->>Middleware: Response
Middleware->>Traefik: Response
Traefik->>User: HTTPS Response
else Invalid Credentials
Middleware->>User: 401 Unauthorized
end
```
## ArgoCD GitOps Flow
```mermaid
graph LR
subgraph "Developer"
Dev[👨‍💻 Developer]
Local[💻 Local Git]
end
subgraph "Gitea"
Repo[📚 k3s-gitops<br/>Repository]
end
subgraph "ArgoCD"
Sync[🔄 ArgoCD<br/>Controller]
App[📦 Application<br/>loki]
end
subgraph "Kubernetes"
Resources[☸️ K8s Resources<br/>Ingress, Secret, etc]
end
Dev -->|1. Edit YAML| Local
Local -->|2. Git Push| Repo
Repo -->|3. Webhook/Poll| Sync
Sync -->|4. Detect Changes| App
App -->|5. kubectl apply| Resources
Resources -.->|6. Status| App
App -.->|7. Sync Status| Dev
style Dev fill:#e1f5ff
style Local fill:#e1f5ff
style Repo fill:#e1f0ff
style Sync fill:#e1ffe1
style App fill:#e1ffe1
style Resources fill:#ffe1e1
```
## Component Relationships
```mermaid
graph TB
subgraph "Core Components"
Loki[Loki StatefulSet<br/>Port 3100]
Promtail[Promtail DaemonSet<br/>Port 3101]
end
subgraph "Access Control"
Ingress[Ingress]
Middleware[Middleware]
Secret[Secret]
end
subgraph "Monitoring"
ServiceMonitor[ServiceMonitor]
Prometheus[Prometheus]
Grafana[Grafana]
end
subgraph "Storage"
PVC[PersistentVolumeClaim<br/>loki-data]
Longhorn[Longhorn]
end
subgraph "GitOps"
Git[Git Repository]
ArgoCD[ArgoCD]
end
Ingress --> Middleware
Middleware --> Secret
Middleware --> Loki
Promtail --> Loki
Loki --> PVC
PVC --> Longhorn
ServiceMonitor --> Loki
ServiceMonitor --> Prometheus
Grafana --> Loki
Git --> ArgoCD
ArgoCD --> Ingress
ArgoCD --> Middleware
ArgoCD --> Secret
ArgoCD --> Loki
ArgoCD --> Promtail
style Loki fill:#4CAF50
style Promtail fill:#8BC34A
style Ingress fill:#FFC107
style Middleware fill:#FF9800
style Secret fill:#FF5722
style Grafana fill:#E91E63
style Prometheus fill:#9C27B0
style ArgoCD fill:#2196F3
style Longhorn fill:#00BCD4
```
## Deployment States
```mermaid
stateDiagram-v2
[*] --> GitPush: Developer commits
GitPush --> ArgoCD_Detect: ArgoCD polls repo
ArgoCD_Detect --> Syncing: Changes detected
Syncing --> Deploying: Apply manifests
state Deploying {
[*] --> CreateSecret
CreateSecret --> CreateMiddleware
CreateMiddleware --> CreateIngress
CreateIngress --> RequestCert
RequestCert --> ValidateCert
ValidateCert --> [*]
}
Deploying --> Healthy: All resources ready
Healthy --> [*]: Deployment complete
Deploying --> Failed: Error occurred
Failed --> Syncing: Retry
Healthy --> GitPush: New changes
```
## Network Topology
```mermaid
graph TB
subgraph "Internet"
Client[Client Browser]
end
subgraph "Public IPs"
IP1[5.182.17.194]
IP2[62.169.30.194]
IP3[62.169.30.206]
end
subgraph "k3s Cluster"
subgraph "kube-system"
Traefik[Traefik LoadBalancer<br/>80/443]
end
subgraph "loki namespace"
Ingress[Ingress<br/>loki.thedevops.dev]
Service[ClusterIP Service<br/>10.43.x.x:3100]
Pod[Loki Pod<br/>10.42.x.x:3100]
end
subgraph "cert-manager"
CertManager[Cert Manager]
Certificate[Certificate<br/>loki-tls]
end
end
Client -->|DNS| IP1
Client -->|DNS| IP2
Client -->|DNS| IP3
IP1 --> Traefik
IP2 --> Traefik
IP3 --> Traefik
Traefik -->|Route by Host| Ingress
Ingress -->|ClusterIP| Service
Service -->|Pod IP| Pod
CertManager -.->|Provision| Certificate
Certificate -.->|Use| Ingress
style Client fill:#e1f5ff
style IP1 fill:#ffe1e1
style IP2 fill:#ffe1e1
style IP3 fill:#ffe1e1
style Traefik fill:#fff4e1
style Ingress fill:#e1ffe1
style Service fill:#e1f0ff
style Pod fill:#f0e1ff
```
---
## Legend
- 🌐 External Access Point
- ⚡ Load Balancer / Proxy
- 📥 Ingress / API Gateway
- 🔒 Authentication / Security
- 💾 Stateful Storage
- 📡 Log Collection
- 📊 Visualization
- 🔄 Automation / GitOps
- 💿 Persistent Storage
- ☸️ Kubernetes Resources

View File

@@ -0,0 +1,115 @@
╔══════════════════════════════════════════════════════════════════════════╗
║ ║
║ 📦 LOKI INGRESS ArgoCD SETUP - ARCHIVE INFO 📦 ║
║ ║
╚══════════════════════════════════════════════════════════════════════════╝
📁 Archive Name: loki-ingress-argocd-setup.zip
📊 Archive Size: 24 KB
📝 Total Files: 14 files (62 KB uncompressed)
📅 Created: 2026-01-05
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 СОДЕРЖИМОЕ АРХИВА:
┌─ DOCUMENTATION (5 files)
├── 00-START-HERE.txt 7.8 KB → Начни отсюда!
├── INDEX.md 6.3 KB → Навигация
├── README.md 5.3 KB → Описание файлов
├── CHEATSHEET.md 4.1 KB → Команды и шпаргалка
└── ARGOCD_LOKI_INGRESS_SETUP.md 18.5 KB → Полная инструкция ⭐
┌─ DIAGRAMS & ARCHITECTURE (1 file)
└── ARCHITECTURE.md 8.0 KB → Mermaid диаграммы
┌─ YAML MANIFESTS (6 files)
├── secret-basic-auth.yaml 421 B → Basic Auth
├── middleware-auth.yaml 298 B → Traefik middleware
├── ingress-loki.yaml 1.1 KB → Main Ingress ⭐
├── loki-ingress.yaml 1.7 KB → Alternative version
├── loki-nodeport.yaml 447 B → NodePort alternative
└── grafana-datasource-loki.yaml 1.2 KB → Grafana datasource
┌─ AUTOMATION (1 file)
└── deploy-loki-ingress.sh 5.1 KB → Auto-deploy script ⭐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 ЧТО ВНУТРИ:
✓ Полная документация на русском языке
✓ Пошаговые инструкции (12 шагов)
✓ Готовые YAML манифесты для ArgoCD
✓ Bash скрипт для автоматического развертывания
✓ Troubleshooting guide
✓ Mermaid диаграммы архитектуры
✓ Шпаргалка с командами
✓ Интеграция с Grafana
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 КАК ИСПОЛЬЗОВАТЬ:
1. Распакуй архив:
$ unzip loki-ingress-argocd-setup.zip
2. Начни с одного из файлов:
- 00-START-HERE.txt → Краткий обзор
- INDEX.md → Полная навигация
3. Следуй инструкциям в:
- ARGOCD_LOKI_INGRESS_SETUP.md
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 БЫСТРЫЙ СТАРТ:
После распаковки:
$ cd k3s-gitops
$ cp secret-basic-auth.yaml apps/loki/
$ cp middleware-auth.yaml apps/loki/
$ cp ingress-loki.yaml apps/loki/
$ chmod +x deploy-loki-ingress.sh
$ ./deploy-loki-ingress.sh
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 РЕЗУЛЬТАТ:
После развертывания:
URL: https://loki.thedevops.dev
Username: admin
Password: lokipass123 (ИЗМЕНИ!)
Features:
✓ HTTPS с Let's Encrypt
✓ Basic Authentication
✓ ArgoCD GitOps управление
✓ Grafana интеграция
✓ Production-ready
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📞 SUPPORT:
Для помощи см.:
- CHEATSHEET.md → Быстрые команды
- ARGOCD_LOKI_INGRESS_SETUP.md → Troubleshooting раздел
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Created for: Vladimiras Levinas
Purpose: Loki Ingress deployment via ArgoCD GitOps
Date: 2026-01-05
Happy Logging! 🚀📊
╔══════════════════════════════════════════════════════════════════════════╗
║ Начни с файла 00-START-HERE.txt ║
╚══════════════════════════════════════════════════════════════════════════╝

View File

@@ -0,0 +1,712 @@
# ArgoCD GitOps Setup для Loki Ingress
## Текущая конфигурация
- **ArgoCD Application:** `loki`
- **Git Repository:** `http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops`
- **Path:** `apps/loki`
- **Auto-sync:** Включен (prune: true, selfHeal: true)
- **Target Namespace:** `loki`
---
## Шаг 1: Подключись к Git репозиторию
### Вариант A: Через SSH (рекомендуется)
```bash
# Клонируй репозиторий
git clone git@gitea-http.gitea.svc.cluster.local:admin/k3s-gitops.git
cd k3s-gitops
# Или если используешь внешний доступ
git clone git@gitea.thedevops.dev:admin/k3s-gitops.git
cd k3s-gitops
```
### Вариант B: Через HTTP
```bash
git clone http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops.git
cd k3s-gitops
# Введи credentials для Gitea
```
---
## Шаг 2: Проверь структуру директорий
```bash
# Перейди в директорию приложения Loki
cd apps/loki
# Посмотри текущую структуру
tree .
# Должна быть примерно такая структура:
# apps/loki/
# ├── namespace.yaml
# ├── configmap-loki.yaml
# ├── configmap-promtail.yaml
# ├── statefulset.yaml
# ├── daemonset-promtail.yaml
# ├── service.yaml
# ├── ingress-promtail.yaml (уже существует)
# ├── rbac.yaml
# └── servicemonitor.yaml
```
---
## Шаг 3: Создай файлы для Loki Ingress
### 3.1 Secret для Basic Auth
Создай файл: `apps/loki/secret-basic-auth.yaml`
```yaml
---
# Basic Auth Secret для защиты Loki
apiVersion: v1
kind: Secret
metadata:
name: loki-basic-auth
namespace: loki
labels:
app.kubernetes.io/name: loki
argocd.argoproj.io/instance: loki
type: Opaque
stringData:
# Username: admin
# Password: lokipass123
# Сгенерировано с помощью: htpasswd -nb admin lokipass123
users: |
admin:$apr1$8jGXMp0X$xR7yGcZqz.pPJY4IaGQ0n0
```
**Как создать свой пароль:**
```bash
# Установи htpasswd (если нужно)
sudo apt-get install apache2-utils
# Создай новый пароль
htpasswd -nb admin your-secure-password
# Результат замени в stringData.users выше
```
### 3.2 Traefik Middleware
Создай файл: `apps/loki/middleware-auth.yaml`
```yaml
---
# Traefik Middleware для Basic Auth
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: loki-auth
namespace: loki
labels:
app.kubernetes.io/name: loki
argocd.argoproj.io/instance: loki
spec:
basicAuth:
secret: loki-basic-auth
removeHeader: true
```
### 3.3 Loki Ingress
Создай файл: `apps/loki/ingress-loki.yaml`
```yaml
---
# Ingress для Loki с HTTPS и аутентификацией
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: loki
namespace: loki
annotations:
# Использовать Traefik ingress controller
kubernetes.io/ingress.class: traefik
# Let's Encrypt сертификат
cert-manager.io/cluster-issuer: letsencrypt-http
cert-manager.io/acme-challenge-type: http01
# Применить Basic Auth middleware
traefik.ingress.kubernetes.io/router.middlewares: loki-loki-auth@kubernetescrd
# Entry points (http и https)
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
labels:
app.kubernetes.io/name: loki
argocd.argoproj.io/instance: loki
spec:
ingressClassName: traefik
rules:
- host: loki.thedevops.dev
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: loki
port:
number: 3100
tls:
- hosts:
- loki.thedevops.dev
secretName: loki-tls
```
---
## Шаг 4: Проверь файлы перед коммитом
```bash
# Находясь в директории k3s-gitops/apps/loki/
# Проверь что файлы созданы
ls -la
# Должны появиться:
# - secret-basic-auth.yaml
# - middleware-auth.yaml
# - ingress-loki.yaml
# Валидируй YAML синтаксис
kubectl apply --dry-run=client -f secret-basic-auth.yaml
kubectl apply --dry-run=client -f middleware-auth.yaml
kubectl apply --dry-run=client -f ingress-loki.yaml
```
---
## Шаг 5: Git Commit и Push
```bash
# Из директории k3s-gitops/
# Добавь файлы в git
git add apps/loki/secret-basic-auth.yaml
git add apps/loki/middleware-auth.yaml
git add apps/loki/ingress-loki.yaml
# Проверь статус
git status
# Создай коммит
git commit -m "feat(loki): Add Ingress with HTTPS and Basic Auth for loki.thedevops.dev"
# Push в репозиторий
git push origin main
# (или master - в зависимости от твоей ветки)
```
---
## Шаг 6: ArgoCD Auto-Sync
Поскольку у тебя включен auto-sync, ArgoCD автоматически:
1. Обнаружит изменения в git (в течение 3 минут)
2. Применит новые манифесты
3. Создаст Secret, Middleware и Ingress
### Ручная синхронизация (если не хочешь ждать)
#### Через ArgoCD CLI:
```bash
# Синхронизируй приложение
argocd app sync loki
# Посмотри статус
argocd app get loki
# Посмотри логи синхронизации
argocd app logs loki --follow
```
#### Через ArgoCD UI:
1. Открой: `https://argocd.thedevops.dev` (или твой ArgoCD URL)
2. Найди приложение `loki`
3. Нажми кнопку **"SYNC"**
4. Нажми **"SYNCHRONIZE"**
#### Через kubectl:
```bash
# Триггер синхронизации через kubectl
kubectl patch application loki -n argocd \
--type merge \
--patch '{"operation": {"initiatedBy": {"username": "manual"}}}'
```
---
## Шаг 7: Проверка развертывания
### 7.1 Проверь ресурсы в кластере
```bash
# Проверь что все ресурсы созданы
kubectl get all,ingress,secret,middleware -n loki
# Проверь конкретно Ingress
kubectl get ingress loki -n loki -o wide
# Должен показать:
# NAME CLASS HOSTS ADDRESS PORTS AGE
# loki traefik loki.thedevops.dev 5.182.17.194,62.169.30.194,... 80, 443 1m
# Проверь Middleware
kubectl get middleware -n loki
# Проверь Secret
kubectl get secret loki-basic-auth -n loki
```
### 7.2 Проверь сертификат
```bash
# Посмотри статус сертификата
kubectl get certificate -n loki
# Должен появиться:
# NAME READY SECRET AGE
# loki-tls True loki-tls 2m
# Если сертификат не готов, посмотри детали
kubectl describe certificate loki-tls -n loki
# Проверь логи cert-manager
kubectl logs -n cert-manager deployment/cert-manager --tail=50
```
### 7.3 Проверь ArgoCD статус
```bash
# Посмотри статус приложения
argocd app get loki
# Должно показать:
# Health Status: Healthy
# Sync Status: Synced
# Посмотри ресурсы приложения
argocd app resources loki
```
---
## Шаг 8: Настрой DNS
### 8.1 Проверь IP адреса Ingress
```bash
kubectl get ingress loki -n loki -o jsonpath='{.status.loadBalancer.ingress[*].ip}'
# Получишь IP адреса: 5.182.17.194 62.169.30.194 62.169.30.206
```
### 8.2 Добавь DNS запись
В DNS провайдере (Cloudflare, Route53, и т.д.) создай A-record:
```
Type: A
Name: loki.thedevops.dev
Value: 5.182.17.194 (или любой из твоих IP)
TTL: 300
```
**Или для всех IP (если нужен load balancing):**
```
Type: A, Name: loki.thedevops.dev, Value: 5.182.17.194
Type: A, Name: loki.thedevops.dev, Value: 62.169.30.194
Type: A, Name: loki.thedevops.dev, Value: 62.169.30.206
```
### 8.3 Проверь DNS резолюцию
```bash
# Проверь что DNS работает
nslookup loki.thedevops.dev
# Или
dig loki.thedevops.dev
# Должен показать твои IP адреса
```
---
## Шаг 9: Тестирование доступа
### 9.1 Тестовые запросы
```bash
# Проверка health endpoint (требует Basic Auth)
curl -u admin:lokipass123 https://loki.thedevops.dev/ready
# Должен вернуть: ready
# Проверка метрик
curl -u admin:lokipass123 https://loki.thedevops.dev/metrics
# Проверка labels
curl -u admin:lokipass123 https://loki.thedevops.dev/loki/api/v1/labels
# Тестовый LogQL запрос
curl -u admin:lokipass123 -G -s "https://loki.thedevops.dev/loki/api/v1/query" \
--data-urlencode 'query={namespace="loki"}' | jq
```
### 9.2 Проверка через браузер
1. Открой: `https://loki.thedevops.dev`
2. Должен появиться Basic Auth prompt
3. Введи:
- **Username:** `admin`
- **Password:** `lokipass123`
4. Должна открыться страница Loki (скорее всего 404 на корневом пути - это нормально)
5. Попробуй endpoints:
- `https://loki.thedevops.dev/ready`
- `https://loki.thedevops.dev/metrics`
### 9.3 Проверка HTTPS сертификата
```bash
# Проверь SSL сертификат
openssl s_client -connect loki.thedevops.dev:443 -servername loki.thedevops.dev
# Или через curl
curl -vI https://loki.thedevops.dev 2>&1 | grep -i "SSL\|certificate"
```
---
## Шаг 10: Интеграция с Grafana
### 10.1 Добавь Loki DataSource в Grafana
Создай файл: `apps/monitoring/grafana-datasource-loki.yaml`
```yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-datasource-loki
namespace: monitoring
labels:
grafana_datasource: "1"
data:
loki.yaml: |
apiVersion: 1
datasources:
# Внутренний доступ (из Grafana pod в кластере) - РЕКОМЕНДУЕТСЯ
- name: Loki
type: loki
access: proxy
url: http://loki.loki.svc.cluster.local:3100
isDefault: false
editable: true
jsonData:
maxLines: 5000
timeout: 60
derivedFields:
- datasourceUid: prometheus
matcherRegex: "traceID=(\\w+)"
name: TraceID
url: '$${__value.raw}'
# Внешний доступ (через домен, требует Basic Auth)
- name: Loki External
type: loki
access: proxy
url: https://loki.thedevops.dev
isDefault: false
editable: true
basicAuth: true
basicAuthUser: admin
secureJsonData:
basicAuthPassword: lokipass123
jsonData:
maxLines: 5000
timeout: 60
tlsSkipVerify: false
```
### 10.2 Примени конфигурацию
```bash
cd k3s-gitops/
# Добавь файл
git add apps/monitoring/grafana-datasource-loki.yaml
# Commit & Push
git commit -m "feat(grafana): Add Loki datasource configuration"
git push origin main
# Если у Grafana отдельное ArgoCD приложение, синхронизируй его
argocd app sync k8s-monitoring
# (или как называется твое Grafana приложение)
```
### 10.3 Перезапусти Grafana (опционально)
```bash
# Если datasource не появился автоматически
kubectl rollout restart deployment k8s-monitoring-grafana -n monitoring
```
### 10.4 Проверь в Grafana UI
1. Открой Grafana: `https://grafana.thedevops.dev`
2. Перейди в: **Configuration → Data Sources**
3. Должны появиться:
- `Loki` (внутренний)
- `Loki External` (внешний)
4. Нажми **Test** на каждом
5. Должно показать: **"Data source is working"**
---
## Шаг 11: Тестирование логов в Grafana
### 11.1 Через Explore
1. В Grafana перейди: **Explore** (иконка компаса)
2. Выбери Data Source: **Loki**
3. Попробуй запросы:
```logql
# Все логи из namespace loki
{namespace="loki"}
# Логи Loki pod'ов
{namespace="loki", app="loki"}
# Ошибки из всех namespaces
{} |= "error"
# Rate запросов за последние 5 минут
rate({namespace="loki"}[5m])
```
### 11.2 Создай Dashboard
1. **Dashboards → Import**
2. Вставь ID: **13639** (Loki Dashboard)
3. Выбери Loki datasource
4. **Import**
---
## Шаг 12: Мониторинг и алерты
### 12.1 Проверь ServiceMonitor
```bash
# ServiceMonitor уже должен существовать
kubectl get servicemonitor loki -n loki -o yaml
```
### 12.2 Prometheus метрики
```bash
# Проверь что Prometheus собирает метрики Loki
kubectl port-forward -n monitoring svc/k8s-monitoring-kube-promet-prometheus 9090:9090
# В браузере открой: http://localhost:9090
# Попробуй запрос: loki_ingester_memory_chunks
```
---
## Troubleshooting
### Проблема: Ingress не получает IP
```bash
# Проверь Traefik
kubectl get svc -n kube-system traefik
# Проверь логи Traefik
kubectl logs -n kube-system deployment/traefik --tail=50
```
### Проблема: 401 Unauthorized
```bash
# Проверь что Secret создан
kubectl get secret loki-basic-auth -n loki
# Проверь содержимое
kubectl get secret loki-basic-auth -n loki -o jsonpath='{.data.users}' | base64 -d
# Проверь что Middleware применен
kubectl get middleware loki-auth -n loki -o yaml
```
### Проблема: Сертификат не создается
```bash
# Проверь CertificateRequest
kubectl get certificaterequest -n loki
# Проверь Challenge
kubectl get challenge -n loki
# Проверь Order
kubectl get order -n loki
# Логи cert-manager
kubectl logs -n cert-manager deployment/cert-manager -f
# Проверь что домен резолвится
nslookup loki.thedevops.dev
```
### Проблема: ArgoCD не синхронизирует
```bash
# Проверь статус приложения
argocd app get loki
# Проверь логи ArgoCD
kubectl logs -n argocd deployment/argocd-application-controller -f
# Вручную триггер sync
argocd app sync loki --force
```
### Проблема: Loki недоступен из Grafana
```bash
# Проверь что Service работает
kubectl get svc loki -n loki
# Проверь endpoints
kubectl get endpoints loki -n loki
# Тест внутри кластера
kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- \
curl -s http://loki.loki.svc.cluster.local:3100/ready
```
---
## Полезные команды
```bash
# Просмотр всех ресурсов Loki
kubectl get all,ingress,secret,middleware,certificate -n loki
# Логи Loki pod
kubectl logs -n loki loki-0 -f
# Логи Promtail
kubectl logs -n loki daemonset/promtail -f
# ArgoCD приложение
argocd app get loki
argocd app sync loki
argocd app diff loki
# Удалить и пересоздать Ingress (если нужно)
kubectl delete ingress loki -n loki
argocd app sync loki
# Принудительный sync всего приложения
argocd app sync loki --prune --force
```
---
## Итоговая структура Git репозитория
```
k3s-gitops/
└── apps/
└── loki/
├── namespace.yaml
├── configmap-loki.yaml
├── configmap-promtail.yaml
├── secret-basic-auth.yaml # НОВЫЙ
├── middleware-auth.yaml # НОВЫЙ
├── ingress-loki.yaml # НОВЫЙ
├── ingress-promtail.yaml # СУЩЕСТВУЮЩИЙ
├── service.yaml
├── statefulset.yaml
├── daemonset-promtail.yaml
├── rbac.yaml
└── servicemonitor.yaml
```
---
## Безопасность и Best Practices
1. **Пароли:**
- Используй strong passwords
- Рассмотри интеграцию с Vault для хранения паролей
- Регулярно меняй пароли
2. **HTTPS:**
- Всегда используй HTTPS для production
- Let's Encrypt сертификаты автоматически обновляются
3. **Rate Limiting:**
- Добавь Traefik middleware для rate limiting если нужно
4. **Network Policies:**
- Ограничь доступ к Loki только от Promtail и Grafana
5. **Backup:**
- Настрой backup для PVC (`loki-data`)
- Используй Longhorn snapshots
---
## Следующие шаги
1. ✅ Добавить Ingress для Loki
2. ✅ Настроить HTTPS с Let's Encrypt
3. ✅ Добавить Basic Authentication
4. ✅ Интегрировать с Grafana
5. 🔲 Настроить alerting rules в Loki
6. 🔲 Добавить Grafana dashboards
7. 🔲 Настроить retention policies
8. 🔲 Интегрировать с Tempo (distributed tracing)
9. 🔲 Добавить Network Policies
10. 🔲 Настроить backup для Loki data
---
## Ресурсы
- [Loki Documentation](https://grafana.com/docs/loki/latest/)
- [Traefik Middleware](https://doc.traefik.io/traefik/middlewares/overview/)
- [ArgoCD Documentation](https://argo-cd.readthedocs.io/)
- [Cert-Manager Documentation](https://cert-manager.io/docs/)
---
## Поддержка
Если возникли проблемы:
1. Проверь логи компонентов
2. Проверь ArgoCD sync status
3. Проверь Kubernetes events: `kubectl get events -n loki --sort-by='.lastTimestamp'`

View File

@@ -0,0 +1,180 @@
# Loki Ingress - Шпаргалка
## Быстрый старт
```bash
# 1. Клонируй репозиторий
git clone http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops.git
cd k3s-gitops
# 2. Скопируй файлы в apps/loki/
cp secret-basic-auth.yaml apps/loki/
cp middleware-auth.yaml apps/loki/
cp ingress-loki.yaml apps/loki/
# 3. Commit и Push
git add apps/loki/*.yaml
git commit -m "feat(loki): Add Ingress with HTTPS and Basic Auth"
git push origin main
# 4. Синхронизация ArgoCD (или жди 3 минуты)
argocd app sync loki
```
## Проверка статуса
```bash
# Ingress
kubectl get ingress loki -n loki -o wide
# Certificate
kubectl get certificate loki-tls -n loki
# Все ресурсы
kubectl get all,ingress,secret,middleware,certificate -n loki
```
## Тестирование
```bash
# Health check
curl -u admin:lokipass123 https://loki.thedevops.dev/ready
# Metrics
curl -u admin:lokipass123 https://loki.thedevops.dev/metrics
# Labels
curl -u admin:lokipass123 https://loki.thedevops.dev/loki/api/v1/labels
```
## Credentials по умолчанию
- **URL:** https://loki.thedevops.dev
- **Username:** admin
- **Password:** lokipass123
## Изменить пароль
```bash
# Генерация нового пароля
htpasswd -nb admin your-new-password
# Обновить secret-basic-auth.yaml
# Замени строку в stringData.users
```
## DNS настройка
```
Type: A
Name: loki.thedevops.dev
Value: 5.182.17.194
TTL: 300
```
## Troubleshooting
### Ingress нет IP
```bash
kubectl get svc -n kube-system traefik
kubectl logs -n kube-system deployment/traefik --tail=50
```
### Сертификат не создается
```bash
kubectl describe certificate loki-tls -n loki
kubectl logs -n cert-manager deployment/cert-manager --tail=50
kubectl get challenge -n loki
```
### 401 Unauthorized
```bash
kubectl get secret loki-basic-auth -n loki
kubectl get middleware loki-auth -n loki -o yaml
```
### ArgoCD не синхронизирует
```bash
argocd app get loki
argocd app sync loki --force
kubectl logs -n argocd deployment/argocd-application-controller --tail=50
```
## Полезные команды
```bash
# Логи Loki
kubectl logs -n loki loki-0 -f
# Логи cert-manager
kubectl logs -n cert-manager deployment/cert-manager -f
# События
kubectl get events -n loki --sort-by='.lastTimestamp'
# ArgoCD sync
argocd app sync loki
argocd app get loki
argocd app diff loki
# Принудительная пересинхронизация
argocd app sync loki --prune --force
```
## Grafana интеграция
1. Скопируй `grafana-datasource-loki.yaml` в `apps/monitoring/`
2. Commit & Push
3. Sync ArgoCD приложение monitoring
4. Перезапусти Grafana (если нужно):
```bash
kubectl rollout restart deployment k8s-monitoring-grafana -n monitoring
```
## Endpoints
- `/ready` - health check
- `/metrics` - Prometheus metrics
- `/loki/api/v1/query` - LogQL queries
- `/loki/api/v1/labels` - available labels
- `/loki/api/v1/label/<name>/values` - label values
## LogQL примеры в Grafana
```logql
# Все логи из loki namespace
{namespace="loki"}
# Логи с ошибками
{namespace="loki"} |= "error"
# Rate за 5 минут
rate({namespace="loki"}[5m])
# Логи конкретного pod
{namespace="loki", pod="loki-0"}
```
## Безопасность
1. ✅ HTTPS включен (Let's Encrypt)
2. ✅ Basic Auth включен
3. 🔲 TODO: Изменить пароль по умолчанию
4. 🔲 TODO: Добавить Network Policy
5. 🔲 TODO: Настроить Rate Limiting
## Структура файлов
```
apps/loki/
├── secret-basic-auth.yaml ← Новый
├── middleware-auth.yaml ← Новый
├── ingress-loki.yaml ← Новый
├── namespace.yaml
├── configmap-loki.yaml
├── configmap-promtail.yaml
├── service.yaml
├── statefulset.yaml
├── daemonset-promtail.yaml
└── ...
```