Docker: ee Container duerch eng VPN leeden an en aneren direkt loossen
Gitt dem Tunnel säin eegene Container, loosst nëmmen déi Servicer, déi en brauchen, dee Nummraum deelen, a rechent dann mat deem, wat dem Propriétaire follegt: Porten, localhost, DNS.
Een Host, zwee Workloaden an eng Ufuerderung, déi se trennt: en Download-Client, dee muss aus enger kommerzieller VPN erauskommen, an eng Verwaltungsinterface, déi muss weider d'Verbindung vum Host benotzen. De VPN-Client um Host z'installéieren hält d'Ufuerderung direkt net an, well dann déi zwee Workloaden een eenzegen Ausgang deelen. D'Muster, dat wierklech funktionéiert, ass den Tunnel an säin eegene Container ze plënneren an nëmmen déi Workloaden, déi en brauchen, dem Container säin Netzwierk-Nummraum bäitrieden ze loossen. Alles anescht hält de gewéinlechen Docker-Wee, an d'Detailer, déi duerno kommen, si Konsequenze vun deem, wien den Nummraum besëtzt.
Firwat en gedeelte Nummraum d'Regele ännert
En Container, deen engem aneren säin Nummraum bäitriede, kritt keen eegene Netzwierk-Stack. Hien gesäit déi selwecht Interfaces, déiselwecht Routing-Tabell an deeselwechte Loopback wéi de Container, deem en bäigetratt ass, an genau dofir ass d'Muster nëtzlech: de Workload léist op a verbënnt sech normal, an den Tunnel drënner fänkt den Traffic op, ouni datt d'Applikatioun et weess. De Präis ass, datt all netzwierkarteg Astellung elo een eenzegen Propriétaire huet, an de Container, deen bäitrëtt, ass et net.
Dës Proprietärsregel beäntwert déi meescht Konfiguratiounsfroen, ier se gestallt ginn. Wann eng Astellung am Netzwierk-Stack lieft, gehéiert se zum Sidecar. Wann se de Prozess beschreift, bleift se beim Workload.
De Loopback ass deen Deel, deen d'Leit iwwerrascht. Bannent dem Container, deen bäitrëtt, gëtt localhost op de Loopback vum Sidecar opgeléist, net op en eegene private, sou datt e Service, deen sech un 127.0.0.1 bënnt an Isolatioun erwaart, elo déi Adress mam Tunnelcontainer deelt.
Publizéiert d'Porten op dem Container, deen den Nummraum besëtzt
D'Port-Mapping gehéiert dem Propriétaire vum Nummraum, och wann de lauschterende Prozess am aneren Container leeft. Deklaréiert d'Mapping um Sidecar, a loosst de Workload seng eege Prozesskonfiguratioun onberüürt. Eng Mapping um Service, deen bäitrëtt, kann net a Kraaft trieden, ob den Engine se elo verwërft oder se je no Start vum Container stëll ignoréiert, an dofir verschwënnt eng Interface, déi virun engem Abléck erreechbar war, soubal d'Muster ugewannt gëtt.
services:
gluetun:
image: qmcgaw/gluetun
cap_add: [NET_ADMIN]
ports: ["8080:8080"]
client-vpn:
image: example/client
network_mode: "service:gluetun"
client-direct:
image: example/client
ports: ["8081:8080"]Liest dëse Block als dräi Entscheidungen an net als dräi Servicer. De Sidecar besëtzt den Tunnel an de publizéierte Port; de Client, deen bäitrëtt, deklaréiert iwwerhaapt keen Netzwierk; de direkte Client hält seng eegen Mapping am Standardnetzwierk. D'Fäegkeet NET_ADMIN ass et, déi dem Sidecar erlaabt, Interfaces ze schafen an Route z'änneren, an dat ass de Grond, firwat dësen Container méi Privilegien brauch wéi d'Workloaden, déi en zerwéiert.
De Service, deen direkt bleift, behält säin eegent Netzwierk
De Workload, deen net duerch den Tunnel däerf, behält d'Standardbréck oder en eegent benotzerdefinéiert Netzwierk, mat sengem eegene publizéierte Port a sengem eegenen Ausgang. Et ass verlockend, en un den Netzwierk vum Sidecar ze hänken, sou datt déi zwee Containere kënnen iwwer den Numm schwätzen, awer deen eenzege Schrëtt plënnert säin Traffic stëll an den Tunnel. Wann se mussen openeen treffen, baut en separat benotzerdefinéiert Netzwierk, hängt béid drop an a loosst de Sidecar den eenzege Wee no baussen.
Halt déi zwou Froen getrennt: wéi eng Containere kënnen openeen treffen, a wéien geet wou eraus. Si zesummenzemaachen ass dee geleefegste Wee, wéi dësen Design erëm eng VPN fir de ganzen Host gëtt.
Eng Fehlermatrix fir déi éischt Stonn
Déi meescht éischt Versich schléissen op eng vun véier Aarten éischter, an all huet eng aner Ursaach. Iwwerpréift se an dëser Reihenfolge, well déi éischt zwou bal all Rapport erklären.
| Symptom | Likely cause |
|---|---|
| Web UI unreachable after the change | Port mapping declared on the joining container instead of the sidecar |
| Both containers show the provider's exit address | The direct service was attached to the sidecar network |
| Internal names stop resolving | Resolver settings live on the host, not in the shared namespace |
| Health check fails but the app works | The check probes localhost, which now means the sidecar |
Déi véiert Zeil ass déi, déi d'Leit fälschlecherweis als Applikatiounsfehler diagnostizéieren. Eng Probe, déi géint de Workload säin eigenen Loopback geschriwwe gouf, test elo den Tunnelcontainer, also entweder schléit se fehlt oder mellt en ganz falsche Service.
Wann een eenzegen Hostnumm den Tunnel brauch
Heiansdo ass en deelen Tunnel ze vill: een internen Numm muss duerch eng Firmen-VPN, während e lokale Socket oder eng Displayverbindung weider funktionéiert. En deelen Tunnel bannent dem Container brécht dee Wee an alles, wat un den Host adresséiert ass, dofir route just de Prefix, deen en brauch. Eng Split-Routing-Wrapper ronderëm de Client mécht dat, schéckt den genannten Host duerch den Tunnel a léisst déi viregt Route fir alles anescht onberüürt.
Wielt dëst, wann dir nëmmen ee Service musst erreechen an net versicht, den ganzen Traffic vum Container ze plënneren. Et ass en anert Instrument wéi de Sidecar an et beäntwert eng aner Fro.
Verifizéiert, a maacht et dann neistartbestänneg
Frot all Container, vun wéi enger Adress en ze komme schéngt. Dee vum Tunnel soll d'Adress vum Provider ausdrécken an deen direkten den Ausgang vum Host. Identesch Äntwerten heescht, datt deen direkte Service den falschen Nummraum geierft huet oder datt eng VPN um Hostniveau nach ëmmer alles fänkt, an déi zwou Korrekture si verschidden. Fëllt d'Kontroll no all compose-Ännerung nach eng Kéier aus, well een kopéierte Serviceblock genüügt, fir de Problem erëm anzeféieren.
Dräi Saachen tendéieren méi spéit ze briechen. DNS follegt dem Propriétaire vum Nummraum, dofir gehéieren d'Astellunge vum Resolver an der Sichdomän zum Sidecar an net zum Host. Eng VPN mat Portweiderleetung ännert hire Lauschport bei der Reconnectioun, dofir musse de weidergeleet Port vum Provider an de Lauschport op der Containersäit zréck an d'Clientkonfiguratioun oder an d'Port-Mapping geschriwwe ginn, meeschtens duerch e klengen Updater, deen d'API vum Provider liest. An all Probe, déi géint localhost geschriwwe gouf, freet elo den Tunnelcontainer an net de Workload.
Schreift d'Muster op, inklusiv wéien Container den Nummraum besëtzt a wéi eng Porten derzou gehéieren. Déi nächst Persoun wäert e Service derbäisetzen, de falsche Block kopéieren an dee éischte Fehler aus dësem Artikel reproduzéieren.