среда, 26 мая 2021 г.

Инвентаризация хостов и сетей

 Когда много хостов и/или сетей, нужно вести их учёт. Это называется IPAM - IP address management.

Типичные представители

- phpIPAM

- netbox (и его форк nautobot)

- RackTables

- SolarWinds IP Address Manager

- Opendcim

По моему мнению, лучше смотреть на netbox.

четверг, 20 мая 2021 г.

LogStash vs filebeat

 https://logz.io/blog/filebeat-vs-logstash/

Если очень вкратце, они друг друга не заменяют, а дополняют. logstash написан на жаве и весьма тяжёл, при этом filebeat (является частью Beats, подробнее тоже в линке выше) написан на go и потому лёгкий, но не умеет в серьёзную обработку. Поэтому для прода лучше вынести logstash вообще на отдельную машину, и закидывать туда данные через filebeat.

И по настройке - смотрим статью.

Есть и офдока

https://www.elastic.co/guide/en/beats/filebeat/7.0/filebeat-getting-started.html

Но. Иногда можно и отказаться от logstash совсем, используя ingress pipeline и перенеся обработку тех же access_log сразу в elasticsearch.


Итого.

filebeat - сбор и доставка логов (плюс предобработка через фильтры)

logstash - парсит логи в документы

Elasticsearch - хранит и индексирует документы

Kibana - поиск, аггрегирование, показ нужных данных.

вторник, 18 мая 2021 г.

Мониторинг для Kubernetes

 Если мы взяли не готовый продукт, а чистый кубер, там нет многого нужного. Сейчас рассмотрим мониторинг. Статья содержит много ссылок, потому что информации много, читать лучше в первоисточнике, и понимать все варианты. При этом не стоит читать только статьи вида "9 утилит" - нужно понимать, КАК оно будет работать, раскатываться, собирать, куда заливать... Что такое heapster, DaemonSet, operator и так далее.

Установка Kubernetes через kubeadm

 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

Установку kubectl kubeadm kubelet пропускаем, это по доке делается на раз.

Перед настройкой нужно доставить некоторые пакеты

# Pull images (apiserver, controller-manager, scheduler, proxy, etcd, coredns)

kubeadm config images pill

И теперь совсем базовая инициализация выглядит так

sudo kubeadm init --pod-network-cidr 10.244.0.0/16

В итоге, нам
1) создаст /etc/kubernetes/admin.conf
2) выдаст строку для подключения других нод к нашему мастеру, начинаться будет с kubeadm join
3) поставит и запустит нужные сервисы

И теперь мы можем работать под своим юзером с кластером (команды пускаем от юзера!)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Если что-то запороли -- ничего страшного!
sudo kubeadm reset

Но.. у нас не работает сеть. Потому что теперь нужно поставить сеть :) Гуглим calico, flannel или в общем случае - CNI. Тоже обязательно понять, что там происходит и как оно работает.

Линки

понедельник, 17 мая 2021 г.

Что такое kubernetes operator

Операторы для Kubernetes: как запускать stateful-приложения


И пример оператора

shell-operator v1.0.0: долгожданный релиз нашего проекта для Kubernetes-операторов

Другой пример - framawork для создания своих операторов

https://github.com/nolar/kopf

Kopf —Kubernetes Operator Pythonic Framework— is a framework and a library to make Kubernetes operators development easier, just in a few lines of Python code.


Правда, чаше операторы используют для БД или мониторинга.

четверг, 29 апреля 2021 г.

Ubuntu: passwordless login with YubiKey 5

https://askubuntu.com/questions/1167691/passwordless-login-with-yubikey-5-nfc



Читать лучше целиком. И краткий пересказ

sudo apt install libpam-u2f

pamu2fcfg | sudo tee /etc/u2f_mappings

# По комментам, лучше писать

# pamu2fcfg -u USERNAME | tee /etc/u2f_mappings

# OR (from root only)


# pamu2fcfg -u USERNAME >> /etc/u2f_mappings

После этого обновляем pam.d/ конфиги, добавляя auth sufficient pam_u2f.so ко всем связанным сервисам: gdm-password lightdm sudo login

sudo -i
cd /etc/pam.d
echo 'auth sufficient pam_u2f.so authfile=/etc/u2f_mappings cue' > common-u2f
for f in gdm-password lightdm sudo login; do
mv $f $f~
awk '/@include common-auth/ {print "@include common-u2f"}; {print}' $f~ > $f
done
exit

