Организация доступа по SSH к виртуальным машинам Yandex Cloud

yandex cloud ssh ansible

В чём, собственно, проблема зайти на виртуальную машину в облаке по SSH?

Во-первых чтобы зайти на виртуальную машину по SSH, ни о чём не думая, нужно держать на ней белый адрес IP, за который, по естественным в наше время причинам, облачные провайдеры просят отдельных денег. Которые при массовом использовании становятся …

дальше…

Включение внешних сервисов в контекст Kubernetes

Речь о создании объекта Service, за которым стоит не под, а внешний по отношению к кластеру Kubernetes сервер.

Приём позволяет сделать по крайней мере две полезные вещи:

  • подключить внешний сервис к Prometheus с использованием Kubernetes SD;
  • создать для внешнего сервиса запись во внутреннем DNS Kubernetes.

Собственно приём заключается в создании …

дальше…

Использование OAuth2 с Nginx Ingress Controller

Постоянно в хозяйстве появляются интерфейсы, у которых своей аутентификации нет, а доступ нужно выдать ограниченной группе доверенных товарищей. Например, к интерфейсу шибко популярного Prometheus. Или часто к какому-то самопису.

Как мы решаем эту проблему? Бывает, никак. Закрываем доступ из внешней сети, а во внутренней, понятно, все свои. Следующий пункт -- собираем …

дальше…

О мониторинге сертификатов SSL

На днях развалился подопытный кластер CockroachDB из-за просроченных сертификатов на нодах. Появился повод ещё раз посмотреть по сторонам на предмет мониторинга сертификатов.

В CockroachDB, оказалось, всё уже готово. Есть группа метрик security_certificate_expiration_*, которые выдают enddate в unixtime. Для prometheus остаётся только настроить уведомления о малой разнице с time().

Это решение …

дальше…

Kubernetes для бедных. Запускаем приложение

После того как мы настроили доступ по HTTP к приложениям в кластере Kubernetes, разместим в кластере собственно приложение.

Приложение должно поставляться в образе контейнера и уметь отвечать на запросы HTTP. Соберём контейнер Docker на базе Hugo. Для работы с собственными образами нужно быть зарегистрированным на одном из Docker Registry. Самое …

дальше…

Kubernetes для бедных. Настраиваем доступ по HTTP

Мы собрали кластер Kubernetes и установили менеджер пакетов Helm.

Теперь установим и настроим контроллер входящего трафика HTTP и менеджер сертификатов с поддержкой Let's Encrypt.

Ingress controller

Поскольку решение бюджетное, изображать отказоустойчивость будет обычный DNS RR на два адреса. Трафик будем принимать в обход сервиса прямо на контейнеры контроллера, запущенные с …

дальше…

Kubernetes для бедных. Собираем кластер

Мы подготовили четыре сервера: мастер и три рабочих узла. Соберём на них кластер Kubernetes c шифрованием трафика между узлами, контроллером persistent volumes и менеджером пакетов Helm.

Собирать и настраивать кластер будем преимущественно в ручном режиме.

Объединение серверов в кластер

Инициализируем мастер.

$ ansible -i terraform-hetzner-inventory master1 -u root -a "kubeadm init …
дальше…

Kubernetes для бедных. Готовим инфраструктуру

Начнём создание кластера Kubernetes согласно подготовленому плану.

Создадим в облаке Hetzner четыре виртуалки c Ubuntu 16.04. Один мастер и три рабочих узла. Настроим доступы и поставим все необходимые пакеты.

Подготовка рабочей станции

На рабочей станции понадобятся Ansible, Terraform и плагин terraform-provider-hcloud. Всё ставим согласно официальным инструкциям:

дальше…

Kubernetes для бедных. План наступления

kubernetes hetzner

Поскольку Kubernetes неизбежен, по крайней мере в нашей конторе, принял решение перевести все личные проекты под него.

Первая инсталляция была поднята на виртуалках OVH, но неожиданно выяснилось, что Hetzner доделал своё облако и предлагает условия интереснее. Развернулся в Hetzner, заодно систематизировал телодвижения для поднятия кластера с нуля.

Бюджет решения составляет …

дальше…

Установка Jenkins для личного использования

jenkins systemd CI

При разработке одного небольшого сервиса захотелось уже наконец устроить CI в этой дыре и запускать тесты после каждого локального коммита.

Понятно, что во избежание велосипедостроения нужно использовать Jenkins. При этом, чтобы не настраивать странные доступы к домашнему каталогу, Jenkins нужно запускать от собственного пользователя. Вдобавок лично меня раздражает держать терминал …

дальше…