Вызов службы Nginx Ingress, инициированный в серверной службе, не перенаправлен на https - PullRequest
0 голосов
/ 19 декабря 2018

У меня проблема с переадресацией https с вызова, инициированного в серверной части.У меня есть Nginx Ingress Controller со следующей настройкой:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    name: ingress-sample
    annotations:
      kubernetes.io/ingress.class: "nginx"
      nginx.ingress.kubernetes.io/affinity: cookie
      nginx.ingress.kubernetes.io/ssl-redirect: "true"
      nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
    rules:
    - http:
        paths:
        - path: /
          backend:
            serviceName: sample
            servicePort: 8080

Он отлично работает, когда клиент обращается к странице через браузер - он использует https для связи с балансировщиком нагрузки и трафиком от балансировщика нагрузки к модулям.в кластере используется HTTP (поэтому SSL завершается на уровне LB и клиент вынужден использовать HTTPS).Однако, когда я пытаюсь вызвать из моего приложения Java URL, который использует HTTP (как это делает клиент), я ожидаю, что он будет автоматически перенаправлен на HTTPS.Я получаю правильный ответ (308 постоянных перенаправлений), но мой вызов не переносится автоматически на https.Отсутствует ли какая-нибудь аннотация?

Ответы [ 2 ]

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

В моем Java-приложении я использовал Apache Http Client версии 4.5.5.Этот клиент использует класс DefaultRedirectStrategy, который обрабатывает перенаправление.Я проверил реализацию и в этой версии он не обрабатывает код 308 (не перенаправляет).Поскольку я не хотел ничего менять в коде приложения, я обнаружил, что можно изменить код перенаправления, который используется Nginx.Это может быть достигнуто через ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-0.17.1
    component: "controller"
    heritage: Tiller
    release: sample-nginx
  name: sample-ingress-controller
data:
  http-redirect-code: "301"

Apache Http Client в версии 4.5.5 выполняет перенаправления с кодом ответа 301, так что теперь все работает нормально.Недавно была также сделана фиксация клиентского репо Apache Http, которая обрабатывает код ответа 308 так же, как 301.

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

нет, я не эксперт по java, но я полагаю, что ваше java-приложение не выполняет перенаправления (поскольку вы получаете постоянное перенаправление 308), тем более что вы подтвердили, что это работает в браузере.Попробуйте что-то вроде этого:

https://www.mkyong.com/java/java-httpurlconnection-follow-redirect-example/
URLConnection не следует за перенаправлением

...