Как разрешить пользователю доступ к некоторому URL, не требуя порта - PullRequest
0 голосов
/ 19 марта 2019

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

У меня работает воздушный зазор с кластером Kubernetes с кучей сервисов, на которых у всех есть пользовательский интерфейс.Мои сервисы выставляются с помощью NodePort.Я могу перейти к пользовательскому интерфейсу, выполнив ip addr: NodePort.У меня есть настройка DNS с использованием dnsmasq, поэтому я могу получить доступ к URL-адресу example.domain.com:NodePort.

Я хочу «спрятать» часть узла в URL-адресе, чтобы пользователи / клиенты могли получить доступ к приложениям, например.domain.com/appname.

Я использую веб-сервер Apache для обслуживания некоторых файлов, и я реализовал несколько перенаправлений, например,

Постоянное перенаправление / appname http://example.domain.com:30000/

, которое работает довольно хорошо при доступепользовательский интерфейс через браузер Firefox, например, example.domain.com/appname.Это действительно меняет URL в адресной строке пользователя, но я могу жить с этим.Проблема в том, что некоторые клиенты не перенаправляют автоматически на http://example.domain.com:30000/, а вместо этого просто представляют код состояния 301.

Может кто-нибудь указать мне правильное направление, пожалуйста.

Спасибо

Ответы [ 3 ]

1 голос
/ 21 марта 2019

Увидев ответ Ijaz, я смог немного улучшить свой поиск в Google и предложил следующее:

/ и т.д. / хосты

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).

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

/ и т.д. / хосты

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, однако мой браузер отображает Not Found. URL запроса / users / sign_in не найден на сервере.

Я не могу определить правильную конфигурацию. Если у кого-то есть какие-либо дальнейшие мысли, чтобы исправить это, пожалуйста, сообщите мне.

0 голосов
/ 19 марта 2019

Используя 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>
0 голосов
/ 19 марта 2019

Вы должны перенаправить HTTP-трафик с порта 80 (который является стандартным) на ваш NodePort.

Например

sudo iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 30000
...