Каков наилучший способ настройки Proxy Pass в объекте Nginx Ingress для Kubernetes? - PullRequest
0 голосов
/ 01 мая 2019

В настоящее время я пытаюсь перенести сайт, который работал на сервере Apache Load Balanced, в мой кластер k8s. Однако приложение было странным образом настроено с прокси-проходом и прокси-реверсом, например:

ProxyPass /something http://example.com/something
ProxyPassReverse /something http://example.com/something

И я хотел бы подражать этому в Nginx Ingress

Сначала я попытался использовать аннотацию rewrite-target, однако она не сохраняет заголовок Location, необходимый для возобновления работы приложения.

Затем я попытался разместить аннотацию proxy-redirect-to/from внутри определенного блока местоположения, например:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gpg-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/proxy-redirect-from: http://originalapp.com/something
    nginx.ingress.kubernetes.io/proxy-redirect-to: http://example.com/something
spec:
  rules:
  - host: example.com
    http:
      paths:
        - path: /something
          backend:
            serviceName: example-com
            servicePort: 80

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

Как лучше всего имитировать этот проход прокси?

1 Ответ

1 голос
/ 15 мая 2019

Во-первых, вы можете использовать пользовательскую конфигурацию для вашего входного контроллера nginx, документацию можно найти здесь

Также, если вы просто хотите использовать входной контроллер nginx в качестве обратного прокси-сервера, каждый входПравило уже создает директиву proxy_pass для соответствующей службы upstream / backend.

И если пути совпадают с вашим правилом и бэкэнд-сервисом, вам не нужно указывать правило перезаписи, только путь к бэкэнд-сервису.Но если пути разные, то рассмотрите возможность использования аннотации nginx.ingress.kubernetes.io/rewrite-target, в противном случае вы получите 404 backend error

Таким образом, чтобы перенаправить запрос, поступающий во внешний интерфейс http://example.com/something, на внутренний example-com/something, ваш входПравило должно быть таким, как показано ниже

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gpg-app-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
   #nginx.ingress.kubernetes.io/rewrite-target: /different-path
spec:
  rules:
  - host: example.com
    http:
      paths:
        - path: /something
          backend:
            serviceName: example-com
            servicePort: 80

Для более подробного объяснения аннотаций, проверьте Входные аннотации Nginx

Также рассмотрите возможность проверки журналов модуля nginx-ingress-controller черезесли что-то не так

kubectl logs nginx-ingress-controller-xxxxx

Надеюсь, это поможет!

...