Kubernetes the hard way etcd setup: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
Строка 58: | Строка 58: | ||
mv /usr/lib/systemd/system/etcd.service /root/etcd.service.original |
mv /usr/lib/systemd/system/etcd.service /root/etcd.service.original |
||
</code> |
</code> |
||
+ | |||
+ | =Подготовка SSL сертификатов= |
||
+ | Согласно документации (https://etcd.io/docs/v3.5/op-guide/security/) etcd сертификаты используются в двух независимых настройках: |
||
+ | |||
+ | * Коммуникация между нодами кластера |
||
+ | * Коммуникация между кластером и клиентом |
||
+ | |||
+ | Соответственно есть ТРИ типа сертификатов |
||
+ | * Серверные, которые используются для коммуникации по порту из настройки <code>--listen-peer-urls=https://127.0.0.1:2380 \</code> (127.0.0.1 для примера), |
||
+ | Этот сертификат должен отвечать следующим требованиям: |
||
+ | ** |
||
=Systemd unit= |
=Systemd unit= |
Версия 17:40, 9 октября 2022
ETCD
Вторая версия статьи, максимально подробная (первая версия тут - https://noname.com.ua/mediawiki/index.php/Etcd)
Требования к окружению
- 3 ноды raspberry pi установленные и настроенные, имеющие коннективити друг с другом
- для работы etcd выделен отдельный VLAN с отдельным адресным пространством
- установленный и настроенный PKI на основе Hashicorp Vault (в примере - по адресу http://vault.home)
- Настроенный DNS и созданы записи для всех доменов в примере (в моем случае DNS поднят на MikroTik)
DNS
Подчеркну что все взаимоджействие происходит исключительно по доменным именам
Создаем три записи DNS (для трех мастер-нод каждая из которых находится в своей "Availability Zone" (В кавычках по тому что в лабе это все очень условно)
/ip/dns/static/add name=etcd.master.az1.k8s.cluster.home address=10.0.11.1<br> /ip/dns/static/add name=etcd.master.az2.k8s.cluster.home address=10.0.21.1<br> /ip/dns/static/add name=etcd.master.az3.k8s.cluster.home address=10.0.31.1<br>
Установка из пакетов (на всех трех нодах)
Собирать код самой последней версии под архитектуру АРМ откровенно лениво
apt -y \ install \ etcd \ etcd-client \ etcd-server \ etcd-discovery
dpkg -l | grep etcd
ii etcd 3.3.25+dfsg-7 all Transitional package for etcd-client and etcd-server ii etcd-client 3.3.25+dfsg-7 arm64 highly-available key value store -- client ii etcd-discovery 2.0.0+git2019.04.19.git.78fb45d3c9-4 arm64 etcd discovery service ii etcd-server 3.3.25+dfsg-7 arm64 highly-available key value store -- daemon
Остановить сервис (запускается после установки)
systemctl stop etcd
Переместить юнит (свой вариант юнита создается ниже)
mv /usr/lib/systemd/system/etcd.service /root/etcd.service.original
Подготовка SSL сертификатов
Согласно документации (https://etcd.io/docs/v3.5/op-guide/security/) etcd сертификаты используются в двух независимых настройках:
- Коммуникация между нодами кластера
- Коммуникация между кластером и клиентом
Соответственно есть ТРИ типа сертификатов
- Серверные, которые используются для коммуникации по порту из настройки
--listen-peer-urls=https://127.0.0.1:2380 \
(127.0.0.1 для примера),
Этот сертификат должен отвечать следующим требованиям:
Systemd unit
/etc/systemd/system/etcd.service
[Unit] Description=etcd Documentation=https://github.com/coreos [Service] Type=notify LimitNOFILE=65536 Environment=ETCD_UNSUPPORTED_ARCH=arm64 EnvironmentFile=/etc/etcd/env ExecStart=/usr/bin/etcd \ --debug \ --name=etcd-az-1 \ --listen-peer-urls=https://10.240.1.2:2380 \ --listen-client-urls=https://10.240.1.2:2379,https://127.0.0.1:2379 \ --advertise-client-urls=https://etcd.az1.k8s.home:2379 \ --initial-advertise-peer-urls=https://etcd.az1.k8s.home:2380 \ --initial-cluster-token=etcd.az1.k8s.home \ --initial-cluster etcd-az-1=https://etcd.az1.k8s.home:2380,etcd-az-2=https://etcd.az2.k8s.home:2380,etcd-az-3=https://etcd.az3.k8s.home:2380 \ --initial-cluster-state=new \ --data-dir=/var/lib/etcd \ --peer-client-cert-auth \ --peer-cert-file=/etc/etcd/certs/server/etcd.az1.k8s.home.pem \ --peer-key-file=/etc/etcd/certs/server/etcd.az1.k8s.home.key \ --peer-trusted-ca-file=/etc/etcd/certs/rootCA.pem \ --trusted-ca-file=/etc/etcd/certs/rootCA.pem \ --cert-file=/etc/etcd/certs/client/etcd.az1.k8s.home.pem \ --key-file=/etc/etcd/certs/client/etcd.az1.k8s.home.key \ --client-cert-auth Restart=on-failure RestartSec=60 [Install] WantedBy=multi-user.target Alias=etcd-server.service
ETCD_NAME="etcd.master.az3.k8s.cluster.home" ETCD_DATA_DIR="/var/lib/etcd/default" ETCD_SNAPSHOT_COUNT="100000" ETCD_HEARTBEAT_INTERVAL="100" ETCD_ELECTION_TIMEOUT="1000" ETCD_LISTEN_PEER_URLS="http://localhost:2380" ETCD_LISTEN_CLIENT_URLS="https://10.0.31.1/2379,http://localhost:2379" ETCD_MAX_SNAPSHOTS="5" ETCD_MAX_WALS="5" ETCD_QUOTA_BACKEND_BYTES="0" ETCD_BACKEND_BATCH_LIMIT="0" ETCD_BACKEND_BATCH_INTERVAL="0" ETCD_MAX_TXN_OPS="128" ETCD_MAX_REQUEST_BYTES="1572864" ETCD_GRPC_KEEPALIVE_MIN_TIME="5" ETCD_GRPC_KEEPALIVE_INTERVAL="2h" ETCD_GRPC_KEEPALIVE_TIMEOUT="20s" ETCD_INITIAL_ADVERTISE_PEER_URLS="https://etcd.master.az3.k8s.cluster.home:2380" ETCD_INITIAL_CLUSTER="default=http://localhost:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379" ETCD_STRICT_RECONFIG_CHECK ETCD_AUTO_COMPACTION_RETENTION="0" ETCD_CERT_FILE ETCD_KEY_FILE ETCD_CLIENT_CERT_AUTH ETCD_TRUSTED_CA_FILE ETCD_PEER_CERT_FILE ETCD_PEER_KEY_FILE ETCD_PEER_CLIENT_CERT_AUTH ETCD_PEER_TRUSTED_CA_FILE ETCD_PEER_CERT_ALLOWED_CN= ETCD_DEBUG ETCD_LOG_PACKAGE_LEVELS=etcdserver=WARNING,security=DEBUG