Я новичок в Kubernetes, и я уже несколько дней играю с ним, чтобы почувствовать его. Пытаясь настроить контроллер Nginx Ingress на платформе google-cloud после это руководство, я смог настроить все, как там написано — никаких проблем, я увидел вывод hello-app.
Однако, когда я попытался воспроизвести это немного по-другому, я столкнулся со странным поведением, которое не могу решить. Вместо использования изображения --image=gcr.io/google-samples/hello-app:1.0 (как это сделано в руководстве) я хотел развернуть стандартный контейнер nginx с настраиваемой индексной страницей, чтобы проверить, правильно ли я понял материал. Насколько я могу судить, все шаги должны быть одинаковыми, за исключением открытого порта: в то время как hello-app предоставляет порт 8080, стандартный порт для nginx контейнера — 80. Итак, наивно я думал, что разоблачение (т.е. создание службы) с помощью этой измененной команды должно помочь:
kubectl expose deployment hello-app --port=8080 --target-port=80
где вместо target-port=8080 как для приветственного приложения я поставил target-port=80. Насколько я могу судить, все остальные вещи должны остаться прежними, верно? В любом случае, это не работает, и когда я пытаюсь получить доступ к странице, я получаю «404 - Not Found», хотя контейнер определенно работает и обслуживает индексную страницу (я проверил с помощью переадресации портов из облака Google, которое, по-видимому, напрямую делает страницу доступной для разработчиков). На самом деле, я также пробовал несколько других комбинаций портов (хотя я считаю, что приведенная выше должна быть правильной) безрезультатно. Может ли кто-нибудь объяснить мне, почему маршрутизация здесь не работает?

Если вы заметили руководство внутри конфигурации входа path: "/hello"
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-resource
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: "34.122.88.204.nip.io"
http:
paths:
- pathType: Prefix
path: "/hello"
backend:
service:
name: hello-app
port:
number: 8080
возможно, вы обновили номер порт и конфигурацию имени услуга, однако, если путь /hello означает, что ваш запрос направляется в контейнер Nginx, но вы не можете зарегистрировать страницу привет.html, поэтому он дает вам 404.
You hit endpoint IP/hello (Goes to Nginx ingress controller)--> checked for path
/helloand forwarded request to service --> hello-app (service forwarded request to PODs) --> Nginx POD (it doesn't have anything at path/helloso 404)
404 написан стороной Nginx, в вашем случае это будет либо Входной контроллер Nginx, либо сам контейнер (POD).
Поэтому попробуйте войти в конфигурацию, не устанавливая дорожкаpath: "/", и нажмите на конечную точку, вы можете увидеть вывод Nginx.
в аннотации, если вы добавите это nginx.ingress.kubernetes.io/rewrite-target: /$2, вы можете попасть в корень контейнера, пока в домене вы будете стрелять IP/hello
подробнее о перезаписи пути читайте по адресу: kubernetes.github.io/ingress-nginx/examples/rewrite/… или еще вы можете проверить app-root
Итак, чтобы понять это правильно: конечная точка также отправляется в модуль, на который я нацеливаюсь? Итак, если я настрою правило входа, которое указывает от IP/hello к какому-то поду, связь с подом будет также в конечной точке /hello?
да, если вы не укажете какую-либо логику или путь перезаписи в annotation или Type
Давайте продолжить обсуждение в чате.
Спасибо большое, так и было. Но я не совсем понимаю, что здесь происходит. Я подумал, что конечная точка
/hello, которую мы достигаем, указывает на корневую точку пода, то есть на индексную страницу сервера nginx? Почему это не так?