<a id="configmap-resource"></a>

# ConfigMap

ConfigMap позволяет настраивать поведение Angie.
Например, можно задать количество рабочих процессов или настроить формат журнала
доступа.

## Использование ConfigMap

1. Наши инструкции по установке с манифестами
   развертывают пустой ConfigMap, в то время как манифесты установки по
   умолчанию указывают ее в аргументах командной строки ANIC.
   Однако, если вы настроили манифесты, чтобы использовать ConfigMap,
   обязательно укажите ресурс ConfigMap для использования с помощью
   [аргументов командной строки](https://angie.software//anic/docs/configuration/command-line-arguments.md#command-line-arguments) ANIC.
2. Создайте файл ConfigMap с именем `angie-config.yaml` и установите
   значения, которые имеют смысл для вашей среды:
   ```yaml
   kind: ConfigMap
   apiVersion: v1
   metadata:
     name: angie-config
     namespace: angie-ingress
   data:
     proxy-connect-timeout: 10s
     proxy-read-timeout: 10s
     client-max-body-size: 2m
   ```

   См. в разделе [Краткое описание ключей
   ConfigMap](#summary-of-configmap-keys) сведения о доступных ключах
   ConfigMap (таких как `proxy-connect-timeout` в этом примере).
3. Создайте новый (или обновите существующий) ресурс ConfigMap:
   ```console
   kubectl apply -f angie-config.yaml
   ```

   Конфигурация Angie будет обновлена.

## ConfigMap и аннотации Ingress

Аннотации позволяют настраивать расширенные функции Angie и менять
поведение Angie.

ConfigMap применяется глобально, то есть влияет на каждый ресурс
Ingress. Напротив, аннотации всегда применяются только к своему ресурсу
Ingress. Аннотации позволяют переопределять некоторые ключи ConfigMap.
Например, в `angie.software/proxy-connect-timeout` аннотации
переопределяют ключ конфигурации `proxy-connect-timeout`.

<a id="annotation-configmap"></a>

## Переопределение ConfigMap для конкретного ресурса Ingress с помощью аннотации

Вы можете применять разные конфигурации ConfigMap к Ingress-ресурсам в зависимости от того, какое пространство имен указано в конфигурации. Аннотация `angie.software/configmap` позволяет задать конкретный ConfigMap для настройки ресурса Ingress. Заданный ConfigMap будет иметь приоритет над глобальным. В случае, если глобальный и заданный ConfigMap совпадают, применится заданный.

Чтобы применить конкретный ConfigMap к ресурсу Ingress:

1. Создайте ConfigMap с указанием нужного пространства имен.

   Например:
   > ```yaml
   > kind: ConfigMap
   > apiVersion: v1
   > metadata:
   >   name: echoserver-new-config
   >   namespace: echoserver-new
   > data:
   >   server-snippets: |
   >     location /echoserver-new-snippet {
   >           return 302 /echo-test-2;
   >     }
   > ```
2. Укажите аннотацию `angie.software/configmap` в ресурсе Ingress, к которому нужно применить этот ConfigMap.

   Например:
   > ```yaml
   > apiVersion: networking.k8s.io/v1
   > kind: Ingress
   > metadata:
   >   annotations:
   >     angie.software/configmap: "echoserver-new/echoserver-new-config"
   >   name: echoserver-new
   >   namespace: echoserver-new
   > spec:
   >   ingressClassName: angie
   >   rules:
   >   - host: test-new.example.com
   >     http:
   >       paths:
   >       - backend:
   >           service:
   >             name: echoserver-new
   >             port:
   >               number: 8077
   >         pathType: ImplementationSpecific
   > ```

   В этом примере аннотация `angie.software/configmap` указывает на использование конфигурации из ConfigMap `echoserver-new-config`. Это означает, что директивы, описанные в `server-snippets` из этого ConfigMap, будут применяться к запросам, обрабатываемым этим Ingress.

См. также документацию по [расширенной конфигурации с помощью аннотаций](https://angie.software//anic/docs/configuration/annotations.md#annotations).

## ConfigMap и ресурсы VirtualServer, VirtualServerRoute

ConfigMap влияет на все ресурсы VirtualServer и VirtualServerRoute.
Однако поля этих ресурсов позволяют переопределять некоторые ключи
ConfigMap. Например, поле `connect-timeout` сервера `апстрима` имеет
приоритет над ключом ConfigMap `proxy-connect-timeout`.

См. документацию по [ресурсам VirtualServer и
VirtualServerRoute](https://angie.software//anic/docs/configuration/virtualserver-and-virtualserverroute-resources.md#virtualserver-and-virtualserverroute-resources).

## Краткое описание ключей ConfigMap

#### NOTE
Для всех параметров типа `boolean` допустимы пары значений `true`/ `false`, `t` / `f`, `on` / `off` и `1` / `0`. Регистр не имеет значения.

### ANIC (не связанные с конфигурацией Angie)

| Ключ ConfigMap            | Описание                                                                                                                                                                               | По умолчанию   | Пример                                                                                                                                         |
|---------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|------------------------------------------------------------------------------------------------------------------------------------------------|
| `external-status-address` | Задает адрес, который будет отображаться в статусе ресурсов Ingress.<br/>Требуется аргумент командной строки `-report-status`. Имеет приоритет<br/>над аргументом `-external-service`. | Н/Д            | [Отчет о состоянии Ingress](https://angie.software//anic/docs/logging-and-monitoring/reporting-resources-status.md#reporting-resources-status) |

### Общая настройка

| Ключ ConfigMap                  | Описание                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | По умолчанию          | Пример   |
|---------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|----------|
| `proxy-connect-timeout`         | Задает значение директив<br/>[proxy_connect_timeout](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-connect-timeout)<br/>и<br/>[grpc_connect_timeout](https://angie.software//angie/docs/configuration/modules/http/http_grpc.md#grpc-connect-timeout).                                                                                                                                                                                                                                                  | `60s`                 |          |
| `proxy-read-timeout`            | Задает значение директив<br/>[proxy_read_timeout](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-read-timeout)<br/>и<br/>[grpc_read_timeout](https://angie.software//angie/docs/configuration/modules/http/http_grpc.md#grpc-read-timeout).                                                                                                                                                                                                                                                              | `60s`                 |          |
| `proxy-send-timeout`            | Задает значение директив<br/>[proxy_send_timeout](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-send-timeout)<br/>и<br/>[grpc_send_timeout](https://angie.software//angie/docs/configuration/modules/http/http_grpc.md#grpc-send-timeout).                                                                                                                                                                                                                                                              | `60s`                 |          |
| `client-max-body-size`          | Задает значение директивы<br/>[client_max_body_size](https://angie.software//angie/docs/configuration/modules/http/index.md#client-max-body-size).                                                                                                                                                                                                                                                                                                                                                                                          | `1m`                  |          |
| `proxy-buffering`               | Включает или отключает [буферизацию<br/>ответов](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-buffering) от<br/>проксируемого сервера.                                                                                                                                                                                                                                                                                                                                                                 | `True`                |          |
| `proxy-buffers`                 | Задает значение директивы<br/>[proxy_buffers](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-buffers).                                                                                                                                                                                                                                                                                                                                                                                                   | Зависит от платформы. |          |
| `proxy-buffer-size`             | Задает значение директив<br/>[proxy_buffer_size](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-buffer-size)<br/>и<br/>[grpc_buffer_size](https://angie.software//angie/docs/configuration/modules/http/http_grpc.md#grpc-buffer-size).                                                                                                                                                                                                                                                                  | Зависит от платформы. |          |
| `proxy-max-temp-file-size`      | Задает значение директивы<br/>[proxy_max_temp_file_size](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-max-temp-file-size).                                                                                                                                                                                                                                                                                                                                                                             | `1024m`               |          |
| `set-real-ip-from`              | Задает значение директивы<br/>[set_real_ip_from](https://angie.software//angie/docs/configuration/modules/http/http_realip.md#set-real-ip-from).                                                                                                                                                                                                                                                                                                                                                                                            | Н/Д                   |          |
| `real-ip-header`                | Задает значение директивы<br/>[real_ip_header](https://angie.software//angie/docs/configuration/modules/http/http_realip.md#real-ip-header).                                                                                                                                                                                                                                                                                                                                                                                                | `X-Real-IP`           |          |
| `real-ip-recursive`             | Включает или отключает директиву<br/>[real_ip_recursive](https://angie.software//angie/docs/configuration/modules/http/http_realip.md#real-ip-recursive).                                                                                                                                                                                                                                                                                                                                                                                   | `False`               |          |
| `default-server-return`         | Настраивает директиву [return](https://angie.software//angie/docs/configuration/modules/http/http_rewrite.md#return) на сервере по умолчанию, которая<br/>обрабатывает клиентский запрос, если ни один из узлов ресурсов Ingress<br/>или VirtualServer не совпадает. Значение по умолчанию настраивает в Angie<br/>возврат страницы с ошибкой 404. Вы можете настроить фиксированный ответ<br/>или перенаправление. Например, значение `default-server-return: 302<br/>https://mysite.ru:samp:` перенаправит клиент на `https://mysite.ru`. | `404`                 |          |
| `server-tokens`                 | Включает или отключает директиву<br/>[server_tokens](https://angie.software//angie/docs/configuration/modules/http/index.md#server-tokens).                                                                                                                                                                                                                                                                                                                                                                                                 | `True`                |          |
| `worker-processes`              | Задает значение директивы<br/>[worker_processes](https://angie.software//angie/docs/configuration/modules/core.md#worker-processes).                                                                                                                                                                                                                                                                                                                                                                                                        | `auto`                |          |
| `worker-rlimit-nofile`          | Задает значение директивы<br/>[worker_rlimit_nofile](https://angie.software//angie/docs/configuration/modules/core.md#worker-rlimit-nofile).                                                                                                                                                                                                                                                                                                                                                                                                | Н/Д                   |          |
| `worker-connections`            | Задает значение директивы<br/>[worker_connections](https://angie.software//angie/docs/configuration/modules/core.md#worker-connections).                                                                                                                                                                                                                                                                                                                                                                                                    | `1024`                |          |
| `worker-cpu-affinity`           | Задает значение директивы<br/>[worker_cpu_affinity](https://angie.software//angie/docs/configuration/modules/core.md#worker-cpu-affinity).                                                                                                                                                                                                                                                                                                                                                                                                  | Н/Д                   |          |
| `worker-shutdown-timeout`       | Задает значение директивы<br/>[worker_shutdown_timeout](https://angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout).                                                                                                                                                                                                                                                                                                                                                                                          | Н/Д                   |          |
| `server-names-hash-bucket-size` | Задает значение директивы<br/>[server_names_hash_bucket_size](https://angie.software//angie/docs/configuration/modules/http/index.md#server-names-hash-bucket-size).                                                                                                                                                                                                                                                                                                                                                                        | `256`                 |          |
| `server-names-hash-max-size`    | Задает значение директивы<br/>[server_names_hash_max_size](https://angie.software//angie/docs/configuration/modules/http/index.md#server-names-hash-max-size).                                                                                                                                                                                                                                                                                                                                                                              | `1024`                |          |
| `map-hash-bucket-size`          | Задает значение директивы<br/>[map_hash_bucket_size](https://angie.software//angie/docs/configuration/modules/http/http_map.md#map-hash-bucket-size).                                                                                                                                                                                                                                                                                                                                                                                       | `256`                 |          |
| `map-hash-max-size`             | Задает значение директивы<br/>[map_hash_max_size](https://angie.software//angie/docs/configuration/modules/http/http_map.md#map-hash-max-size).                                                                                                                                                                                                                                                                                                                                                                                             | `2048`                |          |
| `resolver-addresses`            | Задает значение адресов [resolver](https://angie.software//angie/docs/configuration/modules/http/index.md#resolver).                                                                                                                                                                                                                                                                                                                                                                                                                        | Н/Д                   |          |
| `resolver-ipv6`                 | Включает разрешение IPv6 в распознавателе.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | `True`                |          |
| `resolver-timeout`              | Задает значение [resolver_timeout](https://angie.software//angie/docs/configuration/modules/http/index.md#resolver-timeout) для разрешения имен.                                                                                                                                                                                                                                                                                                                                                                                            | `30s`                 |          |
| `keepalive-timeout`             | Задает значение директивы<br/>[keepalive_timeout](https://angie.software//angie/docs/configuration/modules/http/index.md#keepalive-timeout).                                                                                                                                                                                                                                                                                                                                                                                                | `65s`                 |          |
| `keepalive-requests`            | Задает значение директивы<br/>[keepalive_requests](https://angie.software//angie/docs/configuration/modules/http/index.md#keepalive-requests).                                                                                                                                                                                                                                                                                                                                                                                              | `100`                 |          |
| `variables-hash-bucket-size`    | Задает значение директивы<br/>[variables_hash_bucket_size](https://angie.software//angie/docs/configuration/modules/http/index.md#variables-hash-bucket-size).                                                                                                                                                                                                                                                                                                                                                                              | `256`                 |          |
| `variables-hash-max-size`       | Задает значение директивы<br/>[variables_hash_max_size](https://angie.software//angie/docs/configuration/modules/http/index.md#variables-hash-max-size).                                                                                                                                                                                                                                                                                                                                                                                    | `1024`                |          |

<a id="logging-configmap"></a>

### Ведение журнала

| Ключ ConfigMap                  | Описание                                                                                                                                                                                                                                                                                                                                                                               | По умолчанию   | Пример   |
|---------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|----------|
| `error-log-level`               | Задает глобальный [уровень журнала<br/>ошибок](https://angie.software//angie/docs/configuration/modules/core.md#error-log) для Angie.                                                                                                                                                                                                                                                  | `notice`       |          |
| `access-log-off`                | Отключает [журнал доступа](https://angie.software//angie/docs/configuration/modules/core.md#error-log).                                                                                                                                                                                                                                                                                | `False`        |          |
| `default-server-access-log-off` | Отключает [журнал доступа](https://angie.software//angie/docs/configuration/modules/core.md#error-log) для<br/>сервера по умолчанию. Если журнал доступа отключен глобально<br/>(`access-log-off: "True"`), то журнал доступа к серверу по умолчанию<br/>всегда отключен.                                                                                                              | `False`        |          |
| `log-format`                    | Задает настраиваемый [формат журнала](https://angie.software//angie/docs/configuration/modules/http/http_log.md#log-format) для HTTP- и<br/>HTTPS-трафика. Для удобства можно определить формат журнала в нескольких<br/>строках (строки разделяются символом `\n`). В этом случае ANIC заменит<br/>каждый символ `\n` символом пробела. Все символы `'` должны быть<br/>экранированы. |                |          |
| `log-format-escaping`           | Задает экранирующие символы для переменных формата журнала.<br/>Поддерживаемые значения: `json` (экранирование JSON), `default`<br/>(экранирование по умолчанию), `none` (отключает экранирование).                                                                                                                                                                                    | `default`      |          |
| `stream-log-format`             | Задает настраиваемый формат журнала <s_log_format> для сквозного<br/>трафика TCP, UDP и TLS. Для удобства можно определить формат журнала в<br/>нескольких строках (строки разделяются символом `\n`). В этом случае<br/>ANIC заменит каждый символ `\n` символом пробела. Все символы `'`<br/>должны быть экранированы.                                                               |                |          |
| `stream-log-format-escaping`    | Задает экранирующие символы для переменных формата журнала потока.<br/>Поддерживаемые значения: `json` (экранирование JSON), `default`<br/>(экранирование по умолчанию), `none` (отключает экранирование).                                                                                                                                                                             | `default`      |          |

### Манипулирование URI и заголовками запроса

| Ключ ConfigMap       | Описание                                                                                                                                                                   | По умолчанию   | Пример                                                         |
|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|----------------------------------------------------------------|
| `proxy-hide-headers` | Задает значение одной директивы<br/>[proxy_hide_header](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-hide-header)<br/>или нескольких. | Н/Д            | `"angie.software/proxy-hide-headers": "header-a,header-b"`     |
| `proxy-pass-headers` | Задает значение одной директивы<br/>[proxy_pass_header](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-pass-header)<br/>или нескольких. | Н/Д            | `"angie.software/proxy-pass-headers":<br/>"header-a,header-b"` |

### Аутентификация, SSL, TLS

| Ключ ConfigMap              | Описание                                                                                                                                                                                                                                                                                                                                                     | По умолчанию            | Пример   |
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------|----------|
| `redirect-to-https`         | Задает правило перенаправления 301 на основе значения заголовка<br/>`http_x_forwarded_proto` в серверном блоке, требуя, чтобы входящий<br/>трафик шел по протоколу HTTPS. Полезно при терминации SSL в системе<br/>балансировки нагрузки перед ANIC.                                                                                                         | `False`                 |          |
| `ssl-redirect`              | Задает безусловное правило перенаправления 301 для всего входящего<br/>HTTP-трафика, требуя, чтобы входящий трафик шел по протоколу HTTPS.                                                                                                                                                                                                                   | `True`                  |          |
| `hsts`                      | Включает режим HTTP Strict Transport Security (HSTS): заголовок HSTS<br/>добавляется к ответам от проксируемых серверов. Директива `preload` будет включена<br/>в заголовок.                                                                                                                                                                                 | `False`                 |          |
| `hsts-max-age`              | Задает значение директивы `max-age` заголовка HSTS.                                                                                                                                                                                                                                                                                                          | `2592000` (1 месяц)     |          |
| `hsts-include-subdomains`   | Добавляет директиву `includeSubDomains` в заголовок HSTS.                                                                                                                                                                                                                                                                                                    | `False`                 |          |
| `hsts-behind-proxy`         | Включает HSTS на основе значения заголовка запроса<br/>`http_x_forwarded_proto`. Следует использовать только в том случае,<br/>если в балансировщике нагрузки (прокси-сервере) перед ANIC<br/>настроена терминация TLS.<br/><br/>#### NOTE<br/>Чтобы управлять перенаправлением с HTTP на HTTPS,<br/>настройте аннотацию `angie.software/redirect-to-https`. | `False`                 |          |
| `ssl-protocols`             | Задает значение директивы [ssl_protocols](https://angie.software//angie/docs/configuration/modules/http/http_ssl.md#ssl-protocols).                                                                                                                                                                                                                          | `TLSv1 TLSv1.1 TLSv1.2` |          |
| `ssl-prefer-server-ciphers` | Включает или отключает директиву [ssl_prefer_server_ciphers](https://angie.software//angie/docs/configuration/modules/http/http_ssl.md#ssl-prefer-server-ciphers).                                                                                                                                                                                           | `On`                    |          |
| `ssl-ciphers`               | Задает значение директивы [ssl_ciphers](https://angie.software//angie/docs/configuration/modules/http/http_ssl.md#ssl-ciphers).                                                                                                                                                                                                                              | `HIGH:!aNULL:!MD5`      |          |
| `ssl-dhparam-file`          | Задает содержимое файла `dhparam`. Контроллер создаст файл и установит<br/>значение директивы [ssl_dhparam](https://angie.software//angie/docs/configuration/modules/http/http_ssl.md#ssl-dhparam) с указанием пути к файлу.                                                                                                                                 | Н/Д                     |          |

### Прослушиватели

| Ключ ConfigMap   | Описание                                          | По умолчанию   | Пример   |
|------------------|---------------------------------------------------|----------------|----------|
| `http2`          | Включает HTTP/2 на серверах с включенным SSL.     | `False`        |          |
| `proxy-protocol` | Включает прокси-протокол для входящих соединений. | `False`        |          |

### Бэкенд-сервисы (апстримы)

| Ключ ConfigMap       | Описание                                                                                                                                                                                                                                                            | По умолчанию              | Пример   |
|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|----------|
| `lb-method`          | Задает метод балансировки нагрузки. Чтобы использовать циклический<br/>метод, укажите `"round_robin"`.                                                                                                                                                              | `"random two least_conn"` |          |
| `max-fails`          | Задает значение параметра `max_fails` директивы<br/>[server](https://angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-server).                                                                                                              | `1`                       |          |
| `upstream-zone-size` | Задает размер [зоны](https://angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-zone) разделяемой памяти для апстримов.                                                                                                                       |                           |          |
| `fail-timeout`       | Задает значение параметра `fail_timeout` директивы [server](https://angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-server).                                                                                                               | `10s`                     |          |
| `keepalive`          | Задает значение директивы [keepalive](https://angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-keepalive). Обратите внимание: если<br/>значение больше 0, в сгенерированную конфигурацию добавляется<br/>`proxy_set_header Connection "";`. | `0`                       |          |

### Фрагменты и пользовательские шаблоны

| Ключ ConfigMap           | Описание                                                    | По умолчанию                                           | Пример   |
|--------------------------|-------------------------------------------------------------|--------------------------------------------------------|----------|
| `main-snippets`          | Задает пользовательский фрагмент в основном контексте.      | Н/Д                                                    |          |
| `http-snippets`          | Задает пользовательский фрагмент в контексте http.          | Н/Д                                                    |          |
| `location-snippets`      | Задает пользовательский фрагмент в контексте location.      | Н/Д                                                    |          |
| `server-snippets`        | Задает пользовательский фрагмент в контексте server.        | Н/Д                                                    |          |
| `stream-snippets`        | Задает пользовательский фрагмент в контексте stream.        | Н/Д                                                    |          |
| `main-template`          | Задает основной шаблон конфигурации Angie.                  | По умолчанию шаблон считывается из файла в контейнере. |          |
| `ingress-template`       | Задает шаблон конфигурации Angie для ресурса Ingress.       | По умолчанию шаблон считывается из файла в контейнере. |          |
| `virtualserver-template` | Задает шаблон конфигурации Angie для ресурса VirtualServer. | По умолчанию шаблон считывается из файла в контейнере. |          |
