#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. Мое правило не имеет никакого эффекта, я всегда использую серверную часть по умолчанию.