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.

SymptomLikely cause
Web UI unreachable after the changePort mapping declared on the joining container instead of the sidecar
Both containers show the provider's exit addressThe direct service was attached to the sidecar network
Internal names stop resolvingResolver settings live on the host, not in the shared namespace
Health check fails but the app worksThe 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.

Erthyglau cysylltiedig