mkdir -p ~/tmp temp_dir=$(mktemp -d ~/tmp/tmpdir.XXXXXX) cd $temp_dir
Установка бинарника envoy в systemd
Описание установки envoy в systemd в изолированной среде.
1. Скачивание бинарника из github в Nexus
-
Создайте временный каталог:
-
Скачайте архив с бинарником последней версии и файл с контрольными суммами:
GITHUB_REPO_NAME="envoyproxy/envoy" FILES=("envoy-contrib-.*-linux-x86_64" "checksums.txt.asc") for i in ${FILES[@]}; do curl -s https://api.github.com/repos/${GITHUB_REPO_NAME}/releases | \ grep browser_download_url | \ grep "$i" \ | head -n1 | cut -d '"' -f 4 | \ wget -i - done
-
Проверьте подпись и контрольные суммы. Из-за неподходящей структуры файла
checksums.txt.asc
сравните контрольные суммы вручную:gpg --verify checksums.txt.asc
Проверка не прошла из-за отсутствия на машине нужного ключа.gpg: Signature made Ср 07 мая 2025 22:23:57 MSK gpg: using RSA key 0AFCE836BA4D1D35763C8523D8CDC3750181F31F gpg: Can't check signature: No public key
Добавьте отсутствующий gpg-ключ, проверьте подпись файла, расшифруйте и повторите проверку контрольной суммы.gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 0AFCE836BA4D1D35763C8523D8CDC3750181F31F gpg --verify checksums.txt.asc gpg --decrypt checksums.txt.asc > checksums.txt awk '{ n=split($2,a,"/"); print $1, a[n] }' checksums.txt > stripped.txt sha256sum -c --ignore-missing stripped.txt
Пример ожидаемого вывода:envoy-contrib-1.34.1-linux-x86_64: OK
-
Задайте адрес загрузки файлов:
INTERNAL_REPO="https://nexus.example.org/repository/github" REPO_FOLDER="${GITHUB_REPO_NAME}"
-
Задайте учётные данные для доступа к локальному репо:
set +o history USER_PASS='ken:xxxxxxxxxxxxxxxx' set -o history
-
Загрузите файлы в Nexus:
for i in "$FILES[@]"; do curl -v --user "${USER_PASS}" \ --upload-file ${i} \ ${INTERNAL_REPO}/${REPO_FOLDER}/ done
-
Удалите временный каталог:
cd rm -rf ${temp_dir}
2. Установка envoy в systemd
-
Добавьте системного пользователя:
useradd -s /sbin/nologin -M -r -U envoy
-
Добавьте каталог для конфигурационных файлов envoy:
CONF_DIR='/etc/envoy' mkdir -p ${CONF_DIR} chown root:envoy ${CONF_DIR} chmod 2750 ${CONF_DIR}
-
Добавьте systemd-юнит:
cat << 'EOF' > /etc/systemd/system/envoy.service [Unit] Description=Envoy Proxy Service After=network.target Wants=network-online.target [Service] Environment=PATH=/usr/local/bin:/usr/bin:/bin WorkingDirectory=/etc/envoy ExecStart=envoy -c envoy.yaml --service-node node1 Restart=on-failure RestartSec=5s # Безопасность и изоляция User=envoy Group=envoy CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SYS_RESOURCE AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_SYS_RESOURCE NoNewPrivileges=yes PrivateTmp=yes ProtectSystem=full ProtectHome=yes ProtectKernelTunables=yes ProtectKernelModules=yes ProtectKernelLogs=yes ProtectControlGroups=yes RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX RestrictNamespaces=yes MemoryDenyWriteExecute=yes LockPersonality=yes RemoveIPC=yes PrivateDevices=yes PrivateUsers=yes PrivateMounts=yes # Ограничение путей ReadOnlyPaths=/etc/envoy ReadWritePaths=/var/log/envoy ReadWritePaths=/var/run/envoy TemporaryFileSystem=/tmp:ro # Фильтрация системных вызовов SystemCallArchitectures=native SystemCallFilter=~@resources @debug @raw-io @module @mount # Логирование StandardOutput=journal StandardError=inherit [Install] WantedBy=multi-user.target EOF systemctl daemon-reload