Files
shared-SQS/deploy

shared-sqs — Self-hosted Helm Chart

Этот Helm-чарт разворачивает shared-sqs — AWS SQS-совместимый сервис очередей — в вашем Kubernetes-кластере.

После деплоя клиенты подключаются через стандартный AWS SDK / CLI, меняя только endpoint_url на ваш домен.


Что потребуется заранее

Компонент Зачем Примечание
Kubernetes кластер Платформа Любой вариант: k3s, EKS, GKE, bare-metal
Redis ≥ 6 Хранит все очереди и сообщения Внешний или задеплоенный в кластер
Ingress NGINX Принимает внешние HTTP/HTTPS запросы helm install ingress-nginx ingress-nginx/ingress-nginx
cert-manager Автоматически выпускает TLS-сертификат helm install cert-manager jetstack/cert-manager --set installCRDs=true
DNS-запись Связывает ваш домен с кластером A-запись домена → External IP вашего ingress-контроллера
PostgreSQL (опционально) Биллинг — учёт операций Если не нужен — billing.enabled: false

Узнать External IP ingress-контроллера:

kubectl get svc -n ingress-nginx ingress-nginx-controller
# Смотрите колонку EXTERNAL-IP

Установка

1. Клонируйте репозиторий

git clone https://gitea.services.ngcloud.ru/Nail/shared-SQS.git
cd shared-SQS

2. Отредактируйте deploy/values.yaml

Обязательно заполните:

redis:
  addr: "ваш-redis-хост:6379"
  password: "ваш-redis-пароль"

admin:
  token: "придумайте-любой-токен"   # например: openssl rand -hex 20

ingress:
  host: "sqs.ваш-домен.com"

Если PostgreSQL не нужен — оставьте billing.enabled: false.

3. Задеплойте

helm install shared-sqs ./deploy -n shared-sqs --create-namespace

4. Проверьте что всё поднялось

# Под должен быть Running и Ready
kubectl get pods -n shared-sqs

# Сервис должен ответить OK
curl https://sqs.ваш-домен.com/health

Параметры values.yaml

Параметр Описание Пример
namespace Kubernetes namespace shared-sqs
image.tag Версия образа v0.1.24
redis.addr Адрес Redis в формате host:port redis.default.svc:6379
redis.user Redis-пользователь (обычно default) default
redis.password Пароль Redis
admin.token Токен для Admin API (/admin/*) любая строка
seedDemo Создать demo-тенанта при старте true / false
resources CPU и Memory лимиты пода см. defaults
ingress.enabled Включить Ingress true
ingress.className Ingress класс nginx
ingress.host Домен сервиса sqs.example.com
ingress.annotations Аннотации (cert-manager, timeouts) см. defaults
ingress.tls.enabled Включить TLS через cert-manager true
ingress.tls.secretName Имя Secret для TLS-сертификата shared-sqs-tls
billing.enabled Включить запись статистики в PostgreSQL false
billing.postgres.* Параметры подключения к PostgreSQL

Admin API — создание тенантов

После деплоя сервис готов принимать SQS-запросы, но для этого нужен тенант с credentials.

Создать тенанта

curl -s -X POST https://sqs.ваш-домен.com/admin/tenants \
  -H "Authorization: Bearer ВАШ_ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id": "my-tenant"}'

Ответ:

{
  "id": "my-tenant",
  "access_key": "SSAK-...",
  "secret_key": "..."
}

Сохраните secret_key — он показывается только один раз.

Использовать credentials в AWS CLI

export AWS_ACCESS_KEY_ID="SSAK-..."
export AWS_SECRET_ACCESS_KEY="..."
export AWS_DEFAULT_REGION="us-east-1"
ENDPOINT="--endpoint-url https://sqs.ваш-домен.com"

aws sqs create-queue --queue-name my-queue $ENDPOINT
aws sqs send-message --queue-url "..." --message-body "Hello" $ENDPOINT

Обновление

helm upgrade shared-sqs ./deploy -n shared-sqs

Удаление

helm uninstall shared-sqs -n shared-sqs
kubectl delete namespace shared-sqs

Полная документация

Использование сервиса (AWS CLI, boto3, Node.js) — в основном README.