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.

RepairWho owns itWhat it costs
Renumber the container networkYouRecreates the network, restarts services, invalidates literal addresses in configs and scripts
Exclude your range from the tunnelNetwork teamChanges what every laptop sees, needs a change request and a client profile update
Reach the service through a published portYou and the clientOne 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:

  1. ip route get mill-host, bl-użu tal-indirizz reali tal-kontenitur.
  2. Talba minn kontenitur ieħor, biex tipprova li s-servizz innifsu hu tajjeb.
  3. curl -sv http://127.0.0.1:8080/ mill-klijent bil-mina mixgħula, imbagħad traceroute -n lejn l-indirizz tal-kontenitur minn magna fuq il-LAN.
  4. sysctl net.ipv4.conf.all.rp_filter jekk 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ċċ.

Artikli relatati