Etcd

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

Etcd

Это часть моего изучения k8s the hard way
но может использоваться и отдельно

Требования

  • 3 ноды raspberry pi установленные и настроенные, имеющие коннективити друг с другом
  • установленный и настроенный PKI на основе Hashicorp Vault (в примере - по адресу http://vault.home)
  • Настроенный DNS и созданы записи для всех доменов в примере (в моем случае DNS поднят на MikroTik)

Установка

  • мне НЕ удалось ни найти ни собрать более свежую версию чем была доступна в пакетах дистрибутива
  • установить на всех трех нодах
apt -y install etcd-server etcd-client etcd
dpkg -l | grep etcd
iU  etcd                           3.2.26+dfsg-3                       all          Transitional package for etcd-client and etcd-server
ii  etcd-client                    3.2.26+dfsg-3                       armhf        highly-available key value store -- client
iF  etcd-server                    3.2.26+dfsg-3                       armhf        highly-available key value store -- daemon
  • TODO: проверить кросс-компиляцию для ARM

Подготовка SSL сертификатов

Согласно документации (https://etcd.io/docs/v3.5/op-guide/security/) etcd сертификаты используются в двух независимых настройках:

  • Коммуникация между нодами кластера
  • Коммуникация между кластером и клиентом

Peer-to-peer SSL

Для того что бы настроить SSL потребуются сертификаты для соответствующих доменов. Так как сертификаты во взаимодействии нод кластера используются как клиентские и как серверные, то нужна соответствующая настройка PLI

настройка PKI для peer-to-peer SSL

  • Нужен клиент Vault
  • В примере используется рутовый токен (нужен ТОЛЬКО для создания "роли", но используется везде в примерах)

Для обновления сертификатов будет добавлен пользователь или другой способ авторизации и права будут ограничены

export VAULT_ADDR=http://vault.home:8200
export VAULT_TOKEN=<some-token-here>


vault write pki_intermediate_ca/roles/etc-az-k8s-home-server-crt \
    country="Ukraine" \
    locality="Kharkov" \
    street_address="Lui Pastera st 322 app. 311"\
    postal_code="61172" \
    organization="Home Network" \
    ou="IT" \
    allowed_domains="etcd1.home,etcd2.home,etcd3.home,etcd.home,etcd.az1.k8s.home,etcd.az2.k8s.home,etcd.az3.k8s.home" \
    allow_subdomains=false \
    max_ttl="87600h" \
    key_bits="2048" \
    key_type="rsa" \
    allow_any_name=false \
    allow_bare_domains=true \
    allow_glob_domain=false \
    allow_ip_sans=true \
    allow_localhost=false \
    client_flag=true \
    server_flag=true \
    enforce_hostnames=true \
    key_usage="DigitalSignature,KeyEncipherment" \
    ext_key_usage="ServerAuth,ClientAuth" \
    require_cn=true

В скрипте выще важно следующее

  • allowed_domains="etcd1.home,etcd2.home,etcd3.home,etcd.home,etcd.az1.k8s.home,etcd.az2.k8s.home,etcd.az3.k8s.home" - список доменов для которых можно выписывать сертефикаты используя этот endpoint. В моем случае изначально планировалось использовать домены etcdX.home но так как настройка "а-ля мультизонный кластер" то домер решил изменить

ВАЖНО: Домены пречислять через запятую без пробелов иначе не работает (как минимум в моей версии Vault)

  • allow_subdomains=false - не разрешать создавать сабдомены
  • client_flag=true - сертификат может использоваться как клиентский
  • server_flag=true - сертификат может использоваться как серверный
  • ext_key_usage="ServerAuth,ClientAuth" - расширения

Если попробовать создать только серверный сертификат то возникает ошибка SSL которая в общем-то об этом и говорит и ничего не работает

Client SSL