Вход Kubernetes дает ошибку 404 для определенного сервиса - PullRequest
0 голосов
/ 09 июля 2019

Я настроил кластер kubernetes в Azure с помощью nginx ingress. При переходе по определенному пути я получаю сообщение об ошибке 404.

Я установил несколько примеров приложений, которые возвращают простое эхо, которое прекрасно работает. Мое приложение ban api всегда возвращает ошибку 404.

Когда я иду к входному пути, например,

http://51.145.17.105/apple

Работает нормально. Однако, когда я перехожу к приложению API, я получаю сообщение об ошибке 404, используя URL:

http://51.145.17.105/ban-simple

Если я войду в кластер и сверну бан-простой сервис (не входящий ip), например

curl -L 10.1.1.40

Я получил правильный ответ. Когда я пытаюсь использовать вход nginx, я получаю ошибку 404.

Входное отображение выглядит мне правильно. Вот копия входного yaml, содержащего пути.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fruit-ingress
  namespace: ban
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$
spec:
  rules:
  - http:
      paths:
        - path: /apple
          backend:
            serviceName: apple-service
            servicePort: 5678
        - path: /ban-simple
          backend:
            serviceName: ban-service
            servicePort: 80

Копия "хорошего" сервиса:

kind: Pod
apiVersion: v1
metadata:
  name: apple-app
  namespace: ban
  labels:
    app: apple
spec:
  containers:
    - name: apple-app
      image: hashicorp/http-echo
      args:
        - "-text=apple"

---

kind: Service
apiVersion: v1
metadata:
  name: apple-service
  namespace: ban
spec:
  selector:
    app: apple
  ports:
    - port: 5678 # Default port for image

Служба, которая не работает:

kind: Pod
apiVersion: v1
metadata:
  name: ban-simple
  namespace: ban
  labels:
    app: ban-simple
spec:
  containers:
    - name: ban-simple
      image: xxxxx.azurecr.io/services/ban

---

kind: Service
apiVersion: v1
metadata:
  name: ban-simple-service
  namespace: ban
spec:
  selector:
    app: ban-simple
  ports:
    - port: 80 # Default port for image

Я запустил контейнер локально, и он работает на моей машине. Он перенаправляет на localhost / index.html, если это имеет значение.

Любые предложения приветствуются.

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Как я вижу в вашем файле yaml, вы устанавливаете название сервиса как ban-simple-service для вашего простого бана:

kind: Service
apiVersion: v1
metadata:
  name: ban-simple-service
  namespace: ban
spec:
  selector:
    app: ban-simple
  ports:
    - port: 80 # Default port for image

Но вы устанавливаете имя сервисакак ban-service во входе:

    - path: /ban-simple
      backend:
        serviceName: ban-service
        servicePort: 80

Я думаю, что это возможная причина.Поэтому вам нужно изменить одно из имен служб, чтобы сделать их одинаковыми.

И, на мой взгляд, я предлагаю вам использовать развертывание вместо модуля.Потому что если стручок не работает, значит, он не работает.Но используйте развертывание, оно создаст новое для вас.Кроме того, я думаю, что если вы выставите порт в контейнере, файл yaml будет более читабельным.

0 голосов
/ 09 июля 2019

Проблема была вызвана nginx.ingress.kubernetes.io/rewrite-target: /$.Я закомментировал это, и это решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...