Fórum Root.cz

Hlavní témata => Server => Téma založeno: fatal56ty 17. 08. 2021, 21:31:53

Název: Lokální DNS server pro služby v dockeru
Přispěvatel: fatal56ty 17. 08. 2021, 21:31:53
Zdravím, mám nainstalovaný docker a v něm mě běží pár služeb- unifi controler, pyload, node-red, portainer. Na tyto služby přistupuji přes stejnou IP adresu a jen podle dané služby měním port. Což je dost nepraktické, musím si pamatovat porty daných služeb, neexistuje nějaký lokální dns server (klidně do dockeru), kde bych uložil porty a k nim záznamy třeba ve formálu: unifi.local, pyload.local atd. a potom přistupoval na služby přes tyto záznamy?
Našel jsem něco o SRV, ale nevím jestli je to cesta a nechci vynalézat kolo, pokud má někdo vyzkoušené něco funkční.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: Pixe 17. 08. 2021, 21:46:03
Není to sice (přímo) DNSka, ale kombinuju Traefik s wildcard DNS záznamem na Mikrotiku
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: arucard 17. 08. 2021, 21:49:34
Čau, mrkni na Traefik třeba v kombinaci s nip:
https://traefik.io/
https://nip.io/

A kdyby sis s tím chtěl vyhrát, tak Traefik podporuje (minimálně) Cloudflare. Můžeš tak mít lokálně funkční HTTPS (protože DNS challenge).
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: BoaR 17. 08. 2021, 22:51:12
pokud na to pristupujes jen lokalne, tak co si jen exportovat porty, a pustit si nginx, a dat si zaznamy dns do /etc/hosts ?
unifi.local
zimbra.local
nginx naucit proxy ze uniofi.local miri na localhost:port
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: veskotskujehnusne 18. 08. 2021, 07:13:07
Od kdy DNS řeší porty?

pokud na to pristupujes jen lokalne, tak co si jen exportovat porty, a pustit si nginx, a dat si zaznamy dns do /etc/hosts ?
unifi.local
zimbra.local
nginx naucit proxy ze uniofi.local miri na localhost:port
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: zapik1 18. 08. 2021, 07:28:41
A ještě upozorňuji na zrádnost domény .local
tato doména je určena  pro mDNS a při jejím použití začnete v síťi honit duchy, kdy některá zařízení nepřekládají, nebo jsou nedostupná.
Vyberte si jinou doménu.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: veskotskujehnusne 18. 08. 2021, 09:06:24
Jo pardon, má chyba.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: BoaR 18. 08. 2021, 10:16:55
Kde jsem rekl, ze DNS resi porty ?

psal jsem, pustit si lokalne nginx jako reverzni proxy, a smerovat

 server1.doma => localhost:8081
 server2.doma => localhost:8082
 server3.doma => localhost:8083

a do /etc/hosts dat
Kód: [Vybrat]
127.0.0.1 server1.doma
127.0.0.1 server2.doma
127.0.0.1 server3.doma
a do nginx tedy neco jako
Kód: [Vybrat]
  server {
    listen       80;
    server_name server1.doma
    location / {
      proxy_pass      http://127.0.0.1:8081;
    }
  }

Od kdy DNS řeší porty?

pokud na to pristupujes jen lokalne, tak co si jen exportovat porty, a pustit si nginx, a dat si zaznamy dns do /etc/hosts ?
unifi.local
zimbra.local
nginx naucit proxy ze uniofi.local miri na localhost:port
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: honzahommer 18. 08. 2021, 10:30:41
Nebo nějak takto a obejdeš se bez záznamů v hosts...

Kód: [Vybrat]
server {
    listen 80;

    server_name ~^(?<proxy_port>.+)\.127\.0\.0\.1\.nip\.io$;

    location / {
        proxy_pass $scheme://127.0.0.1:$proxy_port;
    }
}

A pak stačí přistupovat na adresu <port>.127.0.0.1.nip.io.

Kde jsem rekl, ze DNS resi porty ?

psal jsem, pustit si lokalne nginx jako reverzni proxy, a smerovat

 server1.doma => localhost:8081
 server2.doma => localhost:8082
 server3.doma => localhost:8083

