# SSL-сертификат для gooseek.ru Инструкция по получению сертификата, бэкапу и подключению к K3s. --- ## 1. Получение сертификата (Let's Encrypt) ### Вариант A: certbot на сервере (рекомендуется) ```bash # Установка certbot (Ubuntu/Debian) sudo apt update && sudo apt install -y certbot # Получение сертификата (standalone — порт 80 должен быть свободен) sudo certbot certonly --standalone -d gooseek.ru -d www.gooseek.ru \ --email admin@gooseek.ru \ --agree-tos \ --no-eff-email # Файлы появятся в: # /etc/letsencrypt/live/gooseek.ru/fullchain.pem # /etc/letsencrypt/live/gooseek.ru/privkey.pem ``` ### Вариант B: certbot с webroot (если nginx уже слушает 80) ```bash sudo certbot certonly --webroot -w /var/www/html \ -d gooseek.ru -d www.gooseek.ru \ --email admin@gooseek.ru \ --agree-tos \ --no-eff-email ``` ### Вариант C: DNS challenge (если порт 80 недоступен) ```bash sudo certbot certonly --manual --preferred-challenges dns \ -d gooseek.ru -d www.gooseek.ru \ --email admin@gooseek.ru \ --agree-tos # Certbot попросит добавить TXT-запись в DNS ``` --- ## 2. Бэкап сертификата Создайте папку бэкапа и скопируйте туда сертификаты: ```bash # Из корня репозитория mkdir -p deploy/k3s/ssl/backup # Копирование с сервера (после certbot) sudo cp /etc/letsencrypt/live/gooseek.ru/fullchain.pem deploy/k3s/ssl/backup/ sudo cp /etc/letsencrypt/live/gooseek.ru/privkey.pem deploy/k3s/ssl/backup/ # Или через scp с production-сервера: # scp user@gooseek.ru:/etc/letsencrypt/live/gooseek.ru/fullchain.pem deploy/k3s/ssl/backup/ # scp user@gooseek.ru:/etc/letsencrypt/live/gooseek.ru/privkey.pem deploy/k3s/ssl/backup/ ``` **Важно:** Папка `backup/` в `.gitignore` — сертификаты не попадут в git. --- ## 3. Создание Kubernetes Secret из бэкапа ```bash # Из корня репозитория kubectl create secret tls gooseek-tls \ --namespace=gooseek \ --cert=deploy/k3s/ssl/backup/fullchain.pem \ --key=deploy/k3s/ssl/backup/privkey.pem \ --dry-run=client -o yaml | kubectl apply -f - ``` Или обновить существующий: ```bash kubectl delete secret gooseek-tls -n gooseek 2>/dev/null || true kubectl create secret tls gooseek-tls \ --namespace=gooseek \ --cert=deploy/k3s/ssl/backup/fullchain.pem \ --key=deploy/k3s/ssl/backup/privkey.pem ``` --- ## 4. Применение Ingress с TLS При ручных сертах (из backup/): ```bash ./deploy/k3s/ssl/apply-secret.sh kubectl apply -f deploy/k3s/ingress-production-manual.yaml ``` При cert-manager: ```bash kubectl apply -f deploy/k3s/ingress-production.yaml ``` --- ## 5. Автообновление (certbot) Let's Encrypt выдаёт сертификаты на 90 дней. Настройте автообновление: ```bash # Проверка таймера sudo systemctl status certbot.timer # Ручное обновление sudo certbot renew --dry-run # После обновления — пересоздать Secret и перезапустить ingress sudo cp /etc/letsencrypt/live/gooseek.ru/fullchain.pem deploy/k3s/ssl/backup/ sudo cp /etc/letsencrypt/live/gooseek.ru/privkey.pem deploy/k3s/ssl/backup/ kubectl create secret tls gooseek-tls -n gooseek \ --cert=deploy/k3s/ssl/backup/fullchain.pem \ --key=deploy/k3s/ssl/backup/privkey.pem \ --dry-run=client -o yaml | kubectl apply -f - ``` --- ## 6. Альтернатива: cert-manager (автоматически) Если не хотите вручную обновлять — установите cert-manager: ```bash kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml # Создать ClusterIssuer для Let's Encrypt kubectl apply -f deploy/k3s/ssl/cert-manager-issuer.yaml ``` Тогда Secret `gooseek-tls` создаётся автоматически, бэкап не нужен (но можно экспортировать для переноса). --- --- ## 7. Настройка в Kubernetes ### Автоматически при деплое (рекомендуется) В `deploy.config.yaml` установите `ssl.auto: true`. При запуске `./deploy/k3s/deploy.sh` cert-manager и SSL настраиваются автоматически. **Требования для HTTP-01 (Let's Encrypt):** - DNS: gooseek.ru и www.gooseek.ru → публичный IP ingress-nginx (LoadBalancer или NodePort) - Порт 80 доступен из интернета (firewall, Security Groups) ### Вручную ```bash # Из корня репозитория # Вариант A: cert-manager — автоматические сертификаты ./deploy/k3s/ssl/setup-kubernetes.sh cert-manager # Вариант B: ручные сертификаты (certbot уже выполнен, файлы в backup/) ./deploy/k3s/ssl/setup-kubernetes.sh manual ``` **Требования:** - Namespace `gooseek` создан - Ingress-nginx установлен (порт 80 и 443) - Домен gooseek.ru указывает на IP кластера --- ## Структура папки ``` deploy/k3s/ssl/ ├── README.md # эта инструкция ├── setup-kubernetes.sh # настройка SSL в K8s (cert-manager или manual) ├── obtain-cert.sh # получение сертификата на сервере (certbot) ├── apply-secret.sh # создание Secret из backup/ ├── backup/ # сертификаты (в .gitignore) │ ├── fullchain.pem │ └── privkey.pem └── cert-manager-issuer.yaml ```