Изменение обратного прокси-сервера http(s) локального контейнера на Pathwae

Я активно использую Docker, а теперь и Podman. Но уже некоторое время я нахожусь в несколько неудобной ситуации.
Многие проекты предлагают обслуживать приложение локально через локальное доменное имя “*.localhost” (что, само по себе, совсем не проблема). И для этого они используют “Traefik”.

Конечно, вы любите Traefik. И я тоже.

Traefik – это очень полный, “облачный”, “простой в использовании” обратный прокси. Но у него есть серьезный недостаток, когда мы говорим о “локальной” работе, то есть в качестве шлюза для приложения, которое будет указывать на конкретный контейнер и порт: он использует Docker API.

Я очень далек от того, чтобы принижать Docker, я использую его с момента его создания (в 2013 году). Но мне нравится не сам Docker, а его контейнеризация. У Docker много преимуществ, но уже некоторое время я очень заинтересован в “podman”, который также предлагает серьезные преимущества (особенно для сохранения идентификатора пользователя хоста).

Проблема с Docker заключается в его дурной славе. Дурная слава приводит к принятию, независимо от того, что некоторые решения для создания чего-то не подходят.

И поэтому, когда один из пионеров жанра обратного прокси, такой как Traefik, выходит на рынок, заставляя вас монтировать сокет Docker и использовать ярлыки для манипуляций с хостами, никто не вздрагивает. “Так надо делать”.

Это не моя философия.

На самом деле, Traefik использует то, что ему предлагают, и это его заслуга, потому что это будет работать замечательно. И это с Kubernetes и Docker.
Но он не будет работать ни с чем другим, кроме того, для чего он был разработан.

И здесь мы подходим к сути проблемы. Я хочу использовать Podman. А поскольку в режиме rootless нет сокета, Traefik откажется работать.

Поймите суть проблемы (если я могу ее так назвать), Traefik будет использовать Docker API через UNIX сокет (или http) для чтения меток контейнеров, которыми вы будете управлять, чтобы определить, активен ли он, какое имя хоста использовать, и другие вещи.
Вот только, несмотря на то, что Podman предоставляет совместимый сокет, он не работает в режиме rootless. Следствием этого является то, что даже если я захочу подключить сокет, чтобы заставить Traefik работать с Podman, мне придется запускать свои контейнеры от имени root (через sudo).

А об этом не может быть и речи!

Поэтому я создал Pathwae

Чтобы решить эту проблему, я начал избегать Traefik в локальном окружении. Первым решением было использовать Nginx в качестве обратного прокси, но конфигурация была немного сложнее, чем объявление хостов в ярлыках. Мне нужно было создать файл конфигурации и смонтировать его.
Чтобы позволить моему пользователю привязать порты 80/443, мне нужно было вызвать:

sudo sysctl -w net.ipv4.ip_unprivileged_port_start=0
Войти в полноэкранный режим Выйти из полноэкранного режима

Через некоторое время я решил разработать что-то более простое в использовании, что-то, что не использует API, ярлыки… Что-то, что принимает только объявление “host to endpoint” в среде.

То есть, я хотел создать агностическое решение, независимо от того, какую контейнерную технологию вы хотите использовать.
Я назвал его “Pathwae”.
Оно работает с Docker, Podman и может работать с другими решениями!

Спустя некоторое время я с гордостью объявляю, что решил выпустить его для сообщества.

Сайт находится здесь https://pathwae.net, и вы можете использовать его следующим образом:

version: "3"
services:
   # example, start a simple "ghost" container
   # which listens on 2368 port
   blog:
     image: ghost
     environment:
       # mandatory with ghost...
       url: https://ghost.test.localhost

  # then use pathwae
  proxy:
    image: quay.io/pathwae/proxy
    environment:
      CONFIG: |
        ghost.test.localhost:
          to: http://blog:2368
          force_ssl: true
          # enabled: true
    # pathway should bind port 80 and 443
    ports:
      - "80:80"
      - "443:443"
      # web UI
      - "8080:8080"
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы, наверное, заметили, что путь предлагает веб-интерфейс, он обслуживается на порту 8080.

Итак, вы можете запустить стек с помощью docker-compose up или podman-compose up (не забудьте разрешить открытие непривилегированных портов, как объяснялось выше) и посетить http://ghost.test.localhost.

Pathwae выполнит эту работу. Поскольку вы не предоставили сертификат TLS/SSL, он создаст его (временный).

Веб-интерфейс (http://localhost:8080) предоставляет информацию о сертификатах, состоянии и запросах в режиме реального времени. Но он также позволяет вам изменить конечную точку или “приостановить” маршрут.

Предлагает ли это что-то большее?

Pathwae создает TLS/SSL сертификаты, если вы их не предоставили. Вы можете добавить force_ssl: true в конфигурацию (в окружении), чтобы принудительно перенаправлять на “https”.

Если вы, как и я, являетесь поклонником mkcert, то вы можете создать свои сертификаты в каталоге, затем смонтировать этот каталог в /certs контейнера Pathwae.

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

Это не лучше, это проще.

Я хочу настоять на своем. Мне нравится Traefik, и я никогда не захочу сделать Pathwae конкурентом Traefik. Я только думаю, что Traefik не приспособлен для разработчиков, он не позволяет использовать безкорневые контейнеры (он придерживается Docker и Kubernetes) и TLS/SSL не прост в управлении (не так прост, как auto-ssl / установка пути сертификата).

Pathwae не является и никогда не будет “производственным” обратным прокси. Это решение для разработчиков.

Мне нужно, чтобы вы протестировали его в нескольких ситуациях, чтобы у вас были сообщения об ошибках, идеи по улучшению решения. Он бесплатный, с открытым исходным кодом и построен на Go (и Typescript/Vue для веб-интерфейса).

Дайте ему шанс!

Оцените статью
Procodings.ru
Добавить комментарий