Что нового в блоге: Kubernetes, сноски, тулбар и фикс CSRF

Сегодня блог переехал в Kubernetes и получил несколько улучшений. Коротко — что изменилось.
Деплой в кластере
Блог теперь работает в домашнем K8s-кластере: ArgoCD управляет деплойментом через Helm-чарт, секреты хранятся в Vault, TLS-сертификат выпускается через cert-manager (DNS-01 Cloudflare). Образ собирается в GitHub Actions и публикуется в GHCR — при пуше в master или создании тега vX.Y.Z ArgoCD подхватывает новую версию автоматически.
CSRF-фикс за CDN
При работе за Cloudflare обнаружилось, что CDN кеширует страницу логина вместе с CSRF-токеном. Браузер получал закешированный HTML со старым токеном, но свежий cookie — и форма входа падала с ошибкой 403. Исправление: Cache-Control: no-store на все /admin маршруты. Теперь Cloudflare не кеширует админку.
Favicon
Появился SVG-favicon в стиле терминала: тёмный фон, зелёный $, мигающий курсор. Совпадает с темой сайта gera@blog:~/записки$.
Тулбар в редакторе
В редакторе записей добавлена панель кнопок для Markdown-форматирования: жирный, курсив, заголовки, ссылки, код, цитаты, списки. Работают горячие клавиши: Ctrl+B, Ctrl+I, Ctrl+K. Выделенный текст оборачивается в синтаксис, без выделения — вставляется placeholder.
Сноски в Markdown
Подключён markdown-it-footnote — теперь сноски рендерятся как кликабельные верхние индексы с навигацией вниз страницы и обратными ссылками. Вместо [1] можно использовать именованные сноски:
Kubelet 1.36 содержит регрессию.^[Описание проблемы.]
[^ref]: https://example.com — источник.
Пост про утечку памяти в kubelet уже переведён на этот формат — четыре именованные сноски с ссылками на GitHub issue, PR и релизы EKS AMI.
Что ещё
- Все комментарии в коде, README, Helm-чарт и спека дизайна переведены на английский
- История коммитов переписана на английский (force-push)
- Счётчик просмотров работает (SQLite, обновляется при каждом GET)
- Картинки постов загружены через admin API с SHA-256 именами