Виталий Лещенко

Секреты в git: sops и age с мастер-ключом в Yandex Cloud KMS или на парольной фразе

Секреты проекта — пароль базы, ключи подписи токенов, секреты OAuth-клиентов, SMTP — хочется держать рядом с кодом: в том же репозитории, с той же историей, в тех же ветках. Но в открытом виде им в git не место. В этой статье — схема, которой я пользуюсь для блога: файлы с секретами лежат в репозитории зашифрованными sops на ключе age, а сам ключ age хранится там же, зашифрованный мастер-ключом. Разберу два варианта мастер-ключа — в Yandex Cloud KMS и без облака, на парольной фразе, — а в конце пройдусь по альтернативам: Google Cloud, AWS, Azure, Vault, аппаратные ключи.

Инструменты

sops (Secrets OPerationS) шифрует не файл целиком, а значения в нём. Ключи YAML, JSON, .env остаются открытыми, и в git diff видно, какой секрет изменился, хотя и не видно, на что. Вот фрагмент зашифрованных значений чарта блога, как он лежит в git:

Читать дальше
Виталий Лещенко

Свой MCP-сервер для блога: сервер авторизации, API и инструменты для модели

У блога появился MCP-сервер: ИИ-ассистент теперь может читать посты, писать черновики, отвечать на комментарии и модерировать — от имени вошедшего пользователя и в пределах его прав. В этой статье я расскажу, как он устроен: что нужно, чтобы ИИ-клиент мог работать с вашим приложением от имени пользователя, как проходит подключение на уровне протокола, и какие API стоит выносить в инструменты, а какие — нет.

Зачем блогу MCP

MCP (Model Context Protocol) — протокол, по которому ИИ-клиент (Claude Code, claude.ai, Cursor и другие) вызывает инструменты внешнего сервера. Сервер описывает инструменты схемой, модель выбирает подходящий и вызывает его с параметрами, результат возвращается в контекст модели. Транспорт для удалённых серверов — Streamable HTTP: обычные POST-запросы с JSON-RPC внутри.

Читать дальше
Виталий Лещенко

Отказоустойчивый Kubernetes на BGP. Часть 8: проверка отказоустойчивости и разбор полётов

Всё построено, пора проверить на прочность. В этой части — какие отказы кто и за какое время замечает, как их воспроизвести, шпаргалка по диагностике BGP и правила обслуживания, которые я вывел из собственных ошибок.

Серия «Отказоустойчивый Kubernetes на BGP»

  1. Схема и план
  2. Готовим узлы Ubuntu 24.04
  3. BGP на роутере (FRR)
  4. kube-vip в режиме BGP и первый мастер
  5. Calico с eBPF и рабочие узлы
  6. Адреса LoadBalancer из Calico по BGP
  7. Traefik за BGP и externalTrafficPolicy Local
  8. Проверка отказоустойчивости и разбор полётов (эта статья)
Читать дальше
Виталий Лещенко

Отказоустойчивый Kubernetes на BGP. Часть 7: Traefik за BGP и externalTrafficPolicy Local

Механизм адресов готов. Осталось повесить на него нагрузку, ради которой всё затевалось: входящий HTTP(S)-трафик. В этой части ставим Traefik и разбираемся, почему для него важна одна строка — externalTrafficPolicy: Local.

Серия «Отказоустойчивый Kubernetes на BGP»

  1. Схема и план
  2. Готовим узлы Ubuntu 24.04
  3. BGP на роутере (FRR)
  4. kube-vip в режиме BGP и первый мастер
  5. Calico с eBPF и рабочие узлы
  6. Адреса LoadBalancer из Calico по BGP
  7. Traefik за BGP и externalTrafficPolicy Local (эта статья)
  8. Проверка отказоустойчивости и разбор полётов
Читать дальше
Виталий Лещенко

Отказоустойчивый Kubernetes на BGP. Часть 6: адреса LoadBalancer из Calico по BGP

Кластер работает, API отказоустойчив. Теперь научим Calico выдавать адреса сервисам type: LoadBalancer и анонсировать их роутеру. Отдельный MetalLB не нужен: Calico умеет и то, и другое.

