Docker: llwybro un cynhwysydd drwy VPN, a chadw un arall yn uniongyrchol
Rhowch gynhwysydd ei hun i'r twnnel, gadewch i'r gwasanaethau sydd ei angen yn unig rannu'r gofod enwau hwnnw, yna cyfrifwch am yr hyn sy'n dilyn y perchennog: porthladdoedd, localhost, DNS.
Un gwesteiwr, dau lwyth gwaith, a gofyniad sy'n eu gwahanu: cleient lawrlwytho sy'n rhaid iddo ddod allan drwy VPN masnachol, a rhyngwyneb rheoli sy'n rhaid iddo barhau i ddefnyddio cysylltiad y gwesteiwr. Mae gosod y cleient VPN ar y gwesteiwr yn methu'r gofyniad ar unwaith, oherwydd yna mae'r ddau lwyth gwaith yn rhannu un allanfa. Y patrwm sy'n gweithio mewn gwirionedd yw symud y twnnel i'w gynhwysydd ei hun a gadael i'r llwythi gwaith sydd ei angen yn unig ymuno â gofod enwau rhwydwaith y cynhwysydd hwnnw. Mae popeth arall yn cadw llwybr arferol Docker, ac mae'r manylion sy'n dilyn yn ganlyniadau i bwy sy'n berchen ar y gofod enwau.
Pam mae gofod enwau a rennir yn newid y rheolau
Nid yw cynhwysydd sy'n ymuno â gofod enwau un arall yn cael ei stac rhwydwaith ei hun. Mae'n gweld yr un rhyngwynebau, yr un tabl llwybro a'r un loopback â'r cynhwysydd ymunodd ag ef, a dyna'n union pam mae'r patrwm yn ddefnyddiol: mae'r llwyth gwaith yn datrys ac yn cysylltu'n normal, ac mae'r twnnel oddi tano yn dal y traffig heb i'r rhaglen wybod. Y gost yw bod gan bob gosodiad rhwydwaith un perchennog bellach, a'r cynhwysydd sy'n ymuno yw'r perchennog hwnnw.
Mae'r rheol berchnogaeth hon yn ateb y rhan fwyaf o gwestiynau ffurfweddu cyn iddynt gael eu gofyn. Os yw gosodiad yn byw yn y stac rhwydwaith, mae'n perthyn i'r cynhwysydd ochr. Os yw'n disgrifio'r broses, mae'n aros gyda'r llwyth gwaith.
Loopback yw'r rhan sy'n synnu pobl. Y tu mewn i'r cynhwysydd sy'n ymuno, mae localhost yn datrys i loopback y cynhwysydd ochr, nid i un preifat ei hun, felly mae gwasanaeth sy'n rhwymo i 127.0.0.1 gan ddisgwyl arwahanrwydd bellach yn rhannu'r cyfeiriad hwnnw â chynhwysydd y twnnel.
Cyhoeddwch borthladdoedd ar y cynhwysydd sy'n berchen ar y gofod enwau
Mae mapio porthladdoedd yn perthyn i berchennog y gofod enwau hyd yn oed pan fydd y broses sy'n gwrando yn rhedeg yn y cynhwysydd arall. Datganwch y mapio ar y cynhwysydd ochr, a gadewch i'r llwyth gwaith gadw ei ffurfweddiad proses ei hun yn gyfan. Ni all mapio ar y gwasanaeth sy'n ymuno ddod i rym, p'un a yw'r peiriant yn ei wrthod neu'n ei anwybyddu'n dawel yn dibynnu ar sut mae'r cynhwysydd yn cael ei gychwyn, a dyna pam mae rhyngwyneb a oedd yn gyrraeddadwy funud yn ôl yn diflannu unwaith y bydd y patrwm yn cael ei gymhwyso.
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"]Darllenwch y bloc hwnnw fel tri phenderfyniad yn hytrach na thri gwasanaeth. Mae'r cynhwysydd ochr yn berchen ar y twnnel a'r porthladd a gyhoeddwyd; nid yw'r cleient sy'n ymuno yn datgan unrhyw rwydwaith o gwbl; mae'r cleient uniongyrchol yn cadw mapio ei hun ar y rhwydwaith diofyn. Y gallu NET_ADMIN yw'r hyn sy'n caniatáu i'r cynhwysydd ochr greu rhyngwynebau a newid llwybrau, a dyna'r rheswm pam mae angen mwy o fraint ar y cynhwysydd hwn na'r llwythi gwaith y mae'n eu gwasanaethu.
Mae'r gwasanaeth sy'n aros yn uniongyrchol yn cadw ei rwydwaith ei hun
Mae'r llwyth gwaith na ddylai fynd drwy'r twnnel yn cadw'r bont ddiofyn neu rwydwaith a ddiffiniwyd gan y defnyddiwr ei hun, gyda'i borthladd cyhoeddedig ei hun a'i allanfa ei hun. Mae'n demtasiwn ei atodi i rwydwaith y cynhwysydd ochr fel y gall y ddau gynhwysydd siarad wrth eu henw, ond mae'r un cam hwnnw'n symud ei draffig i'r twnnel yn dawel. Os oes angen iddynt gyrraedd ei gilydd, adeiladwch rwydwaith ar wahân a ddiffiniwyd gan y defnyddiwr, atodwch y ddau iddo, a gadewch y cynhwysydd ochr yn unig lwybr allan.
Cadwch y ddau gwestiwn ar wahân: pa gynwysyddion all gyrraedd ei gilydd, a pha un sy'n mynd allan o ble. Eu huno yw'r ffordd fwyaf cyffredin i'r dyluniad hwn droi'n ôl yn VPN ar draws y gwesteiwr cyfan.
Matrics methiant ar gyfer yr awr gyntaf
Mae'r rhan fwyaf o'r ymgais gyntaf yn methu mewn un o bedair ffordd, ac mae gan bob un achos gwahanol. Gwiriwch nhw yn y drefn hon, oherwydd mae'r ddau gyntaf yn egluro bron bob adroddiad.
| 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 |
Y pedwerydd rhes yw'r un y mae pobl yn ei gamddiagnosio fel nam rhaglen. Mae archwiliad a ysgrifennwyd yn erbyn loopback y llwyth gwaith ei hun bellach yn profi cynhwysydd y twnnel, felly naill ai mae'n methu neu'n adrodd am y gwasanaeth cwbl anghywir.
Pan fydd un enw gwesteiwr angen y twnnel
Weithiau mae twnnel llawn yn ormod: rhaid i un enw mewnol fynd drwy VPN corfforaethol tra bo soced lleol neu gysylltiad arddangos yn parhau i weithio. Mae twnnel llawn y tu mewn i'r cynhwysydd yn torri'r llwybr hwnnw ac unrhyw beth a gyfeiriwyd at y gwesteiwr, felly llwybrwch yn unig y rhagddodiad sydd ei angen. Mae troellwr llwybro hollt o amgylch y cleient yn gwneud hynny, gan anfon y gwesteiwr a enwyd drwy'r twnnel a gadael y llwybr blaenorol yn gyfan ar gyfer popeth arall.
Dewiswch hyn pan mai dim ond un gwasanaeth sydd angen ei gyrraedd ac nad ydych yn ceisio symud holl draffig y cynhwysydd. Mae'n offeryn gwahanol i'r cynhwysydd ochr ac mae'n ateb cwestiwn gwahanol.
Gwiriwch, yna gwnewch iddo oroesi ailgychwyn
Gofynnwch i bob cynhwysydd o ba gyfeiriad y mae'n ymddangos ei fod yn dod. Dylai'r un yn y twnnel argraffu cyfeiriad y darparwr a dylai'r un uniongyrchol argraffu allanfa'r gwesteiwr. Mae atebion unfath yn golygu bod y gwasanaeth uniongyrchol wedi etifeddu'r gofod enwau anghywir neu fod VPN ar lefel gwesteiwr yn dal i ddal popeth, ac mae'r ddau atgyweiriad hynny'n wahanol. Rheswch y gwiriad eto ar ôl pob golygiad compose, oherwydd mae un bloc gwasanaeth wedi'i gopïo yn ddigon i ailgyflwyno'r broblem.
Mae tair peth yn tueddu i dorri'n ddiweddarach. Mae DNS yn dilyn perchennog y gofod enwau, felly mae gosodiadau datryswr a pharth chwilio yn perthyn i'r cynhwysydd ochr yn hytrach na'r gwesteiwr. Mae VPN â phorthladdoedd wedi'u hailgyfeirio yn newid ei borthladd gwrando wrth ailgysylltu, felly rhaid ysgrifennu porthladd blaen y darparwr a phorthladd gwrando ochr y cynhwysydd yn ôl i ffurfweddiad y cleient neu i'r mapio porthladdoedd, fel arfer gan ddiweddarwr bach sy'n darllen API y darparwr. Ac mae unrhyw archwiliad a ysgrifennwyd yn erbyn localhost bellach yn gofyn i gynhwysydd y twnnel yn hytrach na'r llwyth gwaith.
Ysgrifennwch y patrwm i lawr, gan gynnwys pa gynhwysydd sy'n berchen ar y gofod enwau a pha borthladdoedd sy'n perthyn iddo. Bydd y person nesaf yn ychwanegu gwasanaeth, yn copïo'r bloc anghywir, ac yn atgynhyrchu'r methiant cyntaf yn yr erthygl hon.