Mwenyeji mmoja, mizigo miwili ya kazi na hitaji linalowatenganisha: mteja wa upakuaji lazima atoke kupitia VPN ya kibiashara, na kiolesura cha usimamizi lazima kiendelee kutumia muunganisho wa mwenyeji. Kusakinisha mteja wa VPN kwenye mwenyeji kunavunja hitaji mara moja, kwa sababu wakati huo mizigo yote miwili inashiriki toka moja. Mpango unaofanya kazi kweli ni kuhamisha handaki kwenye kontena yake yenyewe na kuruhusu mizigo inayohitaji tu kujiunga na nafasi ya majina ya mtandao ya kontena hilo. Kila kitu kingine kinashikilia njia ya kawaida ya Docker, na maelezo yanayofuata ni matokeo ya nani anamiliki nafasi ya majina.

Kwa nini nafasi ya majina inayoshirikiwa hubadilisha kanuni

Kontena inayojiunga na nafasi ya majina ya lingine haipati rafu yake ya mtandao. Inaona violesura vile vile, jedwali lile lile la uelekezaji na loopback ile ile kama kontena iliyojiunga nayo, na ndiyo sababu mpango huu ni muhimu: mzigo hutatua na kuunganisha kwa kawaida, na handaki iliyo chini hunasa trafiki bila programu kujua. Gharama ni kwamba kila mpangilio wa mtandao sasa una mmiliki mmoja, na kontena inayojiiunga si yeye.

Kanuni hii ya umiliki hujibu maswali mengi ya usanidi kabla hayajaulizwa. Ikiwa mpangilio unaishi katika rafu ya mtandao, ni wa kontena la kando. Ikiwa unaelezea mchakato, unabaki na mzigo.

loopback ni sehemu inayowashangaza watu. Ndani ya kontena linalojiiunga, localhost hutatuliwa kwenda loopback ya kontena la kando, si kwenda ya kibinafsi yake, kwa hivyo huduma inayofunga kwa 127.0.0.1 ikitarajia kutengwa sasa inashiriki anwani hiyo na kontena la handaki.

Tangaza bandari kwenye kontena linalomiliki nafasi ya majina

Ramani ya bandari ni ya mmiliki wa nafasi ya majina, hata wakati mchakato unaosikiliza unaendeshwa katika kontena lingine. Tangaza ramani kwenye kontena la kando, na uache mzigo ubaki na usanidi wake wa mchakato bila kubadilishwa. Ramani kwenye huduma inayojiiunga haiwezi kuanza kutumika, iwe injini inaikataa au inaipuuza kimya kulingana na jinsi kontena linavyoanzishwa, na ndiyo sababu kiolesura kilichokuwa kifikika muda mfupi uliopita kinatoweka mara tu mpango unapotumika.

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"]

Soma kizuizi hicho kama maamuzi matatu badala ya huduma tatu. Kontena la kando linamiliki handaki na bandari iliyotangazwa; mteja anayejiiunga hatangazi mtandao wowote; mteja wa moja kwa moja anashikilia ramani yake kwenye mtandao chaguo-msingi. Uwezo NET_ADMIN ndio unaomruhusu kontena la kando kuunda violesura na kubadilisha njia, na ndiyo sababu kontena hili linahitaji mapendeleo zaidi kuliko mizigo inayohudumia.

Huduma inayobaki moja kwa moja inashikilia mtandao wake

Mzigo usiopaswa kupita kwenye handaki unashikilia daraja chaguo-msingi au mtandao wake uliofafanuliwa na mtumiaji, pamoja na bandari yake iliyotangazwa na toka lake. Inashawishi kuunganisha kwenye mtandao wa kontena la kando ili kontena mbili ziweze kuzungumza kwa jina, lakini hatua hiyo moja huhamisha trafiki yake kimya kimya kwenye handaki. Ikihitajika kufikiana, jenga mtandao tofauti uliofafanuliwa na mtumiaji, unganisha yote mawili nao, na uache kontena la kando kuwa njia pekee ya kutoka nje.

Tenganisha maswali mawili: ni kontena gani zinaweza kufikiana, na lipi linatoka wapi. Kuyachanganya ndiyo njia ya kawaida zaidi ambayo muundo huu unarudi kuwa VPN ya mwenyeji wote.

Matrix ya kushindwa kwa saa ya kwanza

Majaribio mengi ya kwanza hushindwa kwa moja ya njia nne, na kila moja ina sababu tofauti. Yachunguze kwa mpangilio huu, kwa sababu mawili ya kwanza yanafafanua karibu kila ripoti.

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

Safu ya nne ni ile ambayo watu huchunguza kimakosa kama hitilafu ya programu. Kipimo kilichoandikwa dhidi ya loopback ya mzigo chenyewe sasa kinajaribu kontena la handaki, kwa hivyo ama kinashindwa au kinaripoti huduma isiyo sahihi kabisa.

Wakati jina moja la mwenyeji linahitaji handaki

Wakati mwingine handaki kamili ni nyingi mno: jina moja la ndani lazima lipite kupitia VPN ya shirika wakati soketi ya ndani au muunganisho wa skrini unaendelea kufanya kazi. Handaki kamili ndani ya kontena huvunja njia hiyo na kila kitu kinachoelekezwa kwa mwenyeji, kwa hivyo elekeza kiambishi tu kinachohitaji. Kifuniko cha uelekezaji kilichogawanywa kuzunguka mteja hufanya hivyo, hutuma mwenyeji aliyetajwa kupitia handaki na kuacha njia ya awali bila kubadilishwa kwa kila kitu kingine.

Chagua hili wakati unahitaji kufikia huduma moja tu na haujaribu kuhamisha trafiki yote ya kontena. Ni chombo tofauti na kontena la kando na hujibu swali tofauti.

Thibitisha, kisha uifanye istahimili kuanzishwa upya

Uliza kila kontena kutoka anwani gani inaonekana inatoka. Ile iliyo kwenye handaki inapaswa kuchapisha anwani ya mtoa huduma na ile ya moja kwa moja toka la mwenyeji. Majibu yanayofanana yanamaanisha kuwa huduma ya moja kwa moja ilirithi nafasi isiyo sahihi ya majina au VPN ya ngazi ya mwenyeji bado inanasa kila kitu, na marekebisho hayo mawili ni tofauti. Endesha ukaguzi tena baada ya kila uhariri wa compose, kwa sababu kizuizi kimoja cha huduma kilichonakiliwa kinatosha kurudisha tatizo.

Mambo matatu huwa yanavunjika baadaye. DNS hufuata mmiliki wa nafasi ya majina, kwa hivyo mipangilio ya kitatuzi na kikoa cha utafutaji ni ya kontena la kando si ya mwenyeji. VPN yenye uelekezaji wa bandari hubadilisha bandari yake ya kusikiliza inapounganishwa tena, kwa hivyo bandari iliyoelekezwa ya mtoa huduma na bandari ya kusikiliza upande wa kontena lazima ziandikwe tena kwenye usanidi wa mteja au kwenye ramani ya bandari, kwa kawaida na kisasaishaji kidogo kinachosoma API ya mtoa huduma. Na kipimo chochote kilichoandikwa dhidi ya localhost sasa kinauliza kontena la handaki badala ya mzigo.

Andika mpango huo, ukiwemo ni kontena gani linamiliki nafasi ya majina na bandari zipi ni zake. Mtu anayefuata ataongeza huduma, atanakili kizuizi kisichofaa na atazalisha tena kushindwa kwa kwanza katika makala haya.

Makala zinazohusiana