Невозможно направить трафик c к выпуску канареек с использованием правила входа nginx с аннотацией канареек и весом 100% - PullRequest
0 голосов
/ 12 января 2020
  • Мое приложение работает в пространстве имен A с версией X, я могу получить доступ к конечной точке приложения через nginx входной контроллер, работающий в том же пространстве имен A.
  • Я запускаю тот же стек приложений с версией Y в пространстве имен B и создайте правила входа, указывающие на тот же класс kubernetes.io/ingress.class, что и у контроллера, работающего в пространстве имен A.
  • Кроме того, я включаю аннотации канареек с весом 50%. Когда я пытаюсь получить доступ к конечной точке приложения через вход, запрос распределяется по версии X, работающей в пространстве имен A, и версии Y, работающей в пространстве имен B, согласно указанному весу
  • Теперь я изменяю вес канареек на 100 и вижу все traffi c собирается перейти к версии Y в пространстве имен B.
  • Все вышеизложенное соответствует моим ожиданиям
  • Однако теперь я удаляю модули приложения из пространства имен A, но продолжаю следовать следующим образом: intact

    • a) Служба работает в пространстве имен A (для которого определено правило входа)
    • b) Правило входа в пространстве имен A Nginx Контроллер работает в пространстве имен A
    • c) В пространстве имен B все модули работают с соответствующим сервисом и правилами входа со 100%
  • Когда я сейчас пытаюсь получить доступ к конечным точкам приложения, он просто выходит из строя. Я понимаю, что в пространстве имен A нет активных конечных точек (поскольку стручки были удалены), но sv c все еще доступен в пространстве имен A, а также для правил входа в B разрешена канарейка с весом 100%, я ожидал, что traffi c будет быть перенаправлены на pods в пространстве имен B, но этого не происходит.

Я сравнил конфигурацию контроллера nginx до и после удаления pods в пространстве имен A (с неповрежденным правилом 100% канарского доступа ) с использованием

kubectl exec <nginx-controller-pod-name> -n <namespace> -- curl localhost:10246/configuration/backends

kubectl exec <nginx-controller-pod-name> -n <namespace> -- cat nginx.conf

Нет разницы в o / p до и после удаления модулей в пространстве имен A

ПРИМЕЧАНИЕ:

  • Nginx входное изображение: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.2
  • Версия Kubernetes: 1.12.7

Это предполагаемое поведение? Я не могу найти причину этого поведения.

1 Ответ

1 голос
/ 12 января 2020

Вам необходимо выполнить следующие действия, прежде чем удалять модули в пространстве имен A.

  1. Удалить вход канарейки
  2. Указать основной вход приложения для отправки traffi c в новую версию .

Как описано здесь , когда вы удаляете модули, конечные точки меняются, а конечные точки не воссоздают новый файл nginx .conf и не перезагружают его. Скорее новый список конечных точек, отправленных обработчику Lua, работающему внутри Nginx, с использованием HTTP-запроса POST. Вы можете проверить журналы обработчика Lua, чтобы убедиться в этом. В относительно больших кластерах с часто внедряемыми приложениями эта функция экономит значительное количество перезагрузок Nginx, которые в противном случае могут повлиять на задержку ответа, качество балансировки нагрузки (после каждой перезагрузки Nginx сбрасывает состояние балансировки нагрузки) и т. д. Когда вы создаете новый входной файл, он изменит nginx .conf и перезагрузит его. Это должно объяснить, почему нет изменений в nginx .conf.

...