LINUX.ORG.RU
решено ФорумAdmin

А можно организовать доступ к доменам без записи в hosts?

 


0

1

Есть разные проекты, внутри каждого крутятся свои микросервисы. Я одно время добавлял в /etc/hosts записи типа:

# proj1
127.0.0.1   proj1.srv1.com
127.0.0.1   proj1.srv2.com
127.0.0.1   proj1.srvX.com

# proj2
127.0.0.1   proj1.srv1.com
127.0.0.1   proj1.srv2.com
127.0.0.1   proj1.srvX.com

А потом в nginx это всё проксировал на нужные порты

При каждом добавлении/переименовании/удалении какого-то микросервиса надо лезть в hosts и nginx и править что-то. Иногда забывается и hosts становится помойкой и хз что там валидно, а что нет. Потом это вроде в bind делал, но сути этого не меняет. Как бы так сделать это через traefik(?) или что-то еще, чтобы минимум где-то забивать proj_name, а дальше это чтобы рулилось через конфигурацию какой-то аплеки внутри проекта(traefik(?))

★★★★

Последнее исправление: serg002 (всего исправлений: 1)

Иногда забывается и hosts становится помойкой и хз что там валидно, а что нет.

Вы делаете не правильно, правильно делать через hostAliases

https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/

перед деплойментом, генерите yaml/json манифесет который наполняет hostAliases для контейнера nginx из /etc/hosts

gagarin0
()
Ответ на: комментарий от gagarin0

Каждый микросервис проекта лежит в своей директории и выгружается в свой репозиторий. Все микросервисы в своей сети докера. Когда я создаю микросервис, я делаю в /etc/hosts запись

proj1.srv_name.com 127.0.0.1

Далее в /etc/nginx/site-available/proj1 я проксирую микросервис и делаю его enable

При появлении нового микросервиса, я добавляю вторую запись в hosts и добавляю в nginx запись о микросервисе в /etc/nginx/site-available/proj1

Хотелось бы, чтобы я где-то объявлял proj1.* и уже в каком-то сервисе(лучше в сервисе проекта proj1) объявлял все поддомены и этот сервис проексировал все микросервисы, чтобы я не захламлял hosts и не лез постоянно во внешний сервис типа nginx

serg002 ★★★★
() автор топика
Ответ на: комментарий от serg002

Вам нужно решить две проблемы:

  1. Добавление домена *.srv_name.com -> 127.0.0.1 в nginx конфиге

  2. Добавление *.srv_name.com -> 127.0.0.1 в конфиге вашего локального dns сервера, самый простой вариант это одна строчка в dnsmasq

address=/.srv_name.com/127.0.0.1

gagarin0
()

Я на роутере в static dns добавляю. В принципе можно ансибл прикрутить, чтобы он брал какой-нибудь список и сам его добавлял.

Но мне руками проще, не так много проектов.

А вот сайты для nginx уже роль для ансибла делает. Там и генерация сертификатов, и авторизация, и ограничения по айпи.

skyman ★★★★
()

Hosts в общем-то и не нужен. Ты же и так знаешь, что надо на IP 127.0.0.1 соединение установить, а резолвер ни для чего другого и не нужен.

Пихай нужное доменное имя в заголовок запроса к своим микросервисам типа Host: proj1.srv2.com, а запрос посылай на 127.0.0.1, да и всё. nginx дальше разберётся.

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

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от gagarin0

Добавление *.srv_name.com -> 127.0.0.1 в конфиге вашего локального dns сервера, самый простой вариант это одна строчка в dnsmasq

address=/.srv_name.com/127.0.0.1

Мне бы не srv_name, а маску как-то вписать

proj1.*.com

Потому что есть пересечение по

proj1.srv1.com
proj2.srv1.com

И в первом и во втором проекте есть srv1

serg002 ★★★★
() автор топика
Ответ на: комментарий от serg002

У вас есть возможность изменить домен первого уровня? Если да, то для вас будет работать запись вида:

address=/.local/127.0.0.1

и тогда все

proj1.srv1.local

proj2.srv2.local

projN.*.local

будут вести на 127.0.0.1

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)