Kontenitur Docker mhux aċċessibbli fuq il-VPN? Qabbel is-subnets
Docker jagħti subnet li l-VPN ukoll tippretendi. Qabbel iż-żewġ pjanijiet ta’ indirizzi, imbagħad agħżel tiswija li tibqa’ taħdem wara qabda mill-ġdid.
Il-kontenituri jwieġbu fuq il-LAN tal-uffiċċju, imbagħad jieqfu jwieġbu fil-mument li jikkonnettja l-VPN tal-kumpanija. Xejn fil-kontenitur ma nbidel: l-ebda restart, l-ebda aġġornament tal-immaġni, l-ebda bidla fil-konfigurazzjoni. Li nbidel hi t-tabella tal-irrotar tal-host, fejn rotta li żiedet il-mina issa tkopri l-indirizz li ta Docker. Qabel ma tibdel subnet jew titlob esklużjoni mill-VPN, qiegħed iż-żewġ pjanijiet ta’ indirizzi ħdejn xulxin, għax it-tiswijiet jieħdu ħin ferm differenti.
Aqra r-rotta qabel ma tbiddel il-konfigurazzjoni
Ibda min-netwerk li Docker effettivament bena. Il-blokk IPAM hu l-pjan tal-indirizzi, u s-subnet hi l-linja li timporta:
docker network inspect project_default --format '{{json .IPAM.Config}}'
# [{"Subnet":"172.18.0.0/16","Gateway":"172.18.0.1"}]Compose talloka /16 għal kull proġett ġdid b’mod awtomatiku, allura żewġ servizzi jistgħu joqogħdu f’firxa ta’ 65,536 indirizz. Din il-wisa’ hi r-raġuni li l-ostakli huma komuni: /16 magħżul bl-addoċċ hu kbir biżżejjed biex jibilgħu sit li tilħaq mill-mina, u ħadd ma jintebaħ sakemm tinħoloq il-mina.
Imbagħad qabbel l-għażla tar-rotta għal indirizz wieħed tal-kontenitur, darba bil-mina mitfija u darba mixgħula:
ip route get 172.18.0.7
# 172.18.0.7 dev br-3f2a9c src 172.18.0.1Żewġ forom ta’ tweġiba jwasslu f’postijiet differenti. Jekk l-output isemmi tun0, wg0 jew apparat ieħor tal-mina, prefiss tal-VPN hu mill-inqas speċifiku daqs ir-rotta tal-pont u il-pakkett qatt ma jasal sal-kontenitur. Jekk għadu jsemmi l-pont, il-host jista’ jasal sal-kontenitur, u l-ħsara tiegħek hi filtrazzjoni, DNS, jew mogħdija lura li tfalli f’direzzjoni waħda biss.
Għaliex ħabta ta’ /16 hija faċli li sseħħ
Docker jiġbed in-netwerks tal-pont mill-pools privati, u l-pool awtomatiku joħroġ mill-blokk 172.16.0.0/12 f’porzjonijiet ta’ /16. In-netwerks korporattivi spiss jużaw l-istess spazju privat, u VPN ta’ aċċess mill-bogħod timbotta dawk il-prefissi lejn kull klijent li jikkonnettja. Meta ż-żewġ naħat jaħsbu li għandhom 172.18.0.0/16, tabella waħda tal-irrotar iżżomm żewġ talbiet konfliġġenti.
It-tul tal-prefiss jiddeċiedi r-rebbieħ, mhux l-ordni tar-rotot. Mina li timbotta 10.0.0.0/8 ma tegħlebx rotta tal-pont 172.18.0.0/16, għax /8 hi inqas speċifika. Mina li timbotta 172.18.0.0/16, jew 172.18.5.0/24 ġo fiha, tegħlebha. Għalhekk laptop wieħed jaħdem fuq in-netwerk tal-uffiċċju u jfalli fuq Wi-Fi tal-lukanda bl-istess VPN: il-klijent jirċievi prefissi differenti.
L-istess tabella tmexxi d-direzzjoni l-oħra. Kontenitur li jeħtieġ host intern fuq 10.8.4.20 jibgħat il-pakkett lill-gateway tal-pont tiegħu, u mbagħad il-host jirrotah fil-mina. Dik il-mogħdija normalment taħdem għax il-host iwettaq in-NAT, iżda tfalli meta n-naħa korporattiva taċċetta biss l-indirizz VPN tal-laptop, jew meta l-filtrazzjoni tal-mogħdija lura tarmi t-tweġiba asimmetrika.
Qabbel it-tliet tiswijiet
Hemm biss tliet toroq ’il barra, u jvarjaw f’min irid japprovahom u x’jinkiser waqt li tkun qed tapplika waħda.
| Repair | Who owns it | What it costs |
|---|---|---|
| Renumber the container network | You | Recreates the network, restarts services, invalidates literal addresses in configs and scripts |
| Exclude your range from the tunnel | Network team | Changes what every laptop sees, needs a change request and a client profile update |
| Reach the service through a published port | You and the client | One port only, no direct container-to-container routing across the tunnel |
L-għadd mill-ġdid hu l-unika tiswija li tista’ tlesti mingħajr biljett, u għalhekk ħafna kitbiet jieqfu hemm. Hu irħis fuq proġett żagħżugħ u jsir għali ladarba għodda tal-migrazzjoni jew string tal-konnessjoni maħżuna tipponta lejn indirizz litterali. Għodd dawk ir-referenzi qabel ma teditja l-YAML, mhux wara.
Esklużjoni mill-mina hi l-iżjed tweġiba nadifa meta l-ostaklu jkun f’firxa li l-kumpanija tiegħek tassew tippossjedi. Hi wkoll l-aktar bil-mod, u hi bla użu għal kuntrattur li ma jistax ibiddel il-profil tal-klijent. Port ippubblikat jew prokji inversi żgħir jevita l-argument: il-klijent jitkellem ma’ indirizz li l-mina diġà tirrota sew, u jrid ikun aċċessibbli biss dak il-port.
Iffissa firxa apposta
Għal proġett wieħed, iddikjara s-subnet fil-fajl compose biex il-proġett jieqaf jiġbed mill-pool kondiviż:
networks:
default:
ipam:
config:
- subnet: 10.201.7.0/24Ħu dik il-firxa minn reġistru li żżomm it-tim tiegħek, mhux minn eżempju li sibt waqt it-tiftix. Iċċekkjaha mal-prefissi li timbotta l-VPN, mal-LANs tad-dar li n-nies jaħdmu minnhom, u man-netwerks l-oħra tal-kontenituri fuq l-istess host. Imbagħad ippjana l-ħolqien mill-ġdid, għax netwerk eżistenti jżomm is-subnet l-antik tiegħu: docker compose down, imbagħad up -d. docker network rm jirrifjuta waqt li jkunu mehmuża endpoints, u kull entrata ipv4_address fil-fajl trid taqa’ fil-firxa l-ġdida.
Għan-netwerks li Docker joħloq waħdu, issettja pool tad-daemon f’/etc/docker/daemon.json:
{
"default-address-pools": [
{ "base": "10.201.0.0/16", "size": 24 },
{ "base": "10.202.0.0/16", "size": 24 }
]
}Il-pool japplika għan-netwerks maħluqa wara li jibda mill-ġdid id-daemon, u l-pontijiet li diġà jeżistu jżommu l-indirizzi tagħhom. Dan hu konvenjenti u faċli jintesa, allura qis proġett antik bħala għadu f’ostaklu sakemm xi ħadd jerġa’ joħloq in-netwerk tiegħu. Id-dokumentazzjoni tan-netwerking tal-magna ta’ Docker tiddeskrivi r-regoli tal-allokazzjoni jekk ikollok bżonn tiddefendi l-pool fir-reviżjoni.
Il-pont ta’ Linux u Docker Desktop ifallu b’mod differenti
Fuq host Linux, il-kontenituri joqogħdu fuq pontijiet fin-namespace tal-host. Tabella waħda tiddeċiedi kollox, allura l-paragun ta’ fuq hu l-istorja kollha: aqra r-rotta tal-pont, aqra r-rotta tal-mina, u ara liema tirbaħ għal indirizz reali tal-kontenitur.
Docker Desktop iqiegħed il-kontenituri wara VM b’NAT tiegħu stess. Il-host m’għandux rotta lejn l-indirizz tal-kontenitur xejn; jasal għas-servizz permezz ta’ port ippubblikat, normalment marbut ma’ 127.0.0.1. Għalhekk klijent VPN jista’ jkisser is-servizz mingħajr ebda ostaklu ta’ subnet, jew billi jinstalla rotta għall-firxa interna tal-VM jew billi jimblokka traffiku loopback waqt li l-mina tkun konnessa. Jekk ip route get fuq il-host jirrapporta li m’hemm l-ebda rotta għall-indirizz tal-kontenitur, dan hu mistenni u mhux il-bug.
Il-konsegwenza prattika hi fejn tħares l-ewwel. Fuq Linux, ibda mit-tabella tal-irrotar. Fuq Desktop, ibda mill-port ippubblikat u mir-regoli tal-firewall tal-klijent VPN, imbagħad iċċekkja jekk is-subnet intern tal-VM jikkonfliġġix ma’ xi ħaġa li timbotta l-mina.
Ivverifika bil-mina mixgħula
Erġa’ kkonnettja l-VPN darbtejn qabel ma tgħid li nġibdet, għax profil li jimbotta rotot meta jikkonnettja u jiġborthom lura meta jaqta’ jista’ jidher tajjeb wara l-ewwel prova. Imbagħad wettaq il-verifiki li fil-fatt iwettaq il-klijent:
ip route getmill-host, bl-użu tal-indirizz reali tal-kontenitur.- Talba minn kontenitur ieħor, biex tipprova li s-servizz innifsu hu tajjeb.
curl -sv http://127.0.0.1:8080/mill-klijent bil-mina mixgħula, imbagħadtraceroute -nlejn l-indirizz tal-kontenitur minn magna fuq il-LAN.sysctl net.ipv4.conf.all.rp_filterjekk it-talba tasal sal-host imma t-tweġiba tispiċċa.
Fl-aħħar, ikteb il-firxa magħżula fl-istess reġistru li użajt biex tagħżilha, mad-data u mal-proġett li jippossjediha. L-ostaklu li jmiss ġej minn proġett li ħadd ma ddokumenta, u l-unika difiża hi li l-firxa kienet riżervata apposta u mhux magħżula bl-addoċċ.