Настройка Config Server (Consul/etcd) для микросервисов

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка Config Server (Consul/etcd) для микросервисов
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка Config Server (Consul/etcd) для микросервисов

Централизованное управление конфигурацией позволяет менять настройки сервисов без пересборки образов и рестарта. Database URL, feature flags, таймауты, API-ключи — всё хранится в одном месте, версионируется и обновляется динамически.

Варианты инструментов

Инструмент Сильные стороны
Consul KV Интеграция с Service Discovery, health checks
etcd Basis для Kubernetes, высокая надёжность
Vault Секреты + конфигурация, шифрование
Spring Cloud Config Конфигурация из Git-репозитория
AWS Parameter Store Managed, интеграция с IAM

Consul KV Store

import Consul from 'consul';

const consul = new Consul({ host: process.env.CONSUL_HOST });

class ConfigService {
  private cache = new Map<string, string>();

  async get(key: string): Promise<string | null> {
    const result = await consul.kv.get(`config/order-service/${key}`);
    return result?.Value ? Buffer.from(result.Value, 'base64').toString() : null;
  }

  async getAll(prefix: string): Promise<Record<string, string>> {
    const results = await consul.kv.get({
      key: `config/order-service/${prefix}`,
      recurse: true
    });

    return results?.reduce((acc, item) => {
      const shortKey = item.Key.replace(`config/order-service/${prefix}/`, '');
      acc[shortKey] = Buffer.from(item.Value, 'base64').toString();
      return acc;
    }, {}) ?? {};
  }

  // Watch — динамическое обновление без рестарта
  watch(key: string, callback: (value: string) => void): void {
    const watcher = consul.watch({
      method: consul.kv.get,
      options: { key: `config/order-service/${key}` }
    });

    watcher.on('change', (data) => {
      if (data?.Value) {
        const value = Buffer.from(data.Value, 'base64').toString();
        this.cache.set(key, value);
        callback(value);
      }
    });
  }
}

// Использование
const config = new ConfigService();

// Feature flags с hot reload
let enableNewCheckout = false;
config.watch('features/new-checkout', (value) => {
  enableNewCheckout = value === 'true';
  logger.info(`Feature new-checkout: ${enableNewCheckout}`);
});

etcd

import { Etcd3 } from 'etcd3';

const etcd = new Etcd3({ hosts: process.env.ETCD_HOSTS.split(',') });

// Запись конфигурации
await etcd.put('config/payment-service/timeout').value('5000');
await etcd.put('config/payment-service/retries').value('3');

// Чтение с namespace
const namespace = etcd.namespace('config/payment-service/');
const timeout = await namespace.get('timeout').number();
const retries = await namespace.get('retries').number();

// Watch на изменения
const watcher = await namespace.watch().key('timeout').create();
watcher.on('put', (res) => {
  console.log('timeout changed to:', res.value.toString());
});

Spring Cloud Config

Git-репозиторий как источник конфигурации:

# config-server application.yml
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/company/config-repo
          search-paths: '{application}'
          clone-on-start: true

Клиент (в каждом сервисе):

# bootstrap.yml
spring:
  application:
    name: order-service
  config:
    import: "configserver:http://config-server:8888"
  profiles:
    active: production

При старте сервис загружает order-service/production.yml из Git-репозитория.

HashiCorp Vault для секретов

import vault from 'node-vault';

const client = vault({
  apiVersion: 'v1',
  endpoint: process.env.VAULT_ADDR,
  token: process.env.VAULT_TOKEN  // в K8s — через ServiceAccount
});

// Чтение секрета
const secret = await client.read('secret/data/order-service/production');
const dbPassword = secret.data.data.db_password;
const stripeKey = secret.data.data.stripe_secret_key;

// Dynamic secrets — Vault генерирует временные credentials для PostgreSQL
const dbCreds = await client.read('database/creds/order-service-role');
// dbCreds.data.username, dbCreds.data.password — уникальны, истекают через TTL

Kubernetes ConfigMap и Secret

Нативное решение для K8s:

apiVersion: v1
kind: ConfigMap
metadata:
  name: order-service-config
data:
  PAYMENT_TIMEOUT_MS: "5000"
  MAX_RETRIES: "3"
  FEATURE_NEW_CHECKOUT: "false"
---
apiVersion: v1
kind: Secret
metadata:
  name: order-service-secrets
type: Opaque
stringData:
  DATABASE_PASSWORD: "super-secret"
  STRIPE_SECRET_KEY: "sk_live_..."
# Deployment
envFrom:
  - configMapRef:
      name: order-service-config
  - secretRef:
      name: order-service-secrets

Недостаток ConfigMap — нет hot reload без пересоздания подов. Для динамических настроек — Consul/etcd + watch или External Secrets Operator с Vault.

Сроки реализации

  • Consul KV с hot reload для feature flags — 2–3 дня
  • Vault для секретов + Kubernetes External Secrets — 3–5 дней
  • Spring Cloud Config с Git-репозиторием — 2–3 дня