a do /etc/hosts dat
Kód: [Vybrat]
127.0.0.1 server1.doma
127.0.0.1 server2.doma
127.0.0.1 server3.doma
a do nginx tedy neco jako
Kód: [Vybrat]
  server {
    listen       80;
    server_name server1.doma
    location / {
      proxy_pass      http://127.0.0.1:8081;
    }
  }

Od kdy DNS řeší porty?

pokud na to pristupujes jen lokalne, tak co si jen exportovat porty, a pustit si nginx, a dat si zaznamy dns do /etc/hosts ?
unifi.local
zimbra.local
nginx naucit proxy ze uniofi.local miri na localhost:port
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: Ivan Brezina 19. 08. 2021, 16:00:11
Jeste jsem to nezkousel ale bylo mi doporuceno toto:
https://www.consul.io/docs/agent/options

Je to vlastne distribuovana key-value databaze s REST API plus DNS interface.
Bezici sluzby se zde mohou zaregistrovat pres REST API a ostatni je mohou najit pres DNS.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: czechsys 20. 08. 2021, 10:07:10
Tohle tema me taky docela zajima.

ohledne toho consulu - ostatni non-docker zarizeni je urcite out-of-box nenajdou pres dns. protoze ostatni non-docker zarizeni se budou dotazovat na dns, co maji v systemu. takze musi byt pak nekde propojovak na urovni dns sluzeb...

To nekdo nema realnou zkusenost s provozem kontejnerizace a jak se mapuji dns? Ne kazdy ma totiz k dispozici takova dns, umoznujici bezpecne zasahovani do obsahu zon.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: honzahommer 20. 08. 2021, 10:16:26
Já používal kdysi https://github.com/phensley/docker-dns (https://github.com/phensley/docker-dns).

Tohle tema me taky docela zajima.

ohledne toho consulu - ostatni non-docker zarizeni je urcite out-of-box nenajdou pres dns. protoze ostatni non-docker zarizeni se budou dotazovat na dns, co maji v systemu. takze musi byt pak nekde propojovak na urovni dns sluzeb...

To nekdo nema realnou zkusenost s provozem kontejnerizace a jak se mapuji dns? Ne kazdy ma totiz k dispozici takova dns, umoznujici bezpecne zasahovani do obsahu zon.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: czechsys 20. 08. 2021, 10:23:47
Já používal kdysi https://github.com/phensley/docker-dns (https://github.com/phensley/docker-dns).

Tohle tema me taky docela zajima.

ohledne toho consulu - ostatni non-docker zarizeni je urcite out-of-box nenajdou pres dns. protoze ostatni non-docker zarizeni se budou dotazovat na dns, co maji v systemu. takze musi byt pak nekde propojovak na urovni dns sluzeb...

To nekdo nema realnou zkusenost s provozem kontejnerizace a jak se mapuji dns? Ne kazdy ma totiz k dispozici takova dns, umoznujici bezpecne zasahovani do obsahu zon.

Tak ale tohle resi preklad dns v docker ekosystemu, neresi to preklad dns pro pristup ke kontejnerum z klientu, kteri nejsou soucasti docker ekosystemu.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: tr1l1ner 20. 08. 2021, 10:46:36
Na vice mistech resim dvemi zpusoby.

Starsi - jiz navrhovany nginx (balicek v OS + konfigurace), kdy je nastavene, ze nginx posloucha a podle toho, kam smeruje dotaz, tak presmeruje na localhost:port.

Kód: [Vybrat]
sluzba0.doma.lan => localhost:8080
sluzba1.doma.lan => localhost:8081
sluzba2.doma.lan => localhost:8082

Pouzivam vlastni RootCA a certifikaty mam pro kazdou sluzbu.

Novejsi je pro me Traefik v docker. Vyhodou je, ze je to vse v docker a nemusim vystavovat porty jednotlivych kontejneru na localhost, vystavim jen https Traefiku a ten posloucha.

Kód: [Vybrat]
sluzba0.doma.lan => Traefik => kontejner0
sluzba1.doma.lan => Traefik => kontejner1
sluzba2.doma.lan => Traefik => kontejner2

Opet pouzivam vlastni RootCA a certifikaty pro jednotlive sluzby jsou podhozene Traefiku, ktery je pak pouziva.

