Управляемый сервис HTTP-кеширования на основе Nginx

Сервис HTTP-кеширования на основе Nginx предназначен для оптимизации веб-трафика и повышения производительности веб-приложений.

Сервис HTTP-кеширования на основе Nginx предназначен для оптимизации веб-трафика и повышения производительности веб-приложений. Сервис объединяет специально собранные экземпляры Nginx и HAProxy для эффективного кеширования и балансировки нагрузки.

Информация о развёртывании

Экземпляры Nginx включают следующие модули и возможности:

  • модуль VTS для статистики
  • интеграция с ip2location
  • интеграция с ip2proxy
  • поддержка 51Degrees
  • функция очистки кеша

HAProxy играет ключевую роль в этой схеме: он направляет входящий трафик на конкретные экземпляры Nginx на основе консистентного хеша, вычисляемого от URL. Каждый экземпляр Nginx использует Persistent Volume Claim (PVC) для хранения кешированного содержимого, обеспечивая быстрый и надёжный доступ к часто используемым ресурсам.

Детали развёртывания

Архитектура развёртывания показана на схеме ниже:


          ┌─────────┐
          │ metallb │ arp announce
          └────┬────┘
               │
               │
       ┌───────▼───────────────────────────┐
       │  kubernetes service               │  node
       │ (externalTrafficPolicy: Local)    │  level
       └──────────┬────────────────────────┘
                  │
                  │
             ┌────▼────┐  ┌─────────┐
             │ haproxy │  │ haproxy │   loadbalancer
             │ (active)│  │ (backup)│      layer
             └────┬────┘  └─────────┘
                  │
                  │ balance uri whole
                  │ hash-type consistent
           ┌──────┴──────┬──────────────┐
       ┌───▼───┐     ┌───▼───┐      ┌───▼───┐ caching
       │ nginx │     │ nginx │      │ nginx │  layer
       └───┬───┘     └───┬───┘      └───┬───┘
           │             │              │
      ┌────┴───────┬─────┴────┬─────────┴──┐
      │            │          │            │
  ┌───▼────┐  ┌────▼───┐  ┌───▼────┐  ┌────▼───┐
  │ origin │  │ origin │  │ origin │  │ origin │
  └────────┘  └────────┘  └────────┘  └────────┘

Известные проблемы

storageClass помечен как неизменяемый (immutable) в схеме чарта - см. docs/storage-immutability.md, где описан этот контракт и какие потребители его обеспечивают.

Параметры

Общие параметры

ИмяОписаниеТипЗначение
sizeРазмер Persistent Volume Claim, доступный для данных приложения.quantity10Gi
storageClassStorageClass, используемый для хранения данных.string""
externalРазрешить внешний доступ извне кластера.boolfalse

Параметры приложения

ИмяОписаниеТипЗначение
endpointsКонфигурация конечных точек в виде списка ip:port.[]string[]

Параметры HAProxy

ИмяОписаниеТипЗначение
haproxyКонфигурация HAProxy.object{}
haproxy.replicasКоличество реплик HAProxy.int2
haproxy.resourcesЯвная конфигурация CPU и памяти. Если не задана, применяется пресет, указанный в resourcesPreset.object{}
haproxy.resources.cpuCPU, доступный каждой реплике.quantity""
haproxy.resources.memoryПамять (RAM), доступная каждой реплике.quantity""
haproxy.resourcesPresetПресет размеров по умолчанию, используемый, когда resources не задан.stringt1.nano

Параметры Nginx

ИмяОписаниеТипЗначение
nginxКонфигурация Nginx.object{}
nginx.replicasКоличество реплик Nginx.int2
nginx.resourcesЯвная конфигурация CPU и памяти. Если не задана, применяется пресет, указанный в resourcesPreset.object{}
nginx.resources.cpuCPU, доступный каждой реплике.quantity""
nginx.resources.memoryПамять (RAM), доступная каждой реплике.quantity""
nginx.resourcesPresetПресет размеров по умолчанию, используемый, когда resources не задан.stringt1.nano

Примеры параметров и справка

resources и resourcesPreset

resources задаёт явную конфигурацию CPU и памяти для каждой реплики. Если значение не указано, применяется пресет, заданный в resourcesPreset.

resources:
  cpu: 4000m
  memory: 4Gi

resourcesPreset задаёт именованную конфигурацию CPU и памяти для каждой реплики. Эта настройка игнорируется, если задано соответствующее значение resources.

Имя пресетаCPUПамять
nano250m128Mi
micro500m256Mi
small1512Mi
medium11Gi
large22Gi
xlarge44Gi
2xlarge88Gi

endpoints

endpoints - плоский список IP-адресов:

endpoints:
  - 10.100.3.1:80
  - 10.100.3.11:80
  - 10.100.3.2:80
  - 10.100.3.12:80
  - 10.100.3.3:80
  - 10.100.3.13:80