Путь Kubernetes Ingress не находит ресурсы

У меня возникают проблемы при использовании пути для указания на другую службу Kubernetes.

Я указываю на дополнительную службу, используя путь /secondary-app, и в своих журналах я вижу, что правильно обращаюсь к этой службе.

Моя проблема заключается в том, что любой включенный ресурс на сайте, скажем, /css/main.css, например, не найден, что приводит к ошибке 404.

Вот урезанная версия моего входа:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 50m
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: my-app
spec:
  rules:
  - host: my-app.example.com
    http:
      paths:
      - backend:
        path: /
          serviceName: my-app
          servicePort: http
      - backend:
        path: /secondary-app        
          serviceName: secondary-app
          servicePort: http

Я пробовал несколько вещей и еще не смог заставить это работать. Может быть, мне нужно сделать некоторые перезаписи apache?

Любая помощь будет оценена по достоинству.

Изменить — Решение

Благодаря некоторой помощи от @mk_sta я смог заставить мое вторичное сервисное приложение работать, используя аннотацию nginx.ingress.kubernetes.io/configuration-snippet следующим образом:

  nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($request_uri = '/?%secondary-app') { rewrite /(.*) secondary-app/$1 break; }

Это все еще нуждается в небольшой настройке для моего конкретного приложения, но это сработало именно так, как мне нужно.


person Beans    schedule 05.12.2018    source источник


Ответы (1)


Я предполагаю, что аннотация nginx.ingress.kubernetes.io/rewrite-target: / в вашей конфигурации Ingress не приносит никакого успеха для перезаписи целевых путей с несколькими путями, читайте больше здесь. Однако вы можете использовать контроллер Nginx Plus Ingress, который поставляется с аннотацией nginx.org/rewrites: и может использоваться для указания путей URI к нескольким службам, как описано в этом примере .

Вы также можете подумать об использовании nginx.ingress.kubernetes.io/configuration-snippet аннотация для существующего Ingress, которая может настроить правила перезаписи для местоположения Nginx, например:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 50m
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /first-app/(.*) $1 break;
      rewrite /secondary-app/(.*) /$1 break;
  name: my-app
spec:
  rules:
  - host: my-app.example.com
    http:
      paths:
      - backend:
        path: /first-app
          serviceName: my-app
          servicePort: http
      - backend:
        path: /secondary-app        
          serviceName: secondary-app
          servicePort: http
person Nick_Kh    schedule 05.12.2018
comment
Большое спасибо за ваш ответ. Я прочитаю примеры, которые вы разместили, и вернусь к вам, как это происходит. - person Beans; 06.12.2018
comment
Ты мой спаситель. Мне удалось заставить его работать с помощью аннотации nginx.ingress.kubernetes.io/configuration-snippet:. Я обновлю свой первоначальный вопрос своим точным решением. Спасибо еще раз. - person Beans; 06.12.2018