Расширенная конфигурация с помощью аннотаций#
Здесь объясняется, как включить расширенную функциональность ANIC с помощью аннотаций.
Ресурс Ingress может использовать базовые функции Angie, такие как маршрутизация на основе хоста или пути и TLS-терминирование. Расширенные функции, такие как переписывание URI запроса или вставка дополнительных заголовков ответа, могут быть включены с помощью аннотаций. Аннотации позволяют настраивать поведение Angie для каждого Ingress-ресурса.
Помимо расширенных функций, аннотации необходимы для настройки поведения Angie, например, установки значений таймаутов соединений.
Настройка также доступна через ресурсы ConfigMap: аннотации имеют приоритет.
Использование аннотаций#
Этот пример использует аннотации для настройки конфигурации ресурса Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-with-annotations
annotations:
``angie.software/proxy-connect-timeout: "30s"
``angie.software/proxy-read-timeout: "20s"
``angie.software/client-max-body-size: "4m"
``angie.software/server-snippets: |
location / {
return 302 /coffee;
}
spec:
rules:
- host: cafe.example.com
http:
paths:
- path: /tea
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee
pathType: Prefix
backend:
service:
name: coffee-svc
port:
number: 80
Валидация#
ANIC проверяет аннотации ресурсов Ingress. Если Ingress некорректен, ANIC отклонит его: Ingress продолжит существовать в кластере, но ANIC будет его игнорировать.
Вы можете проверить, успешно ли ANIC применил конфигурацию для ресурса Ingress.
Для примера Ingress cafe-ingress-with-annotations
вы можете выполнить
следующую команду:
$ kubectl describe ing cafe-ingress-with-annotations
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal AddedOrUpdated 3s angie-ingress-controller Configuration for default/cafe-ingress-with-annotations was added or updated
Раздел событий включает событие Normal с причиной AddedOrUpdated, которое сообщает нам, что конфигурация была успешно применена.
Если вы создадите некорректный Ingress, ANIC отклонит его и сгенерирует событие
Rejected. Например, если вы создадите Ingress cafe-ingress-with-annotations
с аннотацией angie.software/redirect-to-https
, установленной на yes please
вместо true
, вы получите:
$ kubectl describe ing cafe-ingress-with-annotations
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Rejected 13s angie-ingress-controller annotations.``angie.software/redirect-to-https: Invalid value: "yes please": must be a boolean
Обратите внимание, что раздел событий включает событие Warning с причиной Rejected.
Примечание
Если вы сделаете существующий Ingress некорректным, ANIC отклонит его и удалит соответствующую конфигурацию из ANIC.
Сводка аннотаций#
В таблице ниже приведены доступные аннотации.
Общая настройка#
Аннотация |
Ключ ConfigMap |
Описание |
Значение по умолчанию |
Пример |
---|---|---|---|---|
|
|
Устанавливает значение для директив proxy_connect_timeout и grpc_connect_timeout. |
|
|
|
|
Устанавливает значение для директив proxy_read_timeout и grpc_read_timeout. |
|
|
|
|
Устанавливает значение для директив proxy_send_timeout и grpc_send_timeout. |
|
|
|
|
Устанавливает значение для директивы client_max_body_size (ограничивает размер тела запроса клиента). |
|
|
|
|
Устанавливает максимально допустимый размер тела запроса клиента, передаваемого прокси-сервером дальше. См. также client_max_body_size. |
|
|
|
|
Включает или отключает :ref:`буферизацию ответов <proxy_buffering>`_ от проксируемого сервера. |
|
|
|
|
Устанавливает значение для директивы proxy_buffers. |
Зависит от платформы. |
|
|
|
Устанавливает значение для директив proxy_buffer_size и grpc_buffer_size. |
Зависит от платформы. |
|
|
|
Устанавливает значение для директивы proxy_max_temp_file_size. |
|
|
|
|
Включает или отключает директиву server_tokens. Кроме того, с Angie можно указать строковое значение, включая пустую строку, что отключает вывод поля "Server". |
|
|
|
Нет |
Включает модификаторы регулярных выражений для параметра пути Ingress.
Это соответствует директиве Angie location.
Можно указать одно из значений: "case_sensitive", "case_insensitive" или
"exact". Аннотация применяется к ресурсу Ingress и его путям. При
использовании Master и Minion Ingresses (т.е. Mergeable Ingresses) эту
аннотацию можно указывать для Minion-типов. Аннотация |
Нет |
|
|
Нет |
Позволяет задать конкретный ConfigMap для настройки ресурса Ingress. Заданный ConfigMap будет иметь приоритет над глобальным. В случае, если глобальный и заданный ConfigMap совпадают, применится заданный. Пример: |
|
Манипуляция URI и заголовками запросов#
Аннотация |
Ключ ConfigMap |
Описание |
Значение по умолчанию |
Пример |
---|---|---|---|---|
|
|
Устанавливает значение одной или нескольких директив proxy_hide_header. Пример: |
Нет |
|
|
|
Устанавливает значение одной или нескольких директив proxy_pass_header. Пример: |
Нет |
|
|
Нет |
Конфигурирует перезапись URI с использованием директивы proxy_pass. |
Нет |
Аутентификация и SSL/TLS#
Аннотация |
Ключ ConfigMap |
Описание |
Значение по умолчанию |
Пример |
---|---|---|---|---|
|
|
Устанавливает правило перенаправления 301 на основе значения заголовка
|
|
|
|
|
Устанавливает некондиционное правило перенаправления 301 для всего входящего HTTP трафика, чтобы заставить входящий трафик проходить через HTTPS. |
|
|
|
|
Включает HTTP Strict Transport Security (HSTS): заголовок HSTS добавляется к ответам от проксируемых серверов. В заголовок включается директива |
|
|
|
|
Устанавливает значение директивы |
|
|
|
|
Добавляет директиву |
|
|
|
|
Включает HSTS на основе значения заголовка запроса
Примечание Для управления перенаправлением с HTTP на HTTPS настройте аннотацию
|
|
|
|
Нет |
Указывает ресурс Secret с списком пользователей для HTTP Basic аутентификации. |
Нет |
|
|
Нет |
Указывает область. |
Нет |
Прослушиватели#
Аннотация |
Ключ ConfigMap |
Описание |
Значение по умолчанию |
Пример |
---|---|---|---|---|
|
Нет |
Конфигурирует HTTP порты, на которых Angie будет слушать. |
|
|
|
Нет |
Конфигурирует HTTPS порты, на которых Angie будет слушать. |
|
Бэкенд-сервисы (апстримы)#
Аннотация |
Ключ ConfigMap |
Описание |
Значение по умолчанию |
Пример |
---|---|---|---|---|
|
|
Устанавливает метод балансировки нагрузки.
Для использования метода round-robin укажите |
|
|
|
Нет |
Включает HTTPS или gRPC через SSL при подключении к конечным точкам сервисов. |
Нет |
|
|
Нет |
Включает gRPC для сервисов. Примечание Требует HTTP/2 (см. ключ |
Нет |
|
|
Нет |
Включает WebSocket для сервисов. |
Нет |
|
|
|
Устанавливает значение параметра |
|
|
|
Нет |
Устанавливает значение параметра |
|
|
|
|
Устанавливает размер зоны разделяемой памяти для апстрима. Для Angie специальное значение 0 отключает зоны общей памяти. Для Angie зоны общей памяти требуются и не могут быть отключены. Специальное значение 0 будет проигнорировано. |
|
|
|
|
Устанавливает значение параметра |
|
|
|
Нет |
Конфигурирует сохранение сеансов. |
Нет |
|
|
Нет |
Конфигурирует сохранение сеансов. |
Нет |
|
|
|
Устанавливает значение директивы keepalive. Обратите внимание,
что |
|
|
|
Нет |
Включает активные проверки состояния. |
|
|
|
Нет |
Конфигурирует активные проверки состояния как обязательные. |
|
|
|
Нет |
Когда активные проверки состояния обязательны, создает очередь, в которой входящие запросы временно хранятся, пока Angie проверяет состояние конечных точек после перезагрузки конфигурации. |
|
|
|
Нет |
Устанавливает период медленного запуска сервера для апстрима. По умолчанию медленный запуск активируется после того, как сервер становится доступным или здоровым. Для включения медленного запуска для новоназначенных серверов настройте обязательные активные проверки состояния. |
|
|
|
Нет |
Включает использование IP-адреса и порта кластера сервиса вместо
поведения по умолчанию, когда используются IP и порт подов. Когда это
поле включено, поля, которые настраивают поведение Angie, связанное с
несколькими апстримами (такими как |
|
Ограничение скорости#
Аннотация |
Ключ ConfigMap |
Описание |
Значение по умолчанию |
Пример |
---|---|---|---|---|
|
Нет |
Включает ограничение скорости запросов для этого Ingress, создавая limit_req_zone и применяя limit_req для каждого location. Все серверы/location одного Ingress используют одну зону. Должен иметь единицу r/s или r/m. |
Нет |
200r/s |
|
Нет |
Ключ, к которому применяется ограничение скорости. Может содержать текст, переменные или их комбинацию. Переменные должны быть окружены ${}. |
${binary_remote_addr} |
${binary_remote_addr} |
|
Нет |
Конфигурирует размер созданной limit_req_zone. |
10m |
20m |
|
Нет |
Конфигурирует параметр delay директивы limit_req. |
0 |
100 |
|
Нет |
Конфигурирует параметр nodelay директивы limit_req. |
false |
true |
|
Нет |
Конфигурирует параметр burst директивы limit_req. |
Нет |
100 |
|
Нет |
Включает режим проверки. В этом режиме ограничение скорости не применяется, но количество избыточных запросов учитывается, как обычно, в зоне общей памяти. |
false |
true |
|
Нет |
Устанавливает желаемый уровень логирования для случаев, когда сервер отказывается обрабатывать запросы из-за превышения скорости или задержек в обработке запросов. Разрешенные значения: info, notice, warn или error. |
error |
info |
|
Нет |
Устанавливает код состояния, который возвращается в ответ на отклоненные запросы. Должен находиться в диапазоне 400..599. |
429 |
503 |
|
Нет |
Включает постоянное ограничение скорости, деля настроенное значение скорости на количество подов Ingress, в настоящее время обслуживающих трафик. Эта корректировка обеспечивает постоянство ограничения скорости, даже если количество подов изменяется из-за автоскейлинга. Примечание Это не будет работать правильно, если запросы от клиента не распределяются равномерно между всеми подами Ingress (привязка сеансов, длительные TCP-соединения с множеством запросов и т.д.). В таких случаях лучшие результаты даст использование функции синхронизации зон Angie. |
false |
true |
Фрагменты и пользовательские шаблоны#
Аннотация |
Ключ ConfigMap |
Описание |
Значение по умолчанию |
Пример |
---|---|---|---|---|
|
|
Устанавливает пользовательский фрагмент в контексте location. |
Нет |
|
|
|
Устанавливает пользовательский фрагмент в контексте server. |
Нет |