Момент в том, что проверять ключ нужно ДО @include common-auth

При этом можно сделать нормальный 2FA, ожидая касания ключа ПОСЛЕ ввода пароля. Для этого строка чуть меняется (и ставится ПОСЛЕ @include common-auth):

auth required pam_u2f.so
Нужно понимать, что так без ключа войти не получится!

суббота, 24 апреля 2021 г.

postfix, dkim, debian

Установка

sudo apt install opendkim opendkim-tools

После установки конфиг лежит в /etc/opendkim.conf

Теперь надо настроить - создать несколько файликов и ключи

mkdir -p /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys

 Теперь нам нужно в /etc/postfix/main.cf указать, где искать dkim файлы

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts            refile:/etc/opendkim/TrustedHosts
KeyTable                 refile:/etc/opendkim/KeyTable
SigningTable             refile:/etc/opendkim/SigningTable

Также, там есть ещё ряд настроек

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple

Mode                    sv

UserID                  opendkim:opendkim

Umask, Syslog уже есть в оригинальном конфиге, их можно не копировать.

Замечание на тему Socket: если нужно работать через tcp, формат такой: inet:12301@localhost, но по умолчанию открывается Unix socket в /var/run/opendkim/opendkim.sock (легко проверяется через netstat -plan | grep dkim). И если надо переопределить, то по ряду мануалов это делается в /etc/default/opendkim

Ключ генерируется так

sudo -u opendkim opendkim-genkey -s <some_name> -D /etc/opendkim/keys -d <yourdomain.com> -b 2048

!!! В некоторых мануалах перепутаны -b и -s. -b это СКОЛЬКО БИТ ключ, а -s это префикс для dns, так называемый селектор! Тот что <some_name>._domainkey, если планируется несколько мест для отправки - лучше использовать технический префикс сервера типа srv01, и избегать имён вида mail - может быть конфликт с рядом сервисов автогенерации, включая почту от яндекса - мне и такое довелось увидеть...

И второй момент -- после создания ключа файлы создаются только по селектору без учёта доменов, поэтому лучше в keys сразу создать папку с доменом и в -D поправить на keys/<yourdomain.com>. Ниже keyTable с учётом этой папки.

Теперь лучше записать публичную часть в dns

cat /etc/opendkim/keys/<yourdomain.com>/<some_name>.txt

Теперь надо заполнить файл, где описаны для каких доменов какие селекторы подключать.

В /etc/opendkim/KeyTable

 <some_name>._domainkey.<yourdomain.com> <yourdomain.com>:<some_name>:/etc/opendkim/keys/<yourdomain.com>/<some_name>.private

В /etc/opendkim/TrustedHosts пишем хосты, которые будут подписаны нашей подписью, обычно это только сама машина

127.0.0.1
localhost
# можно указать подсети, вида 192.168.0.0/24

В /etc/opendkim/SigningTable пишем, каким ключом что подписываем

*@<yourdomain.com> <some_name>._domainkey.<yourdomain.com>

 Не путаем KeyTable и TrustedHosts! В KeyTable - где искать ключи по домену и селектору, а TrustedHosts - каким ключом подписываем почту для каких адресов. Можно вообще сделать отдельные ключи для отдельных ящиков.

проверьте, что в /etc/postfix/main.cf

    # Milter configuration
    # Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2
    milter_protocol = 6
    milter_default_action = accept
    smtpd_milters = unix:/var/spool/postfix/var/run/opendkim
    non_smtpd_milters = unix:/var/spool/postfix/var/run/opendkim

И перезапустите opendkim, postfix

 

Проверка

после настройки opendkim можно обнаружить в mail.log:

postfix/cleanup[13428]: warning: connect to Milter service unix:/var/run/opendkim/opendkim.sock: No such file or directory

Хотя и файл такой есть, и с правами всё хорошо. Но, слава chroot, работать так не будет.

Фикс:

  1. Then do the following

    sudo adduser postfix opendkim
  2. Postfix running in chroot

    Modify /etc/default/opendkim, change SOCKET option to postfix chroot location

    SOCKET="local:/var/spool/postfix/var/run/opendkim/opendkim.sock"

    You will have to create directory /var/spool/postfix/var/run/opendkim and change its permission

    sudo mkdir -p /var/spool/postfix/var/run/opendkim
    sudo chown opendkim:opendkim /var/spool/postfix/var/run/opendkim
    
  3. Restart opendkim

    sudo service opendkim restart
    https://unix.stackexchange.com/questions/74477/postfix-smtpd-warning-connect-to-milter-service-unix-var-run-opendkim-opendki

 

