Вход за LoadBalancer X-перенаправленный для маршрутизации

#kubernetes-ingress #nginx-ingress

#kubernetes-вход #nginx-вход

Вопрос:

Наш входной контроллер nginx находится за loadbalancer. Loadbalancer устанавливает исходный хост в заголовках X-Forwarded-For. Например: «x-forwarded-host»: «www.portal-app.de «.

Я также установил use-forwarded-headers: «true» во входе.

Мое правило входа:

 apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kd-portal-ingress
  namespace: kd-portal-prod
spec:
  rules:
  - host: www.portal-app.de
    http:
      paths:
      - backend:
          serviceName: my-portal-app
          servicePort: 5050    
  

Когда я вызываю URL, мы всегда получаем страницу nginx по умолчанию 404.

Это тоже попытка объяснить сценарий. www.portal-app.de выполняется загрузка на loadbalancer apache. Этот LB будет перенаправлять запрос на IP-адрес, на котором запущены k8s и ingresscontroller. Прокси-сервер установил информацию о хосте-источнике в заголовках x-forward. Мое правило не имеет никакого эффекта, я всегда использую серверную часть по умолчанию

Возможно ли определить маршрутизацию на основе хоста за loadbalancer в ingress?

Комментарии:

1. Я думаю, что это было бы сложнее, чем просто установить use-forwarded-headers: «true» , взгляните на этот пример . Об этом есть соответствующая документация в документации kubernetes ingress. Дополнительно взгляните сюда . Не могли бы вы попробовать с этим и сообщить мне, сработало ли это?

Ответ №1:

Я решил это, активировав директиву apache https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypreservehost

Ответ №2:

Да, основное использование ingress предназначено только для этого. Вы указываете домены в правилах. Как вы можете видеть, это правило в массиве, поэтому вы можете добавить много доменов, и оно перенаправит на указанную вами серверную службу.Также вы можете создавать отдельные входные объекты.

Пример:

 apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/ssl-redirect: "true"
  name: ingress
spec:
  rules:
  - host: your_domain_name
    http:
    paths:
      - backend:
          serviceName: your_service_name
          servicePort: 8080
        path: /
  tls:
  - hosts:
    - your_domain_name
    secretName: tls-certificate
  

Комментарии:

1. когда я определяю правило через локальное имя хоста и вызываю URL-адрес через внутреннее имя хоста, это работает хорошо. Когда вы вызываете www.portal-app.de мы получаем 404 есть идеи, что может быть не так?

2. к какому IP-адресу привязан www.portal-app . Если он не указывает на IP-адрес IP-адреса вашей службы loadbalancer, то запрос не поступает в ваш кластер. Если вы делаете все локально, вы можете установить IP-адрес и сопоставление хостов в файле / etc /hosts. В противном случае, если вы используете это облако, вам нужно указать домен для разрешения на ваше доменное имя или IP-адрес балансировщика нагрузки. Надеюсь, это прояснит ситуацию.

3. Для меня непонятно. Это тоже попытка объяснить сценарий. www.portal-app.de происходит загрузка на балансировщик нагрузки Apache. Этот LB будет перенаправлять запрос на IP-адрес, на котором запущены k8s и ingresscontroller. Затем информация об исходном хосте устанавливается в заголовках x-forward через LB. Мое правило не имеет никакого эффекта, я всегда использую серверную часть по умолчанию.