Входной путь Kubernetes не находит ресурсы - PullRequest
0 голосов
/ 05 декабря 2018

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

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

Моя проблема в том, что любой включенный ресурс на сайте, скажем, например, / 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; }

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

1 Ответ

0 голосов
/ 05 декабря 2018

Полагаю, аннотация nginx.ingress.kubernetes.io/rewrite-target: / в вашей конфигурации Ingress не принесет успеха при многократном перезаписи целевых путей, подробнее здесь .Однако вы можете рассмотреть возможность использования Nginx Plus Ingress controller , поставляемого с аннотацией 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
...