Путаница с сетью Kubernetes в облаке Google

Я новичок в 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, которое, по-видимому, напрямую делает страницу доступной для разработчиков). На самом деле, я также пробовал несколько других комбинаций портов (хотя я считаю, что приведенная выше должна быть правильной) безрезультатно. Может ли кто-нибудь объяснить мне, почему маршрутизация здесь не работает?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы заметили руководство внутри конфигурации входа 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 /hello and forwarded request to service --> hello-app (service forwarded request to PODs) --> Nginx POD (it doesn't have anything at path /hello so 404)

404 написан стороной Nginx, в вашем случае это будет либо Входной контроллер Nginx, либо сам контейнер (POD).

Поэтому попробуйте войти в конфигурацию, не устанавливая дорожкаpath: "/", и нажмите на конечную точку, вы можете увидеть вывод Nginx.

Спасибо большое, так и было. Но я не совсем понимаю, что здесь происходит. Я подумал, что конечная точка /hello, которую мы достигаем, указывает на корневую точку пода, то есть на индексную страницу сервера nginx? Почему это не так?

rammelmueller 24.03.2022 10:18

в аннотации, если вы добавите это nginx.ingress.kubernetes.io/rewrite-target: /$2, вы можете попасть в корень контейнера, пока в домене вы будете стрелять IP/hello

Harsh Manvar 24.03.2022 10:20

подробнее о перезаписи пути читайте по адресу: kubernetes.github.io/ingress-nginx/examples/rewrite/… или еще вы можете проверить app-root

Harsh Manvar 24.03.2022 10:20

Итак, чтобы понять это правильно: конечная точка также отправляется в модуль, на который я нацеливаюсь? Итак, если я настрою правило входа, которое указывает от IP/hello к какому-то поду, связь с подом будет также в конечной точке /hello?

rammelmueller 24.03.2022 10:23

да, если вы не укажете какую-либо логику или путь перезаписи в annotation или Type

Harsh Manvar 24.03.2022 10:24

Давайте продолжить обсуждение в чате.

Harsh Manvar 24.03.2022 10:29

Другие вопросы по теме