Серия «Отказоустойчивый Kubernetes на BGP»

  1. Схема и план
  2. Готовим узлы Ubuntu 24.04
  3. BGP на роутере (FRR)
  4. kube-vip в режиме BGP и первый мастер
  5. Calico с eBPF и рабочие узлы
  6. Адреса LoadBalancer из Calico по BGP (эта статья)
  7. Traefik за BGP и externalTrafficPolicy Local
  8. Проверка отказоустойчивости и разбор полётов
Читать дальше
Виталий Лещенко

Отказоустойчивый Kubernetes на BGP. Часть 5: Calico с eBPF и рабочие узлы

Три мастера собраны, VIP работает, но кластер без сети. В этой части устанавливаем Calico, переводим его на eBPF вместо kube-proxy и присоединяем рабочие узлы.

Серия «Отказоустойчивый Kubernetes на BGP»

  1. Схема и план
  2. Готовим узлы Ubuntu 24.04
  3. BGP на роутере (FRR)
  4. kube-vip в режиме BGP и первый мастер
  5. Calico с eBPF и рабочие узлы (эта статья)
  6. Адреса LoadBalancer из Calico по BGP
  7. Traefik за BGP и externalTrafficPolicy Local
  8. Проверка отказоустойчивости и разбор полётов
Читать дальше
Виталий Лещенко

Отказоустойчивый Kubernetes на BGP. Часть 4: kube-vip в режиме BGP и первый мастер

Роутер готов ждать соседей, узлы подготовлены, пора создавать кластер. В этой части поднимем VIP для API-сервера с помощью kube-vip в режиме BGP, инициализируем первый мастер и присоединим остальные два.

Серия «Отказоустойчивый Kubernetes на BGP»

  1. Схема и план
  2. Готовим узлы Ubuntu 24.04
  3. BGP на роутере (FRR)
  4. kube-vip в режиме BGP и первый мастер (эта статья)
  5. Calico с eBPF и рабочие узлы
  6. Адреса LoadBalancer из Calico по BGP
  7. Traefik за BGP и externalTrafficPolicy Local
  8. Проверка отказоустойчивости и разбор полётов
Читать дальше
Виталий Лещенко

Отказоустойчивый Kubernetes на BGP. Часть 3: BGP на роутере (FRR)

В третьей части настраиваем сторону роутера. Кластера ещё нет, но роутер можно подготовить заранее: он заранее знает всех будущих соседей и будет ждать, пока они появятся.

Серия «Отказоустойчивый Kubernetes на BGP»

  1. Схема и план
  2. Готовим узлы Ubuntu 24.04
  3. BGP на роутере (FRR) (эта статья)
  4. kube-vip в режиме BGP и первый мастер
  5. Calico с eBPF и рабочие узлы
  6. Адреса LoadBalancer из Calico по BGP
  7. Traefik за BGP и externalTrafficPolicy Local
  8. Проверка отказоустойчивости и разбор полётов
Читать дальше
Виталий Лещенко

Отказоустойчивый Kubernetes на BGP. Часть 2: готовим узлы Ubuntu 24.04

Во второй части серии подготовим узлы. Всё в этой статье выполняется на каждом из восьми узлов (и на мастерах, и на воркерах), если не сказано иное.

Серия «Отказоустойчивый Kubernetes на BGP»

  1. Схема и план
  2. Готовим узлы Ubuntu 24.04 (эта статья)
  3. BGP на роутере (FRR)
  4. kube-vip в режиме BGP и первый мастер
  5. Calico с eBPF и рабочие узлы
  6. Адреса LoadBalancer из Calico по BGP
  7. Traefik за BGP и externalTrafficPolicy Local
  8. Проверка отказоустойчивости и разбор полётов
Читать дальше
Виталий Лещенко

Отказоустойчивый Kubernetes на BGP. Часть 1: схема и план

Это первая статья серии о том, как с нуля собрать отказоустойчивый кластер Kubernetes, в котором и API-сервер, и сервисы типа LoadBalancer публикуются по BGP. Такой кластер у меня работает на виртуальных машинах Hyper-V, и на нём живёт, в том числе, этот блог.

Серия получилась практической: в каждой части — команды, конфигурация и то, на что я успел наступить.

Серия «Отказоустойчивый Kubernetes на BGP»

Читать дальше