VirtualServer, VirtualServerRoute#
Ресурсы VirtualServer и VirtualServerRoute реализуют сценарии использования, не поддерживаемые ресурсом Ingress, такие как разделение трафика и продвинутая маршрутизация на основе содержимого. Они реализованы как пользовательские ресурсы .
Это справочная документация по обоим ресурсам. Ресурс VirtualServer определяет конфигурацию балансировки нагрузки для
доменного имени, например Поле Описание Тип Обязательно Хост (доменное имя) сервера. Это должен быть допустимый поддомен, как
определено в RFC 1123, например Да Конфигурация терминации TLS. Нет Список каталогов для раздачи статических файлов. Нет Включает или отключает распаковку архивированных
ответов для клиентов. Допустимые пары значений: "on" и "off", "true" и
"false" или "yes" и "no". Если значение Нет Конфигурация ExternalDNS для VirtualServer. Нет Ссылка на DosProtectedResource; установка этого параметра включает
защиту VirtualServer от DOS-атак. Нет Список политик. Нет Список апстримов. Нет Список маршрутов. Нет Список активных проверок работоспособности. Нет Список переменных, необходимых для валидации токенов в процессе аутентификации OIDC. Нет Указывает, какой экземпляр ANIC должен обрабатывать ресурс
VirtualServer. Нет Указывает, является ли ресурс VirtualServer внутренним маршрутом. Нет Задает пользовательский фрагмент в контексте http. Нет Задает пользовательский фрагмент в контексте . Имеет приоритет над
ключом ConfigMap Нет Задает список точек авторизации клиента при настройке Нет Поле tls определяет конфигурацию TLS для ресурса VirtualServer.
Например: Поле Описание Тип Обязательно Имя секрета с сертификатом TLS и ключом. Секрет должен принадлежать тому
же пространству имен, что и VirtualServer. Секрет должен иметь тип
Нет Конфигурация перенаправления TLS для VirtualServer. Нет Конфигурация TLS cert-manager для VirtualServer. Нет Задает время, в течение которого клиент может повторно использовать параметры сессии. См. также директиву
ssl_session_timeout в документации Angie. Значение по умолчанию Нет Задает тип и размеры кэшей для хранения параметров сессий. См. также директиву
ssl_session_cache в документации Angie. Значение по умолчанию Нет Разрешает или запрещает возобновление сессий при помощи TLS session tickets. См. также директиву
ssl_session_tickets в документации Angie. Значение по умолчанию Нет Разрешает или запрещает прикрепление OCSP-ответов сервером. См. также директиву
ssl_stapling в документации Angie. Значение по умолчанию Нет Разрешает или запрещает проверку сервером ответов OCSP. См. также директиву
ssl_stapling_verify в документации Angie. Значение по умолчанию Нет Поле перенаправления настраивает перенаправление TLS для VirtualServer: Поле Описание Тип Обязательно Включает перенаправление TLS для VirtualServer. Значение по умолчанию
равно Нет Код состояния перенаправления. Допустимые значения: Нет Атрибут запроса, который Angie будет оценивать для отправки
перенаправления. Допустимыми значениями являются Нет Поле cert-manager настраивает автоматическое управление сертификатами
x509 для ресурсов VirtualServer с помощью cert-manager
(cert-manager.io). Ознакомьтесь с документацией по конфигурации
cert-manager для
получения дополнительной информации о развертывании и настройке
эмитентов (Issuer). Пример: Поле Описание Тип Обязательно Имя эмитента. Эмитент - это ресурс cert-manager, который описывает центр
сертификации, способный подписывать сертификаты. Он должен находиться в
том же пространстве имен, что и ресурс VirtualServer. Обратите внимание,
что требуется задать issuer или cluster-issuer, но эти параметры
взаимоисключающие - должен быть задан один и только один. Нет Имя ClusterIssuer. ClusterIssuer - это ресурс cert-manager, который
описывает центр сертификации, способный подписывать сертификаты. Не
имеет значения, в каком пространстве имен находится ваш VirtualServer,
поскольку ClusterIssuer - это ресурсы, не относящиеся к пространствам
имен. Обратите внимание, что требуется задать issuer или
cluster-issuer, но эти параметры взаимоисключающие - должен быть задан
один и только один. Нет Тип внешнего ресурса-эмитента, например AWSPCAIssuer. Это необходимо
только для сторонних эмитентов. Его нельзя задавать, если также задан
cluster-issuer. Нет Группа API внешнего контроллера-эмитента, например
awspca.cert-manager.io. Это необходимо только для сторонних эмитентов.
Его нельзя задавать, если также задан cluster-issuer. Нет Это поле позволяет настроить spec.commonName для создаваемого
сертификата. Эта конфигурация добавляет CN к сертификату x509. Нет Это поле позволяет настроить поле spec.duration для генерируемого
сертификата. Оно должно быть задано с использованием формата
time.Duration в Go, который
не допускает суффикса d (дни). Указывайте такие значения, используя
вместо них суффиксы s, m и h. Нет Эта аннотация позволяет настроить поле spec.renewBefore для
генерируемого сертификата. Оно должно быть задано с использованием
формата time.Duration в Go,
который не допускает суффикса d (дни). Указывайте такие значения,
используя вместо них суффиксы s, m и h. Нет Позволяет настроить поле spec.usages для генерируемого сертификата.
Задайте строку со значениями, разделенными запятыми, т. е. Нет Поле ExternalDNS настраивает динамическое управление записями DNS для
ресурсов VirtualServer с использованием
ExternalDNS .
Ознакомьтесь с документацией по конфигурации
ExternalDNS
для получения дополнительной информации о развертывании и настройке
ExternalDNS и поставщиков. Пример: Поле Описание Тип Обязательно Включает интеграцию ExternalDNS для ресурса VirtualServer. Значение по
умолчанию равно Нет Настраивает метки, применяемые к ресурсам конечной точки, которые будут
использоваться ExternalDNS. Нет Настраивает свойства, относящиеся к конкретному поставщику, которые
содержат имя и значение конфигурации, специфичной для отдельных
поставщиков DNS. Нет TTL для записи DNS. По умолчанию это значение равно 0. См. документацию
ExternalDNS TTL для определения значений по умолчанию для конкретного
поставщика Нет Тип создаваемой записи, например "A", "AAAA", "CNAME". Если значение не
задано, оно автоматически вычисляется на основе внешних конечных точек. Нет Поле providerSpecific блока ExternalDNS позволяет указать свойства,
специфичные для поставщика, которые представляют собой список пар
"ключ-значение" для конфигураций, специфичных для отдельных поставщиков
DNS. Пример: Поле Описание Тип Обязательно Имя в паре "ключ-значение". Да Значение в паре "ключ-значение". Да Ссылается на ресурс Policy по имени и
необязательному пространству имен. Например: Поле Описание Тип Обязательно Имя политики. Если политика не существует или недействительна,
Angie выдаст сообщение об ошибке с кодом состояния Да Пространство имен политики. Если не указано, используется
пространство имен ресурса VirtualServer. Нет Маршрут определяет правила для сопоставления клиентских запросов с
такими действиями, как передача запроса апстриму. Например: Поле Описание Тип Обязательно Путь маршрута. Angie сопоставит его с URI запроса. Возможные значения:
префикс ( Да Список политик. Эти политики имеют приоритет над политиками того же
типа, определенными в Нет Действие по умолчанию, выполняемое для запроса. Нет Ссылка на DosProtectedResource; установка этого параметра включает
защиту маршрута VirtualServer от DOS-атак. Нет Конфигурация разделения трафика по умолчанию. Должно быть не менее 2
разделений. Нет Правила сопоставления для продвинутой маршрутизации на основе
содержимого. Требуется задать Нет Имя ресурса VirtualServerRoute, который определяет этот маршрут. Если
VirtualServerRoute не принадлежит к тому же пространству имен, что и
VirtualServer, необходимо включить пространство имен. Например:
Нет Настраиваемые ответы на коды ошибок. Angie будет использовать эти ответы
вместо того, чтобы возвращать ответы об ошибках с серверов апстрима или
ответы по умолчанию, сгенерированные Angie. Настраиваемый ответ может
быть перенаправлением или сохраненным ответом. Например, это может быть
перенаправление на другой URL-адрес, если вышестоящий сервер ответил
кодом состояния 404. Нет Задает пользовательский фрагмент в контексте местоположения. Имеет
приоритет над ключом ConfigMap Нет Осуществляет авторизацию, основанную на результате выполнения подзапроса, и задает URI, на который будет отправлен подзапрос. Нет После завершения запроса авторизации устанавливает указанное значение для переменной в запросе. Нет Примечание Маршрут должен включать в себя ровно одно из следующих действий:
Определяет обязательные переменные Пример включения переменных См. также директиву map в документации Angie. Поле Описание Тип Обязательно Настраивает параметр Да Параметр Да Параметр Да Параметр Да Задает список точек авторизации для настройки Поле Описание Тип Обязательно Задает конкретный путь, на который будет отправляться запрос для проверки авторизации. Да Задает список апстримов, к которым будет направлен запрос. См. также директиву proxy_pass в документации Angie. Да Список заголовков, которые будут добавлены или изменены при проксировании запросов. Да Ресурс VirtualServerRoute определяет маршрут для VirtualServer. Он может
состоять из одного вложенного маршрута или нескольких. VirtualServerRoute
является альтернативой объединяемым типам Ingress. В приведенном ниже примере виртуальный сервер VirtualServer: VirtualServerRoute: Обратите внимание, что каждый вложенный маршрут должен иметь путь Поле Описание Тип Обязательно Хост (доменное имя) сервера. Это должен быть допустимый поддомен, как
определено в RFC 1123, например Да Список апстримов. Нет Список вложенных маршрутов. Нет Указывает, какой экземпляр ANIC должен обрабатывать ресурс
VirtualServerRoute. Значение должно совпадать с Нет Определяет правила сопоставления клиентских запросов и действий,
например передача запроса апстриму. Например: Поле Описание Тип Обязательно Путь вложенного маршрута. Angie сопоставит его с URI запроса. Возможные
значения: префикс ( Да Список политик. Эти политики имеют приоритет над всеми политиками,
определенными в маршруте VirtualServer, который ссылается на этот
ресурс. Они также имеют приоритет над политиками того же типа,
определенными в Нет Действие по умолчанию, выполняемое для запроса. Нет Ссылка на DosProtectedResource; установка этого параметра включает
защиту вложенного маршрута VirtualServerRoute от DOS-атак. Нет Конфигурация разделения трафика по умолчанию. Должно быть не менее 2
разделений. Нет Правила сопоставления для продвинутой маршрутизации на основе
содержимого. Требуется задать Нет Настраиваемые ответы на коды ошибок. Angie будет использовать эти ответы
вместо того, чтобы возвращать ответы об ошибках с серверов апстрима или
ответы по умолчанию, сгенерированные Angie. Настраиваемый ответ может
быть перенаправлением или сохраненным ответом. Например, это может быть
перенаправление на другой URL-адрес, если вышестоящий сервер ответил
кодом состояния 404. Нет Задает пользовательский фрагмент в контексте местоположения.
Переопределяет значение Нет Примечание Вложенный маршрут должен включать в себя ровно одно из следующих действий:
Апстрим определяет конечное место назначения для конфигурации
маршрутизации. Например: Примечание Протокол WebSocket поддерживается без какой-либо дополнительной настройки. Поле Описание Тип Обязательно Имя апстрима. Это должна быть допустимая метка DNS, как определено в RFC
1035. Например, допустимы значения Да Название сервиса.
Сервис должен принадлежать к тому же пространству имен, что и ресурс.
Если сервиса не существует, Angie предположит, что у него нет конечных
точек, и будет возвращать ответ Да Выбирает поды внутри сервиса, используя ключи меток и значения. По
умолчанию выбраны все поды сервиса. Примечание Ожидается, что указанные метки будут присутствовать
в подах при их создании. Если метки подов
изменяются, ANIC не увидит это изменение до тех пор, пока
не будет изменено количество подов. Нет Позволяет использовать IP-адрес кластера и порт сервиса вместо
использования IP-адреса и порта подов по умолчанию. Когда это поле
включено, поля, которые настраивают поведение Angie, относящееся к
нескольким серверам апстрима (например, Нет Порт службы. Если у сервиса не определен этот порт, Angie предположит,
что у него нет конечных точек, и будет возвращать ответ Да Метод балансировки нагрузки. Чтобы использовать
циклический метод, укажите Нет Время, в течение которого должно произойти указанное количество неудачных
попыток установить связь с сервером апстрима, чтобы он считался
недоступным. См. параметр Нет Количество неудачных попыток установить связь с сервером апстрима,
которые должны произойти в течение времени, заданного в
Нет Максимальное количество одновременных активных подключений к серверу
апстрима. См. параметр Примечание Если включены соединения keepalive, общее
количество активных и неактивных соединений keepalive
к серверу апстрима может превышать значение Нет Настраивает кэш для подключений к серверам апстрима. Значение Нет Тайм-аут для установления соединения с сервером апстрима. См. директиву
proxy_connect_timeout.
Значение по умолчанию указано в ключе ConfigMap Нет Тайм-аут для чтения ответа от сервера апстрима. См. директиву
proxy_read_timeout.
Значение по умолчанию указано в ключе ConfigMap Нет Тайм-аут для передачи запроса на сервер апстрима. См. директиву
proxy_send_timeout.
Значение по умолчанию указано в ключе ConfigMap Нет Указывает, в каких случаях запрос должен быть передан следующему серверу
апстрима. См. директиву proxy_next_upstream.
Значение по умолчанию - Нет Время, в течение которого запрос может быть передан следующему серверу
апстрима. См. директиву proxy_next_upstream_timeout.
Значение Нет Количество возможных попыток передачи запроса на следующий сервер
апстрима. См. директиву proxy_next_upstream_tries.
Значение Нет Задает максимальный размер текста клиентского запроса. См. директиву
client_max_body_size.
Значение по умолчанию задано в ключе ConfigMap Нет Конфигурация TLS для апстрима. Нет Включает буферизацию ответов от сервера апстрима. См. директиву
proxy_buffering.
Значение по умолчанию задано в ключе ConfigMap Нет Настраивает буферы, используемые для чтения ответа от сервера апстрима в
рамках одного соединения. Нет Устанавливает размер буфера, используемого для считывания первой части
ответа, полученного от сервера апстрима. См. директиву
proxy_buffer_size.
Значение по умолчанию задано в ключе ConfigMap Нет Тип апстрима. Поддерживаются значения Нет Настраивает буферы, используемые для чтения ответа от сервера апстрима в
рамках одного соединения. См. директиву
proxy_buffers
для получения дополнительной информации. Поле Описание Тип Обязательно Задает количество буферов. Значение по умолчанию задано в ключе ConfigMap Да Задает размер буфера. Если значение не указано, то по умолчанию будет задано 8K. См. также ключ ConfigMap Нет Поле Описание Тип Обязательно Включает HTTPS для запросов к серверам апстрима. Значение по умолчанию
равно Примечание По умолчанию Angie не будет проверять сертификат вышестоящего сервера.
Чтобы включить проверку, настройте политику EgressMTLS. Нет Поле sessionRoute настраивает сохранение маршрутов, что позволяет
передавать запросы от одного и того же клиента на один и тот же сервер
апстрима. Информация о назначенном сервере апстрима поддерживается в режиме
В приведенном ниже примере мы формируем директиву Angie
См. описание режима Параметры: Поле Описание Тип Обязательно Включает сохранение сеанса в режиме Нет Список переменных, подставляемых в директиву Нет Поле позволяет настроить активную проверку работоспособности (health probe)
для upstream. Вам необходимо задать
имя проверки Пример: Поле позволяет задать каталог, из которого будут раздаваться статические файлы.
Вы можете указать корневой каталог с помощью директивы
root
или другое расположение с помощью директивы
alias,
см. описания директив в документации Angie. Пример конфигурации: Поле Описание Тип Обязательно Способ определения пути к каталогу, из которого будут раздаваться статические файлы.
Возможные значения: Да Префикс URL-адресов запрашиваемых статических файлов, используемый для
location;
см. описание директивы в документации Angie. Да Каталог файловой системы, из которого будут обслуживаться запросы к указанному URL-адресу. Да Определяет HTTP-заголовок: Поле Описание Тип Обязательно Имя заголовка. Да Значение заголовка. Нет Определяет действие, которое необходимо выполнить для запроса. В приведенном ниже примере клиентские запросы передаются на апстрим
Поле Описание Тип Обязательно Передает запросы серверу апстрима. Апстрим с таким именем должен быть
определен в ресурсе. Нет Перенаправляет запросы на указанный URL-адрес. Нет Возвращает предварительно сконфигурированный ответ. Нет Передает запросы апстриму, добавляет возможность изменять запрос и ответ
(например, переписывать URI или изменять заголовки). Нет Примечание Действие должно включать в себя ровно одно из следующих значений: Определяет перенаправление, возвращаемое для запроса. В приведенном ниже примере клиентские запросы направляются на URL-адреса
Поле Описание Тип Обязательно URL-адрес, на который будет перенаправлен запрос. Поддерживаемые переменные Angie:
Да Код состояния перенаправления. Допустимые значения: Нет Определяет предварительно сконфигурированный ответ на запрос. В приведенном ниже примере Angie будет отвечать предварительно
настроенным ответом на каждый запрос: Поле Описание Тип Обязательно Код состояния ответа. Допустимые значения: Нет MIME-тип ответа. Значение по умолчанию - Нет Основная часть ответа. Поддерживает переменные Angie*. Переменные должны
быть заключены в фигурные скобки. Например: Да Примечание Поддерживаемые переменные Angie: Передает запросы апстриму с возможностью изменять запрос и ответ
(например, переписывать URI или изменять заголовки). В приведенном ниже примере URI запроса переписывается на Поле Описание Тип Обязательно Имя апстрима, куда будут проксироваться запросы. Апстрим с таким именем
должен быть определен в ресурсе. Да Изменения заголовков запросов. Нет Изменения в заголовках ответов. Нет Переписанный URI. Если путь маршрута является регулярным выражением, т.
е. начинается с ~, то rewritePath может включать группы захвата
Нет Поле requestHeaders изменяет заголовки запроса к проксируемому серверу
апстрима. Поле Описание Тип Обязательно Передает исходные заголовки запроса на проксируемый сервер апстрима.
Дополнительные сведения см. в описании директивы
proxy_pass_request_headers.
Значение по умолчанию - true. Нет Позволяет переопределять или добавлять поля для представления заголовков
запросов, передаваемых на проксируемые серверы апстрима. Дополнительные
сведения см. в описании директивы proxy_set_header. Нет Определяет HTTP-заголовок: Можно переопределить значение заголовка Поле Описание Тип Обязательно Имя заголовка. Да Значение заголовка. Поддерживает переменные Angie*. Переменные должны
быть заключены в фигурные скобки. Например: Нет Примечание Поддерживаемые переменные Angie: Поле responseHeaders изменяет заголовки ответа клиенту. Поле Описание Тип Обязательно Заголовки, которые не будут переданы в ответе клиенту с проксируемого
сервера апстрима. Дополнительные сведения см. в описании директивы
proxy_hide_header. Нет Позволяет передавать скрытые поля заголовка клиенту с проксируемого
сервера апстрима. Дополнительные сведения см. в описании директивы
proxy_pass_header. Нет Отключает обработку определенных заголовков** при передаче клиенту
ответа с проксируемого сервера апстрима. Дополнительные сведения см. в
описании директивы proxy_ignore_headers. Нет Добавляет заголовки к ответу для клиента. Нет Примечание Скрытые заголовки по умолчанию: Примечание Следующие поля могут быть проигнорированы: Определяет HTTP-заголовок с необязательным полем Поле Описание Тип Обязательно Имя заголовка. Да Значение заголовка. Поддерживает переменные Angie*. Переменные должны
быть заключены в фигурные скобки. Например: Нет Если установлено значение true, добавляет заголовок независимо от кода
состояния ответа**. Значение по умолчанию - false. Дополнительные
сведения см. в описании директивы add_header. Нет Примечание Поддерживаемые переменные Angie: Примечание Если значение Определяет вес действия в составе конфигурации разделений. В приведенном ниже примере Angie передает 80% запросов вышестоящему
Поле Описание Тип Обязательно Вес действия. Значение должно попадать в диапазон Да Действие, которое необходимо выполнить для запроса. :ref`:action` Да Определяет сопоставление между условиями и действием или разделениями. В приведенном ниже примере Angie направляет запросы с путем "/coffee" в
разные апстримы на основе значения cookie Если cookie не установлен или не равен ни В следующем примере Angie направляет запросы на основе значения встроенной
переменной $request_method, которая представляет HTTP-метод запроса: все запросы POST -> все прочие запросы -> Поле Описание Тип Обязательно Список условий. Должен включать по крайней мере одно условие. Да Действие, которое необходимо выполнить для запроса. Нет Конфигурация разбиений для разделения трафика. Должно быть указано не
менее двух разделений. Нет Примечание Сопоставление должно использовать ровно одно из следующих значений:
Определяет условие в сопоставлении. Поле Описание Тип Обязательно Имя заголовка. Должно состоять из буквенно-цифровых символов или Нет Имя cookie. Должно состоять из буквенно-цифровых символов или Нет Имя аргумента. Должно состоять из буквенно-цифровых символов или Нет Имя переменной Angie. Должно начинаться с Нет Значение, которому должно соответствовать условие. Как определить
значение, показано ниже в таблице. Да Примечание Условие должно включать ровно одно из следующих значений: Поддерживаемые переменные Angie: Значение поддерживает два вида сопоставления: Сравнение строк без учета регистра. Например: Сопоставление с регулярным выражением. Обратите внимание, что Angie
поддерживает регулярные выражения, совместимые с языком
программирования Perl (PCRE). Например: Примечание Значение не должно содержать неэкранированных двойных кавычек ( Определяет настраиваемый ответ для маршрута на случай, когда сервер апстрима
отвечает кодом состояния ошибки (или его генерирует Angie). В качестве ответа
может быть задано перенаправление или сохраненный ответ. Дополнительные
сведения см. в описании директивы error_page. Поле Описание Тип Обязательно Список кодов состояния ошибки. Да Действие перенаправления для заданных кодов состояния. Нет Сохраненное ответное действие для заданных кодов состояния. Нет Примечание Страница с ошибкой должна содержать ровно одно из следующих значений:
Определяет перенаправление для errorPage. В приведенном ниже примере Angie отвечает перенаправлением, когда ответ
от сервера апстрима имеет код состояния 404. Поле Описание Тип Обязательно Код состояния перенаправления. Допустимые значения: Нет URL-адрес, на который будет перенаправлен запрос.
Поддерживаемые переменные Angie: Да Определяет сохраненный ответ для errorPage. В приведенном ниже примере Angie выдает сохраненный ответ, когда ответ
от сервера апстрима имеет код состояния 401 или 403. Поле Описание Тип Обязательно Код состояния ответа. По умолчанию используется код состояния исходного
ответа. Нет MIME-тип ответа. Значение по умолчанию - Нет Тело ответа. Поддерживаемая переменная Angie: Да Настраиваемые заголовки ответа. Нет Определяет HTTP-заголовок для сохраненного ответа у errorPage: Поле Описание Тип Обязательно Имя заголовка. Да Значение заголовка. Поддерживаемая переменная
Angie: Нет Для работы с ресурсами VirtualServer и VirtualServerRoute можно
использовать обычные команды Например, следующая команда создает ресурс VirtualServer, определенный в
Вы можете получить ресурс, выполнив: В Работать с ресурсами VirtualServerRoute можно аналогично. В командах
kubectl используйте Фрагменты позволяют вставлять элементы конфигурации Angie в различные
контексты конфигурации Angie. В приведенном ниже примере мы используем
фрагменты кода для настройки нескольких функций Angie на VirtualServer: Фрагменты предназначены для продвинутых пользователей Angie, которым требуется
больше контроля над генерируемой конфигурацией Angie. Однако из-за недостатков, описанных ниже, фрагменты по умолчанию отключены.
Чтобы использовать фрагменты, задайте аргумент командной строки
Недостатки использования фрагментов: Сложность. Чтобы использовать фрагменты, требуется: Понимать примитивы конфигурации Angie и реализовать правильную
конфигурацию Angie. Понимать, как ANIC генерирует конфигурацию Angie, чтобы фрагмент не
мешал другим функциям конфигурации. Сниженная надежность. Неправильный фрагмент делает конфигурацию
Angie недействительной, что приведет к ошибке при перезагрузке. Это
помешает применить какие-либо обновления конфигурации, включая
обновления для других ресурсов VirtualServer и VirtualServerRoute,
пока фрагмент не будет исправлен. Последствия для безопасности. Фрагменты предоставляют доступ к
примитивам конфигурации Angie, и эти примитивы не проверяются самим
ANIC. Например, через фрагмент можно настроить в Angie
произвольную отправку сертификатов TLS и ключей, используемых для
терминации TLS у ресурсов Ingress и VirtualServer. Чтобы помочь отлавливать ошибки при использовании фрагментов, ANIC
сообщает об ошибках перезагрузки конфигурации в журналах, а
также в полях событий и состояния ресурсов VirtualServer и
VirtualServerRoute. Примечание Пока конфигурация Angie содержит недопустимый фрагмент,
Angie будет продолжать работать с последней допустимой конфигурацией. Для ресурсов VirtualServer и VirtualServerRoute доступны два типа
валидации: Структурная валидация с помощью Всесторонняя валидация с помощью ANIC. Пользовательские определения ресурсов для VirtualServer и VirtualServerRoute
включают структурную схему OpenAPI, которая описывает тип каждого поля этих
ресурсов. Если вы попытаетесь создать (или обновить) ресурс с нарушением структурной
схемы (например, используете строковое значение для поля порта апстрима),
Пример проверки Пример проверки сервера Kubernetes API: Если ресурс не отклонен (т. е. не нарушает структурную схему), ANIC
проверит его дополнительно. ANIC проверяет поля ресурсов VirtualServer и VirtualServerRoute.
Если ресурс недействителен, ANIC отклонит его: ресурс продолжит
существовать в кластере, но ANIC будет его игнорировать. Вы можете проверить, успешно ли ANIC применил конфигурацию для
VirtualServer. Для нашего примера VirtualServer Обратите внимание, что раздел "События" (Events) включает событие Normal с
причиной AddedOrUpdated, которое информирует нас о том, что конфигурация была
успешно применена. Если вы создадите недопустимый ресурс, ANIC отклонит его и выдаст
событие Rejected. Например, если вы создадите VirtualServer Обратите внимание, что раздел "События" (Events) включает предупреждающее
событие с указанием причины отклонения. Кроме того, эта информация также доступна в поле ANIC проверяет ресурсы VirtualServerRoute аналогичным образом. Примечание Если вы внесете ошибку в существующий ресурс, ANIC отклонит
его и удалит соответствующую конфигурацию из Angie. Вы можете дополнительно настроить конфигурацию Angie для ресурсов VirtualServer
и VirtualServerRoutes, используя Спецификация VirtualServer#
example.com
. Ниже приведен пример такой
конфигурации:apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
name: cafe
spec:
host: cafe.example.com
tls:
secret: cafe-secret
staticLocations:
- type: root
urlPath: /americano
dirPath: /latte
gunzip: on
upstreams:
- name: tea
service: tea-svc
port: 80
- name: coffee
service: coffee-svc
port: 80
routes:
authRequest: /auth/p
authRequestSets:
- key: foo
value: bar
matches:
- conditions:
- variable: $request_method
value: POST
action:
pass: tea-post
action:
pass: tea-post
- path: /coffee
action:
pass: coffee
- path: ~ ^/decaf/.\*\\.jpg$
action:
pass: coffee
- path: = /green/tea
action:
pass: tea
activeHealthProbes:
- name: activename1
upstream: tea
uri: uri
port: 80
interval: 3s
isEssential: true
isPersistent: true
maxBody: 10m
fails: 4
passes: 5
mode: onfail
maps:
- variable: $jwt_claim_iat
source: $oidc_client
parameters:
- value: 'myclient'
result: '80'
- variable: $jwt_claim_iss
source: $oidc_client
parameters:
- value: 'myclient'
result: 'PROVIDER_URL'
- variable: $jwt_claim_sub
source: $oidc_client
parameters:
- value: 'myclient'
result: 'myclient'
- variable: $jwt_claim_aud
source: $oidc_client
parameters:
- value: 'myclient'
result: 'myclient'
authRequestLocations:
- path: /auth/path
proxyPass:
upstreamName: "tea"
proxyPassHeaders:
- key: Content-Length
value: "100"
host
my-app
или hello.example.com
.
При использовании домена с подстановочным знаком, например
*.example.com
, домен должен быть заключен в двойные кавычки.
Значение host
должно быть уникальным среди всех ресурсов Ingress и
VirtualServer.string
tls
staticLocations
gunzip
gunzip
не установлено, то по
умолчанию оно равно off
.boolean
ExternalDNS
dos
string
policies
upstreams
routes
activeHealthProbes
maps
ingressClassName
string
internalRoute
boolean
http-snippets
string
server-snippets
server-snippets
.string
authRequestLocations
authRequest
.VirtualServer.TLS#
secret: cafe-secret
redirect:
enable: true
ssl_session_timeout: 1h
ssl_session_cache: shared:SSL:10m
ssl_session_tickets: on
ssl_stapling: on
ssl_stapling_verify: on
secret
kubernetes.io/tls
и содержать ключи с именами tls.crt
и
tls.key
, содержащие сертификат и закрытый ключ, как описано здесь.
Если секрет не существует или недействителен, Angie прервет любую
попытку установить TLS-соединение с хостом VirtualServer. Если секрет не
указан, но настроен секрет TLS с подстановочным знаком,
Angie будет использовать секрет со знаком для терминации TLS.string
redirect
cert-manager
ssl_session_timeout
10m
.string
ssl_session_cache
shared:SSL:10m
.string
sssl_session_tickets
off
.string
ssl_stapling
on
.string
ssl_stapling_verify
on
.string
VirtualServer.TLS.Redirect#
enable: true
code: 301
basedOn: scheme
enable
false
.boolean
код
301
, 302
,
307
, 308
. Значение по умолчанию - 301
.int
basedOn
scheme
(схема
запроса) или x-forwarded-proto
(заголовок X-Forwarded-Proto
запроса). Значение по умолчанию - scheme
.string
VirtualServer.TLS.CertManager#
cert-manager:
cluster-issuer: "my-issuer-name"
issuer
string
cluster-issuer
string
issuer-kind
string
issuer-group
string
common-name
string
duration
string
renew-before
string
usages
соглашение
о ключе, цифровая подпись, серверная аутентификация
. Исчерпывающий
список поддерживаемых способов использования ключей можно найти в
документации API cert-manager.string
VirtualServer.ExternalDNS#
enable: true
enable
false
.string
labels
map[string]string
providerSpecific
recordTTL
int64
recordType
string
VirtualServer.ExternalDNS.ProviderSpecific#
- name: my-name
value: my-value
- name: my-name2
value: my-value2
name
string
value
string
VirtualServer.Policy#
name: access-control
name
500
.string
namespace
string
VirtualServer.Route#
path: /tea
action:
pass: tea
path
/
, /path
), точное совпадение (=/exact/match
),
регулярное выражение без учета регистра (~*^/Bar.*.jpg
) или
регулярное выражение с учетом регистра (~^/foo.*.jpg
). В случае
префикса (должен начинаться с /
) или точного совпадения (должно
начинаться с =
) путь не должен содержать никаких пробельных
символов, {
, }
или ;
. В случае регулярных выражений все
двойные кавычки "
должны быть экранированы, при этом совпадение не
может заканчиваться неэкранированной обратной косой чертой \. Путь
должен быть уникальным среди путей всех маршрутов VirtualServer.
Дополнительные сведения см. в описании директивы
location.string
policies
спецификации
VirtualServer. Более подробную
информацию смотрите в Применение политик.action
dos
string
splits
matches
action
или splits
по умолчанию.
Несопоставленные запросы будут обрабатываться action
или splits
по умолчанию.route
tea-namespace/tea
.string
errorPages
location-snippets
location-snippets
.string
authRequest
authRequestSets
action
, splits
или route
.Maps#
$jwt_claim_iat
, $jwt_claim_iss
,
$jwt_claim_sub
и $jwt_claim_aud
для валидации токенов в процессе аутентификации OIDC.- variable: $jwt_claim_iat
source: $oidc_client
parameters:
- value: 'myclient'
result: '80'
- variable: $jwt_claim_iss
source: $oidc_client
parameters:
- value: 'myclient'
result: 'PROVIDER_URL'
- variable: $jwt_claim_sub
source: $oidc_client
parameters:
- value: 'myclient'
result: 'myclient'
- variable: $jwt_claim_aud
source: $oidc_client
parameters:
- value: 'myclient'
result: 'myclient'
map
в зависимости от входного значения (default
, volatile
, include
, hostnames
):maps:
- variable: $result_var
source: $host
parameters:
- value: 'default'
result: 'default_value'
- value: 'volatile'
result: ''
- value: 'include'
result: '/dev/stdout'
- value: 'example.com'
result: '1'
- value: '*.example.com'
result: '1'
$jwt_claim_iat
iat
(issued at, время выпуска токена) для клиента.string
$jwt_claim_iss
iss
(issuer, издатель токена) сопоставляется с URL-адресом PROVIDER_URL
. Этот параметр указывает на сервис, выпустивший токен.string
$jwt_claim_sub
sub
(subject, субъект токена). Идентифицирует пользователя или субъект, для которого был выдан токен.string
$jwt_claim_aud
aud
(audience, аудитория). Идентифицирует клиент, для которого был предназначен токен.string
authRequestLocations#
authRequest
.
См. также директиву auth_request в документации Angie.authRequestLocations:
- path: /auth/path
proxyPass:
upstreamName: "tea"
proxyPassHeaders:
- key: Content-Length
value: "100"
path
string
proxyPass
string
proxyPassHeaders
string
Спецификация VirtualServerRoute#
cafe
из пространства имен
cafe-ns
определяет маршрут с путем /coffee
, который далее определяется
через VirtualServerRoute coffee
из пространства имен coffee-ns
.apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
name: cafe
namespace: cafe-ns
spec:
host: cafe.example.com
upstreams:
- name: tea
service: tea-svc
port: 80
routes:
- path: /tea
action:
pass: tea
- path: /coffee
route: coffee-ns/coffee
apiVersion: k8s.angie.software/v1
kind: VirtualServerRoute
metadata:
name: coffee
namespace: coffee-ns
spec:
host: cafe.example.com
upstreams:
- name: latte
service: latte-svc
port: 80
- name: espresso
service: espresso-svc
port: 80
subroutes:
- path: /coffee/latte
action:
pass: latte
- path: /coffee/espresso
action:
pass: espresso
path
,
начинающийся с того же префикса (здесь "/coffee"), что и в маршруте
VirtualServer. Кроме того, host
в VirtualServerRoute должен совпадать с
host
у VirtualServer.host
my-app
или hello.example.com
.
При использовании домена с подстановочным знаком, например
*.example.com
, домен должен быть заключен в двойные кавычки.
Значение должно совпадать с host
у VirtualServer, который ссылается
на этот ресурс.string
upstreams
subroutes
ingressClassName
ingressClassName
у
VirtualServer, который ссылается на этот ресурс.string
VirtualServerRoute.Subroute#
path: /coffee
action:
pass: coffee
path
/
, /path
), точное совпадение
(=/exact/match
), регулярное выражение без учета регистра
(~*^/Bar.*.jpg
) или регулярное выражение с учетом регистра
(~^/foo.*.jpg
). В случае префикса путь должен начинаться с того же
пути, что и путь маршрута VirtualServer, который ссылается на этот
ресурс. В случае точного совпадения или регулярного выражения путь
должен совпадать с путем маршрута VirtualServer, который ссылается на
этот ресурс. В случае префикса или точного совпадения путь не должен
содержать никаких пробельных символов, {
, }
или ;
. В
случае регулярных выражений все двойные кавычки "
должны быть
экранированы, при этом совпадение не может заканчиваться
неэкранированной обратной косой чертой . Путь должен быть уникальным
среди путей всех вложенных маршрутов VirtualServerRoute.string
policies
спецификации
VirtualServer. Более подробную
информацию смотрите в разделе Применение политик.action
dos
string
splits
matches
action
или splits
по умолчанию.
Несопоставленные запросы будут обрабатываться action
или splits
по умолчанию.errorPages
location-snippets
location-snippets
VirtualServer (если
задано) или ключ ConfigMap location-snippets
.string
action
или splits
.Общие части VirtualServer и VirtualServerRoute#
Upstream#
name: tea
service: tea-svc
subselector:
version: canary
port: 80
lb-method: round_robin
fail-timeout: 10s
max-fails: 1
max-conns: 32
keepalive: 32
connect-timeout: 30s
read-timeout: 30s
send-timeout: 30s
next-upstream: "error timeout non_idempotent"
next-upstream-timeout: 5s
next-upstream-tries: 10
client-max-body-size: 2m
tls:
enable: true
name
hello
и upstream-123
. Имя
должно быть уникальным среди всех апстримов ресурса.string
service
502
для запросов к этому апстриму.string
subselector
map[string]string
use-cluster-ip
lb-method
и
next-upstream
), не будут иметь никакого эффекта, поскольку ANIC
настроит Angie только с одним сервером апстрима, который
будет соответствовать IP-адресу кластера сервиса.boolean
port
502
для
запросов к этому апстриму. Значение должно находиться в диапазоне
1..65535
.uint16
lb-method
round_robin
. Значение по умолчанию указано
в ключе lb-method
ConfigMap.string
fail-timeout
fail_timeout
директивы server.
Значение по умолчанию задано в ключе ConfigMap fail-timeout
.string
max-fails
fail-timeout
, чтобы считать сервер недоступным. См. параметр
max_fails
директивы сервера. Значение по умолчанию задано в ключе ConfigMap
max-fails
.int
max-conns
max_conns
директивы server. По умолчанию ограничений нет.max_conns
.int
keepalive
0
отключает кэш. См. директиву keepalive. Значение
по умолчанию задано в ключе ConfigMap keepalive
.int
connect-timeout
proxy-connect-timeout
.string
read-timeout
proxy-read-timeout
.string
send-timeout
proxy-send-timeout
.string
next-upstream
тайм-аут ошибки
.string
next-upstream-timeout
0
отключает ограничение по времени. Значение по умолчанию
равно 0
.string
next-upstream-tries
0
отключает это ограничение. Значение по умолчанию равно
0
.int
client-max-body-size
client-max-body-size
.string
tls
buffering
proxy-buffering
.boolean
buffers
buffer-size
proxy-buffer-size
.string
type
http
и grpc
. По умолчанию
используется http
. Для gRPC необходимо включить HTTP/2 в
ConfigMap
и настроить терминацию TLS на VirtualServer.string
Upstream.Buffers#
number: 4
size: 8K
number
proxy-buffers
.int
size
proxy-buffers
.string
Upstream.TLS#
enable
False
, что означает, что будет использоваться HTTP.boolean
Upstream.SessionRoute#
route <sticky>
в Angie.sticky route $cookie_route $arg_route;
:sessionRoute:
enable: true
variables:
\- "\$cookie_route"
\- "\$arg_route"
route
директивы sticky для получения
дополнительной информации.enable
route
для сервера
апстрима. Значение по умолчанию равно false
.boolean
variables
sticky route
в порядке следования.string[ ]
ActiveHealthProbes#
name
и upstream
, к которому она относится, а также другие параметры.
Подробное описание параметров для активной проверки работоспособности см. в документации Angie,
директива upstream_probe.activeHealthProbes:
- name: activename1
upstream: tea-post
uri: uri
port: 80
interval: 3s
isEssential: true
isPersistent: true
maxBody: 10m
fails: 4
passes: 5
mode: onfail
staticLocations#
staticLocations:
- type: root
urlPath: /static
dirPath: /var/www/html
type
root
, alias
.string
urlPath
string
dirPath
string
Header#
name: Host
value: example.com
name
string
value
string
Action#
coffee
:path: /coffee
action:
pass: coffee
pass
string
redirect
return
proxy
pass
,
redirect
, return
или proxy
.Action.Redirect#
http://myhost.ru
:redirect:
url: http://myhost.ru
code: 301
url
$scheme
, $http_x_forwarded_proto
, $request_uri
, $host
.
Переменные должны быть заключены в фигурные скобки. Например:
$host$request_uri
.string
код
301
, 302
, 307
, 308
.
Значение по умолчанию - 301
.int
Action.Return#
return:
code: 200
type: text/plain
body: "Hello World\n"
код
2XX
, 4XX
или 5XX
.
Значение по умолчанию равно 200
.int
тип
text/plain
.string
body
Запрос равен $request_urin
.string
$request_uri
, $request_method
,
$request_body
, $scheme
, $http_
, $args
, $arg_
,
$cookie_
, $host
, $request_time
, $request_length
,
$angie_version
, $pid
, $connection
, $remote_addr
,
$remote_port
, $time_iso8601
, $time_local
, $server_addr
,
$server_port
, $server_name
, $server_protocol
,
$connections_active
, $connections_reading
, $connections_writing
и $connections_waiting
.Action.Proxy#
/
, а
заголовки запроса и ответа изменяются:proxy:
upstream: coffee
requestHeaders:
pass: true
set:
- name: My-Header
value: Value
- name: Client-Cert
value: ${ssl_client_escaped_cert}
responseHeaders:
add:
- name: My-Header
value: Value
- name: IC-Angie-Version
value: ${angie_version}
always: true
hide:
- x-internal-version
ignore:
- Expires
- Set-Cookie
pass:
- Server
rewritePath: /
upstream
string
requestHeaders
responseHeaders
rewritePath
$1-9
. Например, $1 - первая группа, и так далее.string
Action.Proxy.RequestHeaders#
pass
bool
set
Action.Proxy.RequestHeaders.Set.Header#
name: My-Header
value: My-Value
Host
по умолчанию, которое ANIC
устанавливает равным $host:name: Host
value: example.com
name
string
value
$scheme
.string
$request_uri
, $request_method
,
$request_body
, $scheme
, $http_
, $args
, $arg_
,
$cookie_
, $host
, $request_time
, $request_length
,
$angie_version
, $pid
, $connection
, $remote_addr
,
$remote_port
, $time_iso8601
, $time_local
, $server_addr
,
$server_port
, $server_name
, $server_protocol
,
$connections_active
, $connections_reading
, $connections_writing
,
$connections_waiting
, $ssl_cipher
, $ssl_ciphers
,
$ssl_client_cert
, $ssl_client_escaped_cert
,
$ssl_client_fingerprint
, $ssl_client_i_dn
,
$ssl_client_i_dn_legacy
, $ssl_client_raw_cert
, $ssl_client_s_dn
,
$ssl_client_s_dn_legacy
, $ssl_client_serial
, $ssl_client_v_end
,
$ssl_client_v_remain
, $ssl_client_v_start
, $ssl_client_verify
,
$ssl_curves
, $ssl_early_data
, $ssl_protocol
,
$ssl_server_name
, $ssl_session_id
, $ssl_session_reused
.Action.Proxy.ResponseHeaders#
hide
string[ ]
pass
string[ ]
ignore
string[ ]
add
Date
, Server
, X-Pad
и
X-Accel-...
.X-Accel-Redirect
,
X-Accel-Expires
, X-Accel-Limit-Rate
, X-Accel-Buffering
,
X-Accel-Charset
, Expires
, Cache-Control
, Set-Cookie
и
Vary
.AddHeader#
always
:name: My-Header
value: My-Value
always: true
name
string
value
$scheme
.string
always
bool
$request_uri
, $request_method
,
$request_body
, $scheme
, $http_
, $args
, $arg_
,
$cookie_
, $host
, $request_time
, $request_length
,
$angie_version
, $pid
, $connection
, $remote_addr
,
$remote_port
, $time_iso8601
, $time_local
, $server_addr
,
$server_port
, $server_name
, $server_protocol
,
$connections_active
, $connections_reading
, $connections_writing
,
$connections_waiting
, $ssl_cipher
, $ssl_ciphers
,
$ssl_client_cert
, $ssl_client_escaped_cert
,
$ssl_client_fingerprint
, $ssl_client_i_dn
,
$ssl_client_i_dn_legacy
, $ssl_client_raw_cert
, $ssl_client_s_dn
,
$ssl_client_s_dn_legacy
, $ssl_client_serial
, $ssl_client_v_end
,
$ssl_client_v_remain
, $ssl_client_v_start
, $ssl_client_verify
,
$ssl_curves
, $ssl_early_data
, $ssl_protocol
,
$ssl_server_name
, $ssl_session_id
, $ssl_session_reused
.always
- false, заголовок ответа добавляется только в том
случае, если код состояния ответа - это 200
, 201
, 204
, 206
,
301
, 302
, 303
, 304
, 307
или 308
.Split#
coffee-v1
, а оставшиеся 20% - coffee-v2
:splits:
- weight: 80
action:
pass: coffee-v1
- weight: 20
action:
pass: coffee-v2
weight
1..99
. Сумма весов
всех разделений должна быть равна 100
.int
action
Match#
user
:user=john
-> coffee-future
user=bob
-> coffee-deprecated
john
, ни bob
, Angie
перенаправляет запрос в coffee-stable
path: /coffee
matches:
- conditions:
- cookie: user
value: john
action:
pass: coffee-future
- conditions:
- cookie: user
value: bob
action:
pass: coffee-deprecated
action:
pass: coffee-stable
coffee-post
coffee
path: /coffee
matches:
- conditions:
- variable: $request\_method
value: POST
action:
pass: coffee-post
action:
pass: coffee
conditions
action
splits
action
или splits
.Condition#
header
-
.string
cookie
_
.string
argument
_
.string
variable
$
. См. список
поддерживаемых переменных после таблицы.string
value
string
header
,
cookie
, argument
или variable
.$args
, $http2
, $https
,
$remote_addr
, $remote_port
, $query_string
, $request
,
$request_body
, $request_uri
, $request_method
, $scheme
.john
- сопоставление без учета регистра, которое выполняется
успешно для таких строк, как john
, John
, JOHN
.!john
- отрицание соответствия без учета регистра для john,
которое выполняется успешно для таких строк, как bob
,
anything
, "
(пустая строка).~^yes
- регулярное выражение с учетом регистра, которое
соответствует любой строке, начинающейся с yes
. Например:
yes
, yes123
.!~^yes
- отрицание предыдущего регулярного выражения, которое
успешно выполняется для строк типа YES
, Yes123
, noyes
.
(Механизм отрицания не является частью синтаксиса PCRE).~*no$
-- регулярное выражение без учета регистра, которое
соответствует любой строке, заканчивающейся на no
. Например:
no
, 123no
, 123NO
."
) и не
должно заканчиваться неэкранированной обратной косой чертой (\
).
Например, следующие значения недопустимы: some"value
, somevalue\
.ErrorPage#
path: /coffee
errorPages:
- codes: [502, 503]
redirect:
code: 301
url: https://angie.software
- codes: [404]
return:
code: 200
body: "Original resource not found, but success!"
codes
int[ ]
redirect
return
return
или redirect
.ErrorPage.Redirect#
codes: [404]
redirect:
code: 301
url: ${scheme}://cafe.example.com/error.html
код
301
,
302
, 307
, 308
. Значение по умолчанию - 301
.int
url
$scheme
и $http_x_forwarded_proto
.
Переменные должны быть заключены в фигурные скобки. Например: $scheme
.string
ErrorPage.Return#
codes: [401, 403]
return:
code: 200
type: application/json
body: |
{\"msg\": \"You don't have permission to do this\"}
headers:
- name: x-debug-original-statuses
value: ${upstream\_status}
code
int
type
text/html
.string
body
$upstream_status
.
Переменные должны быть заключены в фигурные скобки. Например:
$upstream_status
.string
headers
ErrorPage.Return.Header#
name: x-debug-original-statuses
value: ${upstream_status}
name
string
value
$upstream_status
. Переменные должны быть
заключены в фигурные скобки. Например: $upstream_status
.string
Использование VirtualServer и VirtualServerRoute#
kubectl
, аналогично ресурсам Ingress.cafe-virtual-server.yaml
с именем cafe
:kubectl apply -f cafe-virtual-server.yaml
virtualserver.k8s.angie.software "cafe" created
kubectl get virtualserver cafe
NAME STATE HOST IP PORTS AGE
cafe Valid cafe.example.com 12.13.23.123 [80,443] 3m
kubectl get
и подобных командах также можно использовать короткое
имя vs
вместо virtualserver
.virtualserverroute
или короткое имя vsr
.Использование фрагментов#
apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
name: cafe
namespace: cafe
spec:
http-snippets: |
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
proxy_cache_path /tmp keys_zone=one:10m;
host: cafe.example.com
tls:
secret: cafe-secret
server-snippets: |
limit_req zone=mylimit burst=20;
upstreams:
- name: tea
service: tea-svc
port: 80
- name: coffee
service: coffee-svc
port: 80
routes:
- path: /tea
location-snippets: |
proxy\_cache one;
proxy\_cache\_valid 200 10m;
action:
pass: tea
- path: /coffee
action:
pass: coffee
enable-snippets
.Валидация#
kubectl
и сервера Kubernetes API.Структурная валидация#
kubectl
и сервер Kubernetes API отклонят такой ресурс:kubectl
:kubectl apply -f cafe-virtual-server.yaml
error: error validating "cafe-virtual-server.yaml": error validating
data: ValidationError(VirtualServer.spec.upstreams[0].port): invalid
type for software.angie.k8s.v1.VirtualServer.spec.upstreams.port: got
"string", expected "integer"; if you choose to ignore these errors,
turn validation off with --validate=false
kubectl apply -f cafe-virtual-server.yaml --validate=false
The VirtualServer "cafe" is invalid: []: Invalid value:
map[string]interface {}{ ... }: validation failure list:
spec.upstreams.port in body must be of type integer: "string"
Всесторонняя валидация#
cafe
мы можем запустить:kubectl describe vs cafe
. . .
Events:
Type Reason Age From Message
-----
Normal AddedOrUpdated 16s angie-ingress-controller Configuration for default/cafe was added or updated
cafe
с двумя
серверами апстрима с одинаковым именем tea
, вы получите:kubectl describe vs cafe
. . .
Events:
Type Reason Age From Message
-----
Warning Rejected 12s angie-ingress-controller VirtualServer default/cafe is invalid and was rejected: spec.upstreams[1].name: Duplicate value: "tea"
status
ресурса
VirtualServer. Обратите внимание на раздел Status
VirtualServer:kubectl describe vs cafe
. . .
Status:
External Endpoints:
Ip: 12.13.23.123
Ports: [80,443]
Message: VirtualServer default/cafe is invalid and was rejected: spec.upstreams[1].name: Duplicate value: "tea"
Reason: Rejected
State: Invalid
Настройка с помощью ConfigMap#
ConfigMap
. Поддерживается большинство
ключей ConfigMap, за следующими исключениями:proxy-hide-headers
proxy-pass-headers
hsts
hsts-max-age
hsts-include-subdomains
hsts-behind-proxy
redirect-to-https
ssl-redirect