Files
gooseek/deploy/k3s/ssl

SSL-сертификат для gooseek.ru

Инструкция по получению сертификата, бэкапу и подключению к K3s.


1. Получение сертификата (Let's Encrypt)

Вариант A: certbot на сервере (рекомендуется)

# Установка 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)

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 недоступен)

sudo certbot certonly --manual --preferred-challenges dns \
  -d gooseek.ru -d www.gooseek.ru \
  --email admin@gooseek.ru \
  --agree-tos
# Certbot попросит добавить TXT-запись в DNS

2. Бэкап сертификата

Создайте папку бэкапа и скопируйте туда сертификаты:

# Из корня репозитория
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 из бэкапа

# Из корня репозитория
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 -

Или обновить существующий:

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/):

./deploy/k3s/ssl/apply-secret.sh
kubectl apply -f deploy/k3s/ingress-production-manual.yaml

При cert-manager:

kubectl apply -f deploy/k3s/ingress-production.yaml

5. Автообновление (certbot)

Let's Encrypt выдаёт сертификаты на 90 дней. Настройте автообновление:

# Проверка таймера
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:

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)

Вручную

# Из корня репозитория

# Вариант 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