Проблема

Нужно посмотреть - какие бекенды попадают в конфиг Nginx Ingress Controller.
Если мы просто выведем текущий конфиг контроллера с помощью

nginx -T

То увидим, что список бекендов апстрима генерируется динамически - https://kubernetes.github.io/ingress-nginx/how-it-works/
Однако, есть способ посмотреть что же там генерируется - это плагин ingress-nginx для kubectl.
Для этого:

  • Устанавливаем krew, если он еще не установлен. Для этого в bash запускаем такое:
    (
      set -x; cd "$(mktemp -d)" &&
      OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
      ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
      KREW="krew-${OS}_${ARCH}" &&
      curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
      tar zxvf "${KREW}.tar.gz" &&
      ./"${KREW}" install krew
    )

    Затем в ~/.bashrc дописываем

    export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"

    выполняем

    source ~/.bashrc

    и проверяем, что плагин krew установился

    kubectl krew

  • Устанавливаем плагин ingress-nginx

    kubectl krew install ingress-nginx

  • И теперь - смотрим что там с бекендами:

    kubectl ingress-nginx backends

  • Если вылезает сообщение типа

    no pods for deployment ingress-nginx-controller found in namespace 

    - это значит, что плагин пытается найти деплоймент, которым развернут ingress-контроллер, но не может найти этот деплоймент, потому что он называется как-то иначе. Тогда делаем так:

    kubectl ingress-nginx backends -n ingress --deployment nginx-ingress-nginx-controller

    то есть указываем неймспейс где развернут ингресс-контроллер и актуальное имя деплоймента.

Enter your comment. Wiki syntax is allowed:
 
  • devops/nginx-ingress-backends-debug.txt
  • Last modified: 2022/04/21 12:25
  • by admin