Как разрешить пользователю доступ к некоторому URL, не требуя порта

#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. приведенный выше пример — это всего лишь образец, и именно то, что работает, оно не тестировалось, вам, конечно, нужно будет его изменить