#html #apache #kubernetes #dns #dnsmasq
#HTML #apache #kubernetes #dns #dnsmasq
Вопрос:
Я чувствую, что это основной вопрос, но я изо всех сил пытаюсь найти что-либо конкретное в своих исследованиях. Это, должно быть, распространенная проблема, и я не уверен, что искать в Google.
Я запускаю кластер Kubernetes с воздушным зазором с кучей сервисов, на которых у всех есть пользовательские интерфейсы. Мои сервисы доступны с помощью NodePort. Я могу перейти к пользовательскому интерфейсу, выполнив ip addr:NodePort. У меня настроена DNS с использованием dnsmasq, поэтому я могу получить доступ к URL-адресу example.domain.com:NodePort.
Я хочу «скрыть» часть URL-адреса nodeport, чтобы пользователи / клиенты могли получать доступ к приложениям по example.domain.com/appname.
Я использую веб-сервер Apache для обслуживания некоторых файлов, и я реализовал множество перенаправлений, например
Перенаправление постоянное / appnamehttp://example.domain.com:30000
который работает частично при доступе к пользовательским интерфейсам через браузер Firefox, например example.domain.com/appname. Это изменяет URL-адрес в адресной строке пользователя, но я могу с этим смириться. Проблема в том, что некоторые клиенты не перенаправляют автоматически на http://example.domain.com:30000 / и вместо этого просто укажите код состояния 301.
Может кто-нибудь указать мне правильное направление, пожалуйста.
Спасибо
Ответ №1:
Увидев ответ Ijaz, я смог немного усовершенствовать свой поиск в Google и пришел к следующему:
/etc/hosts
192.168.100.1 example.domain.com gitlab.domain.com example
<VirtualHost *:80>
ServerName gitlab.domain.com
ProxyPass / http://example.domain.com:30100/
ProxyReversePass / http://example.domain.com:30100/
</VirtualHost>
systemctl restart httpd dnsmasq
Если вы перейдете к gitlab.domain.com вы будете перенаправлены на правильный порт (30100).
Недостатком этого является то, что для каждого приложения, которое я развертываю, должно быть доменное имя. Я бы предпочел сделать что-то похожее на:
/etc/hosts
192.168.100.1 example.domain.com example
<VirtualHost *:80>
ServerName example.domain.com
ProxyPass /gitlab http://example.domain.com:30100/
ProxyReversePass /gitlab http://example.domain.com:30100/
ProxyPass /jira http://example.domain.com:30111/
ProxyReversePass /jira http://example.domain.com:30111/
</VirtualHost>
Однако, когда я перешел к example.domain.com/gitlab это добавило бы правильный URL, например, целевая страница для gitlab — /users /sign_in, example.domain.com/users/sign_in однако мой браузер не найден. URL запроса /users/sign_in не был найден на сервере.
Я не смог определить правильную конфигурацию. Если у кого-нибудь есть какие-либо дополнительные мысли по исправлению этого, пожалуйста, дайте мне знать.
Ответ №2:
Вы должны перенаправить HTTP-трафик с порта 80 (который является стандартным) на ваш порт узла.
Например
sudo iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 30000
Ответ №3:
Используя apache или nginx, вы можете просто использовать виртуальный сервер, который скрывает внутренние порты. Я не думаю, что вам нужно устанавливать какое-либо перенаправление, вам просто нужно передать URL-адрес внешнему клиенту с виртуального сервера: 80, чьи серверные, вышестоящие узлы — это ваши внутренние узлы с узловыми портами.
Вы можете найти простые и лучшие примеры для nginx, ha-proxy и других.
Вот пример apache:
<VirtualHost *:80>
ProxyRequests off
ServerName domain.com
<Proxy balancer://mycluster>
# WebHead1
BalancerMember http://node:NodePort
# WebHead2
BalancerMember http://node:NodePort
# Security "technically we aren't blocking
# anyone but this is the place to make
# those changes.
Require all granted
# In this example all requests are allowed.
# Load Balancer Settings
# We will be configuring a simple Round
# Robin style load balancer. This means
# that all webheads take an equal share of
# of the load.
ProxySet lbmethod=byrequests
</Proxy>
# balancer-manager
# This tool is built into the mod_proxy_balancer
# module and will allow you to do some simple
# modifications to the balanced group via a gui
# web interface.
<Location /balancer-manager>
SetHandler balancer-manager
# I recommend locking this one down to your
# your office
Require host example.org
</Location>
# Point of Balance
# This setting will allow to explicitly name the
# the location in the site that we want to be
# balanced, in this example we will balance "/"
# or everything in the site.
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
</VirtualHost>
Комментарии:
1. Боюсь, я не смог заставить ваш ответ работать, но он направил меня в правильном направлении, так что спасибо. Я опубликую свой ответ отдельно — у меня все еще есть запрос с ним, если вы могли бы взглянуть.
2. приведенный выше пример — это всего лишь образец, и именно то, что работает, оно не тестировалось, вам, конечно, нужно будет его изменить