Lokální DNS server pro služby v dockeru

SB

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Lokální DNS server pro služby v dockeru
« Odpověď #15 kdy: 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í.


Jose D

  • *****
  • 850
    • Zobrazit profil
Re:Lokální DNS server pro služby v dockeru
« Odpověď #16 kdy: 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.

Re:Lokální DNS server pro služby v dockeru
« Odpověď #17 kdy: 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/

Re:Lokální DNS server pro služby v dockeru
« Odpověď #18 kdy: 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ě:
  • nechci ani měnit konfiguraci stávajících běžících docker-kontejnerů, a to ani těch budoucích
  • nechci do kontejnerů instalovat kvůli tomu žádný dodatečný software
  • kontejner nemá vůbec znát který router/proxy na něj posílá požadavky/load balancing
  • kontejner nemá znát ani doménu na které poběží (hostname je pro identifikaci ok)
  • vše výše uvedené chci mít v samostatné konfiguraci na tom routeru/proxy/LB...
  • kontejnerům se mění IP adresa, takže nepřipadá v úvahu ji někam do té konfigurace zapisovat
  • jsem ochotný nastavit DNS, ale jen jednorázově, a tedy budou záznamy směrovat spíš na ten router, ne na jednotlivé kontejnery
  • chci instalovat max. jednu službu, tedy NE agenty do kontejneru + proxy/router + bind/dnsmasq + dynDNS, ... to můžu mít rovnou celé k0-8s
Nejblíže tomuto stavu je podle mě ten traefik.
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í?
  • služba se sama aktualizuje podle toho, co v dockeru běží - traefik
  • uživatel dodá konfiguraci zvlášť - traefik (skoro)
  • vše potřebné už běží, nic dalšího se neinstaluje - kubernetes

SB

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Lokální DNS server pro služby v dockeru
« Odpověď #19 kdy: 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.


Re:Lokální DNS server pro služby v dockeru
« Odpověď #20 kdy: 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í.

Re:Lokální DNS server pro služby v dockeru
« Odpověď #21 kdy: 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á.

SB

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Lokální DNS server pro služby v dockeru
« Odpověď #22 kdy: 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?

Jose D

  • *****
  • 850
    • Zobrazit profil
Re:Lokální DNS server pro služby v dockeru
« Odpověď #23 kdy: 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 )

Re:Lokální DNS server pro služby v dockeru
« Odpověď #24 kdy: 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.

Re:Lokální DNS server pro služby v dockeru
« Odpověď #25 kdy: 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.