DNS resim na pfSense, kdy si dam jednotlive zaznamy do DNS resolveru.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: SB 20. 08. 2021, 13:46:16
K původnímu dotazu:
Místo výše uvedených rovnáků na ohýbáky je řešením v dockeru vytvořit pomocí „docker network“ vlastní vyhrazenou podsíť a veškeré kontejnery spouštět (pomocí volby --network) napojené na tuto síť, každý kontejner tak bude mít svoji adresu. Tuto síť je třeba buďto ohlašovat routeru pomocí ndppd nainstalovaného na hostiteli dockeru, nebo je třeba přidat na routeru route této podsítě na rozhraní dockeru. Výhodou je čisté řešení a funkčnost i na jiné věci než přiblblý web, TCP atd. Mapování portu kontejneru na společnou adresu dockeru pak není nutné. Použití je možné jak pro soukromé, tak veřejné adresy, IPv4 i IPv6.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: SB 20. 08. 2021, 13:48:57
Od kdy DNS řeší porty?

Od té doby, co umí záznam SRV. Bohužel zrovna lempli od webu na to kakají.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: Jose D 20. 08. 2021, 14:43:01
Místo výše uvedených rovnáků na ohýbáky je řešením v dockeru vytvořit pomocí „docker network“ vlastní vyhrazenou podsíť

je to tak.

.. záznam SRV ..

ď, to jsem nevěděl.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: Lukas Viktora 26. 08. 2021, 15:03:09
Přesně na takové řešení je SWAG
https://hub.docker.com/r/linuxserver/swag
Je to reverse nginx proxy s přednastavenými službami a vše je s SSL od LetsEncrypt.