Links

Относительно свежая дока, но читать аккуратно

https://www.linode.com/docs/guides/configure-spf-and-dkim-in-postfix-on-debian-9/

Вроде и официальная, но очень старая

https://wiki.debian.org/opendkim

пятница, 23 апреля 2021 г.

Выбор платформы для Kubernetes

 Если хочется поставить k8s, есть несколько путей, которые будут чуть ниже. При этом готовые продукты это не просто "красивый инсталлер", это ещё и дополнительное ПО - веб из коробки, мониторинг из коробки, RBAC, автомасштабирование, сбор логов -- это "базовый набор". При этом часто автоматом настраивается CI/CD, хранилища.

Rancher

По сути это веб-интерфейс с некоторыми плюшками типа мониторинга, автомасштабирования из коробки.

Сам rancher - изначально делался для расширения возможностей докера, чем потом стал заниматься docker swarm. rancher был "надстройкой" с выбором основы: Cattle, Docker Swarm, Apache Mesos (upstream project for DCOS) or Kubernetes, но похоже что в 2.х оставили только kubernetes.
Ветку советую глянуть.
Если я правильно понял доку, rancher даёт возможность собрать кластер, где часть нод - условный aws eks, часть - gcp, а часть вообще свои сервера.

На обычный хост ставится несложно, но требует установленный докер
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher

В облака ставится через terraform


kubeflow

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

OpenShift

Платный продукт от RedHat. Если хочется серьёзное решение, с серьёзной платной поддержкой - это сюда. То, что называется Enterprise Kubernetes. С нужными сертификатами и прочим. Дорого.

Kubernetes by Canonical

Да, есть и такое.

Облачные решения

Имеются в виду такие вещи как aws eks, mail.ru kubernetes (главная страница), yandex kubernetes и так далее, продуктов сотни. Развёртывание - на уровне "создать кластер скриптами", проблемы под капотом обычно неизвестны, но предсказать из невозможно, обезопаситься - сложно. Если нет кучи кубер спецов -- не самый дешёвый, но хороший вариант, снимающий много головной боли и убирающий потребность в сильной DevOps команде.

Руками

Имеется в виду kubeadm, kubespray и подобное. Надо понимать, что будет поставлена только "база", хранилища (ceph, glusterfs), обрабтку логов (ELK и аналоги), мониторинг (prometheus+grafana) надо ставить и сопровождать отдельно.

Готовые сравнения продуктов


Место для тренировок

Есть 4 часа, можно поднять несколько серверов и собрать в кластер.

Итого

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

И отдельный вопрос - как хранить данные.

Напоследок - всегда помнить про бэкапы. Лучше несколько дней быть недоступным, но в итоге опять развернуться, чем не развернуться больше никогда (тут привет тем, кто был в датацентре OVZ). Ну и иметь просто возможность отката при любых авариях/косяках.

Provisioning Grafana

 Перейдя сразу к сути:

https://grafana.com/docs/grafana/latest/administration/provisioning/

Пишутся .yaml файлы, которые нужно потом положить в папку provisioning и далее по типам, например datasources, plugins, dashboards, notifiers. Сами же файлики очень удобно при этом хранить в гите, получая полный контроль над тем, что и как показывается и кто, что, когда правил.

Формат там несложный и хорошо описан в доке. Так что доку читать обязательно и в любом случае!

четверг, 22 апреля 2021 г.

yubikey+ubuntu

 Есть такой интересный аппаратный ключик YubiKey (2) (также есть редакции TypeC и мелкие nano). Так вот, для настройки ключа есть пакет yubikey-manager (в маке opensc+ykman). Но что делать, если такого нет, например в убунте 18.04?

среда, 14 апреля 2021 г.

Более быстрые варианты дисков

 Бывает, что нужно много IOPS, и/или очень много пропускной способности, и нам на помощь приходит NVME. Многие знают его по слоту m.2 на материнках, но также есть "внешние" варианты NF1 и более "привычный" формат U.2

Описание формата

https://habr.com/ru/company/kingston_technology/blog/369729/


Примеры:

U.2

https://www.supermicro.com/en/products/system/1U/1029/SYS-1029U-TN10RT.cfm

NF1

https://nvme.smb-solution.ru/supermicro-1029p-nmr36l-32x-nvme-nf1/