Проблема
Нужно посмотреть - какие бекенды попадают в конфиг 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
то есть указываем неймспейс где развернут ингресс-контроллер и актуальное имя деплоймента.
Discussion