Další zajimavé kontejnery jsou na https://fleet.linuxserver.io/
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: Johnny 26. 08. 2021, 16:37:54
Věřím, že původnímu tazateli bude libovolné z nabízených řešení nejen stačit, ale i vyhovovat.
Ten problém je ale trochu širší. Co když budu mít přísnější požadavky? Které řešení zbyde? Za mě:
Nejblíže tomuto stavu je podle mě ten traefik (https://doc.traefik.io/traefik/getting-started/quick-start/).
Pokud máte všude IPv6, tak existuje ještě možnost, že když každému kontejneru nastavujete fixní MAC adresu, tak dostává přidělenou stále stejnou IPv6 adresu (to jste věděli?), a s tím už se dá taky nějak pracovat, třeba skrz to DNS.
Pak ale chcete aby ty kontejnery mohly komunikovat i mezi sebou a zase hledáte rovnák...

Nějakou tu reversní proxy si může nainstalovat každý, ale to spoustu věcí neřeší.
I ten traefik to má nahnuté, naštěstí konfigurace, kterou nastavujete jako labely v dockeru při startu kontejneru, není povinná, a můžete ji mít v traefiku. Člověk by řekl, že si ty labely může jako metadata u běžícího kontejneru libovolně přidávat a měnit, což ale docker neumí (WTF?). Takže úplně všechno konfigurovat nelze.

A ideální řešení?
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: SB 26. 08. 2021, 18:12:37
Pane Johnny, co zas vymýšlíte? Vlastní dockerová síť umožňuje spustit kontejner pomocí parametru --ip nebo --ip6 s pevnou adresou, což můžete mít v jednom konfiguráku, když používáte Compose. Žádné čarování s MAC, instalace čehosi do kontejnerů a já nevím, co ještě, netřeba.
Přímé spojení mezi kontejnery jsem taky kdesi viděl (jakýmsi parametrem), ale nechce se mi to hledat, není to potřeba, když jsou adresy jednotlivých služeb stejně v DNS.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: Johnny 26. 08. 2021, 18:33:11
Pane Johnny, co zas vymýšlíte? Vlastní dockerová síť umožňuje spustit kontejner pomocí parametru --ip nebo --ip6 s pevnou adresou, což můžete mít v jednom konfiguráku, když používáte Compose. Žádné čarování s MAC, instalace čehosi do kontejnerů a já nevím, co ještě, netřeba.
Přímé spojení mezi kontejnery jsem taky kdesi viděl (jakýmsi parametrem), ale nechce se mi to hledat, není to potřeba, když jsou adresy jednotlivých služeb stejně v DNS.
Ale to ano, pokud dám každému kontejneru pevnou IP adresu, pak mi stačí /etc/hosts. Jenže to není situace, kterou budu mít na produkci.
Komunikace mezi kontejnery je možná pouze pro hostname, který tam vložím. Pokud se mají najít i podle externí domény, tak se jen tak neuvidí.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: Johnny 26. 08. 2021, 18:36:25
Kdyby sám docker uměl aktualizovat nějaké externí DNS přes nsupdate, a třeba zařídit i ty SRV záznamy ke každé službě, jo, to by byla jiná.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: SB 30. 08. 2021, 09:22:13
Kdyby sám docker uměl aktualizovat nějaké externí DNS přes nsupdate, a třeba zařídit i ty SRV záznamy ke každé službě, jo, to by byla jiná.

A nemohl by to řešit zvláštní proces, který bude ty kontejnery spouštět a doplňovat odpovídající záznamy do DNS?
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: Jose D 31. 08. 2021, 12:31:22
Tuto síť je třeba buďto ohlašovat routeru pomocí ndppd nainstalovaného na hostiteli dockeru, nebo je třeba přidat na routeru route této podsítě na rozhraní dockeru. Výhodou je čisté řešení a funkčnost i na jiné věci než přiblblý web, TCP atd. Mapování portu kontejneru na společnou adresu dockeru pak není nutné. Použití je možné jak pro soukromé, tak veřejné adresy, IPv4 i IPv6.

(nejsem Op)
jasně, takhle to mám. Existuje s tímto designem nějaký triviální způsob, jak dynamicky mapovat hostnames na IPs kontejnerů?

( obecně mě to asi napadá, použít nějaký DNS s API a před startem kontejneru si tam nějakým prologem vzít A/AAA/SRV záznam na svoji IP. )

( A jsem si vědom toho, že v rámci docker network se resolvují názvy kontejnerů na jejich IPs. Ale ten kontejner musí běžet. A je to jen na lokálním boxu )
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: czechsys 31. 08. 2021, 13:19:19
Tuto síť je třeba buďto ohlašovat routeru pomocí ndppd nainstalovaného na hostiteli dockeru, nebo je třeba přidat na routeru route této podsítě na rozhraní dockeru. Výhodou je čisté řešení a funkčnost i na jiné věci než přiblblý web, TCP atd. Mapování portu kontejneru na společnou adresu dockeru pak není nutné. Použití je možné jak pro soukromé, tak veřejné adresy, IPv4 i IPv6.

(nejsem Op)
jasně, takhle to mám. Existuje s tímto designem nějaký triviální způsob, jak dynamicky mapovat hostnames na IPs kontejnerů?

( obecně mě to asi napadá, použít nějaký DNS s API a před startem kontejneru si tam nějakým prologem vzít A/AAA/SRV záznam na svoji IP. )

( A jsem si vědom toho, že v rámci docker network se resolvují názvy kontejnerů na jejich IPs. Ale ten kontejner musí běžet. A je to jen na lokálním boxu )

Nepruzna reseni:
wildcard & subdomeny, smerujici na urcite docker ip (kde bezi dns sluzba, standalone ci cluster) v autoritativnim dns, to same v rekurzivnich dns serverch

Pak je tu neco jako https://hub.docker.com/r/bitnami/external-dns/

Obecne - bez jakkehokoliv dns api (rdnss, proste cokoli) nic fungovat nebude. A staticka reseni jsou dost omezujici.
Název: Re:Lokální DNS server pro služby v dockeru
Přispěvatel: Johnny 31. 08. 2021, 18:54:01
Kdyby sám docker uměl aktualizovat nějaké externí DNS přes nsupdate, a třeba zařídit i ty SRV záznamy ke každé službě, jo, to by byla jiná.

A nemohl by to řešit zvláštní proces, který bude ty kontejnery spouštět a doplňovat odpovídající záznamy do DNS?
Tohle by nějaký takový proces pochopitelně řešit mohl. A dokonce by to nebyla ani taková magie. Docker API je přístupné jak přes unix socket, tak i přes HTTP. O ničem stávajícím ale právě nevím, všechno co jsem našel vždycky umí jenom půlku toho, co by bylo potřeba, bez rovnáku.
Např. výše zmíněný external-dns umí pouze k8s API, ne Docker, a u podporovaných DNS providerů je krásně vidět, jak si to každý provider dělá po svém a má vlastní API, jako by k tomu neexistovalo RFC (2136), to umí, ale bez SRV. Kód k tomu má konkrétně cca 400 řádků v Go.