Zdieľanie siete VPN kontajnera: čo sa stane s DNS
Zdieľaný menný priestor dá vašej aplikácii rozhrania tunela, nie zlúčený resolver. Testujte zvnútra aplikácie a používajte usporiadanie DNS, ktoré runtime podporuje.
Zdieľanie sieťového menného priestoru VPN kontajnera dá vašej aplikácii rozhrania a trasy tunela. Ono jej nedá resolver tunela, ani zlúčenú kópiu čohokoľvek iného na hostiteľovi. Táto medzera vytvára veľmi konkrétnu poruchu: verejné mená sa prekladajú, interné nie, a aplikácia, ktorá zlyhá, vyzerá, akoby používala nesprávny DNS server, pretože ho naozaj používa. Oprava je zvyčajne menšia, než naznačuje diagnóza.
Krok 1: Testujte z aplikácie, nie z hostiteľa
Spustite vyhľadávanie vnútri kontajnera, ktorý má problém, nie na hostiteľovi a nie v prehliadači. docker exec app-container getent hosts db.internal odpovedá na jedinú dôležitú otázku: čo vracia resolver tohto procesu.
Ak hostiteľ preloží meno a kontajner nie, našli ste poruchu. Všetko ďalej je výber podporovaného spôsobu opravy.
Krok 2: Prečítajte si podporovaný model runtime
Dokumentácia sietí Dockeru zaznamenáva obmedzenia pre prepínače DNS pri kontajneroch, ktoré zdieľajú sieťový režim iného kontajnera. V Compose network_mode: service:vpn viaže aplikáciu na menný priestor VPN kontajnera a pri jednotlivých službách dns sa nastavenia nesprávajú tak ako pri bežnej službe. Riešenie, ktoré dostanete, je to, ktoré má zdieľaný menný priestor.
Používateľom definované mostové siete tiež používajú vstavaný DNS Dockeru inak ako predvolený most. Preto dns klauzula skopírovaná z funkčného príkladu mosta nemusí v zdieľanom zásobníku urobiť vôbec nič. Pred skopírovaním klauzuly skontrolujte usporiadanie.
Adresa spätnej slučky vždy odkazuje na príslušný sieťový kontext. Vnútri zdieľaného menného priestoru 127.0.0.1 nie je resolverom hostiteľa.
Krok 3: Sledujte požiadavku k jej príjemcovi
Prečítajte si konfiguráciu resolvera aplikácie a potom akýkoľvek šifrovaný DNS špecifický pre aplikáciu, ktorý prináša, pretože aplikácia s vlastným resolverom ignoruje súbor, ktorý ste upravili. Potom skontrolujte, či je zvolený resolver dostupný v rámci trás a politiky firewallu VPN. Adresa resolvera na druhej strane tunela je zbytočná, ak k nej menný priestor nemá trasu. Pred úpravou akéhokoľvek súboru príjemcu potvrďte.
Stránka na kontrolu IP v prehliadači vám nepovie, kam odišli požiadavky na mená. Povie vám, kam odišlo jedno HTTP spojenie.
Krok 4: Opravte dve triedy zlyhaní rôzne
Ak zlyhávajú mená služieb, zatiaľ čo verejné mená fungujú, problém je v objavovaní služieb vnútri siete kontajnerov, nie v zozname verejných resolverov. Zmena každej verejnej adresy DNS nevytvorí záznamy, ktoré mechanizmus objavovania siete nikdy nedostal za úlohu vytvoriť.
Ak zlyhávajú obe triedy, začnite dostupnosťou resolvera. Ak zlyháva len jedna, začnite mechanizmom objavovania. Obe majú rôznych vlastníkov, a preto jedna oprava nikdy nepokryje obe.
Krok 5: Po opätovnom vytvorení otestujte znova
Zmeňte konfiguráciu podporovaným mechanizmom runtime a potom znova vytvorte kontajnery namiesto úpravy súborov v bežiacom. Otestujte nové súkromné meno, nové verejné meno a požiadavku aplikácie, ktorá nasleduje po vyhľadávaní. Úprava /etc/resolv.conf vnútri kontajnera zmizne pri opätovnom vytvorení a presvedčí vás, že oprava fungovala, keď nefungovala.
Poznamenajte si vlastníka resolvera a očakávaný menný priestor vedľa definície zdieľanej siete. Ďalší človek bude potrebovať oboje.