Проблема перезаписи конфигурации входа Kubernetes - PullRequest
0 голосов
/ 11 апреля 2019

Я создаю конфигурацию для размещения некоторых приложений в кластере Kubernetes на AWS.У меня есть два разных приложения, с отдельным сервисом / модулем / селектором, но я хочу показать их с одним входом на данный момент.

Итак, я создал следующий контроллер входа

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /foo
        backend:
          serviceName: foo
          servicePort: 8080
      - path: /bar
        backend:
          serviceName: bar
          servicePort: 8080 

ивход получает ELB от AWS без каких-либо проблем, но когда я пытаюсь просмотреть приложение (приложение Java, использующее Tomcat appserver), я всегда получаю следующую страницу

Tomcat

Это классическая старая страница приветствия Tomcat, но каждый запрос всегда возвращает index.html (без загрузки css / img), а также, если я пытаюсь использовать правильный путь контекста для приложения, которое я получаю на этой странице.

Если я открываю приложения с помощью службы (LoadBalancer), я могу использовать их без этих проблем, поэтому я думаю, что с входной конфигурацией что-то не так.

Есть идеи?


ОБНОВЛЕНИЕ

Если я использую вход с одним путем, подобным этому

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: foo
          servicePort: 8080

Используя URL-адрес INGRESSHOST, я могу увидеть дом Tomcat с помощью img / css, и если я перехожу к INGRESSHOST / APPCONTEXT Я могу использовать приложение без проблем

1 Ответ

2 голосов
/ 11 апреля 2019

Если вы недавно изменили версию вашего контроллера nginx-ingress, возможно, причиной может быть недавнее изменение в нем. Теперь он использует правила перезаписи regex и, возможно, ваша цель перезаписи просто всегда переписывается в "/". Я думаю, что изменения были внесены в версию 0.22 в январе.

Новый правильный синтаксис для вашего входа будет:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - http:
      paths:
      - path: /foo(.*)
        backend:
          serviceName: foo
          servicePort: 8080
      - path: /bar(.*)
        backend:
          serviceName: bar
          servicePort: 8080 
...