Управляемый сервис 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 │
└────────┘ └────────┘ └────────┘ └────────┘
Известные проблемы
- Модуль VTS показывает неверное время ответа апстрима, github.com/vozlt/nginx-module-vts#198
storageClassпомечен как неизменяемый (immutable) в схеме чарта - см.docs/storage-immutability.md, где описан этот контракт и какие потребители его обеспечивают.
Параметры
Общие параметры
| Имя | Описание | Тип | Значение |
|---|---|---|---|
size | Размер Persistent Volume Claim, доступный для данных приложения. | quantity | 10Gi |
storageClass | StorageClass, используемый для хранения данных. | string | "" |
external | Разрешить внешний доступ извне кластера. | bool | false |
Параметры приложения
| Имя | Описание | Тип | Значение |
|---|---|---|---|
endpoints | Конфигурация конечных точек в виде списка ip:port. | []string | [] |
Параметры HAProxy
| Имя | Описание | Тип | Значение |
|---|---|---|---|
haproxy | Конфигурация HAProxy. | object | {} |
haproxy.replicas | Количество реплик HAProxy. | int | 2 |
haproxy.resources | Явная конфигурация CPU и памяти. Если не задана, применяется пресет, указанный в resourcesPreset. | object | {} |
haproxy.resources.cpu | CPU, доступный каждой реплике. | quantity | "" |
haproxy.resources.memory | Память (RAM), доступная каждой реплике. | quantity | "" |
haproxy.resourcesPreset | Пресет размеров по умолчанию, используемый, когда resources не задан. | string | t1.nano |
Параметры Nginx
| Имя | Описание | Тип | Значение |
|---|---|---|---|
nginx | Конфигурация Nginx. | object | {} |
nginx.replicas | Количество реплик Nginx. | int | 2 |
nginx.resources | Явная конфигурация CPU и памяти. Если не задана, применяется пресет, указанный в resourcesPreset. | object | {} |
nginx.resources.cpu | CPU, доступный каждой реплике. | quantity | "" |
nginx.resources.memory | Память (RAM), доступная каждой реплике. | quantity | "" |
nginx.resourcesPreset | Пресет размеров по умолчанию, используемый, когда resources не задан. | string | t1.nano |
Примеры параметров и справка
resources и resourcesPreset
resources задаёт явную конфигурацию CPU и памяти для каждой реплики.
Если значение не указано, применяется пресет, заданный в resourcesPreset.
resources:
cpu: 4000m
memory: 4Gi
resourcesPreset задаёт именованную конфигурацию CPU и памяти для каждой реплики.
Эта настройка игнорируется, если задано соответствующее значение resources.
| Имя пресета | CPU | Память |
|---|---|---|
nano | 250m | 128Mi |
micro | 500m | 256Mi |
small | 1 | 512Mi |
medium | 1 | 1Gi |
large | 2 | 2Gi |
xlarge | 4 | 4Gi |
2xlarge | 8 | 8Gi |
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