Kontena yako bado inajibu kwenye daraja lake la udhibiti, lakini kila pakiti inayotoka hutoka kupitia macvlan ya ofisi. Hakuna kilichoshindikana. Viungo viwili hutoa kila kimoja lango lake, na njia pekee chaguo-msingi ilienda kwenye mtandao usiokusudiwa, kwa hiyo huduma inaendelea kufanya kazi huku trafiki yake ikichukua njia ndefu. Wakati mtu anagundua, ushahidi ni jedwali la uelekezaji na si ujumbe wa hitilafu.

Maelezo ya kawaida ni kwamba Docker ilichagua mtandao kwa bahati mbaya. Kwa vitendo uamuzi wa zamani ulifuata mpangilio wa alfabeti wa majina ya mitandao iliyounganishwa, jambo ambalo lilifanya uelekezaji kuwa athari ya pembeni ya lebo. gw_priority hubadilisha hilo na nambari unayochagua kwa makusudi, na kuipokea huchukua dakika moja hivi baada ya mpangilio kuandikwa.

Kwa nini njia chaguo-msingi hutua kwenye mtandao usiofaa

Kila mtandao ambao huduma hujiunga nao unaweza kutoa lango lake, na kontena bado huishia na njia moja chaguo-msingi hasa. Kabla ya Compose 2.33.1 sare ilikatwa kwa kupanga majina ya mitandao, kwa hiyo lebo kama control inayokuja kabla ya office ndiyo iliyoamua trafiki iende wapi. Hakuna kitu ndani ya kontena kinachorekodi kwamba uamuzi ulikuwa wa nasibu, na ndiyo sababu unapita ukaguzi wa msimbo na baadaye kuonekana kama njia ya ajabu. Kuweka sera kwenye faili ya compose ndiyo njia pekee ya kufanya chaguo likaguliwe.

Mambo mawili hubadilisha mtandao unaoshinda: thamani za gw_priority unazoweka, na mitandao iliyounganishwa kabisa. Ongeza mtandao wa tatu na seti ya wagombea inakua; ondoa macvlan na hakuna chochote cha kushindana na daraja. Hakuna hatua yoyote inayoonekana kwenye kumbukumbu za programu, kwa sababu njia chaguo-msingi isiyofaa mara chache huvunja muunganisho kabisa. Hufanya tu majibu yaje kutoka anwani ambayo upande mwingine huenda hauitarajii.

Funga lango kwa gw_priority

Compose huonyesha gw_priority kwenye kila kiungo cha huduma-kwa-mtandao kuanzia toleo 2.33.1, na nambari kubwa zaidi hushinda. Hakuna ufunguo wa lango kwa kila huduma, kwa hiyo thamani ni ya kizuizi cha networks cha huduma hiyo. Mfano hapa chini unatoa njia chaguo-msingi kwa control huku office ikibaki ifikika kwa LAN yake iliyounganishwa moja kwa moja.

services:
  vpn:
    networks:
      control:
        gw_priority: 1
      office:
        gw_priority: 0

networks:
  control:
    driver: bridge
    ipam:
      config:
        - subnet: 172.30.50.0/24
  office:
    driver: macvlan
    driver_opts:
      parent: eno1.120
      macvlan_mode: bridge
    ipam:
      config:
        - subnet: 192.168.120.0/24
          ip_range: 192.168.120.192/27
          gateway: 192.168.120.1

Soma kizuizi kama vidhibiti viwili tofauti: gw_priority huamua njia chaguo-msingi na sehemu ya ipam huamua anwani. Kubadilisha subnet pekee kunaacha chaguo la kutoka bila kuguswa, na hii ndiyo njia ya kawaida zaidi ambayo marekebisho haya hutekelezwa nusu. Weka vipaumbele kando ya mtandao vinavyoutawala, ili msomaji anayefuata asilazimike kutafuta uamuzi.

Usichanganye gw_priority na sifa ya kawaida ya priority iliyo kando. Hiyo hupanga uundaji wa miunganisho na haisemi chochote kuhusu uelekezaji, kwa hiyo haiwezi kuchagua lango chaguo-msingi na hairekebishi majina ya violesura. Ikiwa mtu anapendekeza kuongeza priority ili kuelekeza trafiki, pendekezo hilo si sahihi hata wakati mpangilio unaotokana unaonekana sahihi kwa bahati.

Thibitisha ni mtandao upi kwa kweli unaobeba njia chaguo-msingi

Angalia ndani ya kontena inayoendesha, kwa sababu jedwali la uelekezaji la mwenyeji hufafanua mwenyeji na si nafasi ya majina ambayo huduma hutumia. Endesha ukaguzi wa usanidi kwanza ili hitilafu ya kuandika ishindwe kabla ya kuanzisha upya, kisha soma njia ambayo kontena iliisakinisha kwa kweli.

docker compose config --quiet
docker exec vpn ip -4 route show default
docker exec vpn cat /proc/net/route

Matokeo sahihi hutaja kifaa cha daraja na 172.30.50.1; yasiyofaa hutaja 192.168.120.1 na kifaa cha macvlan. Ikiwa taswira haijumuishi kifurushi cha iproute2, faili ya /proc bado huripoti njia chaguo-msingi, ikiwa na lengo 00000000 na baiti za lango zimepinduliwa. Linganisha safu ya kiolesura na docker inspect wakati majina ya vifaa hayako wazi.

Macvlan ni bandari halisi, si nakala ya daraja

Macvlan huipa kontena utambulisho wa pili kwenye kebo, na hilo ndilo hufanya ufikiaji wa vifaa vya karibu ufanye kazi. Pia inamaanisha bandari ya swichi na hypervisor hulazimika kukubali anwani ya ziada ya MAC, na mitandao mingi ya wingu huikataa kwa kimya. Jaribu kontena moja kabla ya kupanga kundi, kwa sababu MAC iliyokataliwa kwa kawaida huonekana kama kiungo kilichoinuka na kisichopitisha chochote.

Mpangilio macvlan_mode: bridge ni hali ya dereva wa macvlan, si daraja la programu la Docker, na passthru ni hali maalumu tofauti na si chaguo-msingi. Linux pia huzuia kontena la macvlan kufikia mwenyeji wake mwenyewe kupitia mzazi yule yule, na ndiyo sababu daraja la udhibiti huhifadhiwa badala ya kutarajia kiungo kimoja kifanye kazi zote mbili.

Taja mzazi wa VLAN kabla Compose haijaiona

Docker huchukulia mzazi mwenye nukta kama eno1.120 kama kiolesura kidogo cha 802.1Q na huunda kifaa cha VLAN yenyewe. Urahisi huo una mipaka: jina linalotokana hutegemea jina la kiolesura halisi, na majina marefu yanaweza kusukuma matokeo zaidi ya inavyotarajiwa na zana zinazozunguka. Kuunda kiolesura cha VLAN chenye jina katika usanidi wa mtandao wa mwenyeji na kuelekeza parent huko huweka pande zote mbili zikitarajiwa.

Kumbuka kwamba ufunguo chini ya networks ni jina la Compose, si kifaa cha Linux. Kutafuta kiolesura kinachoitwa office kwenye mwenyeji kutashindikana, kwa sababu kerneli huona tu kiolesura mzazi na jozi ya veth nyuma ya kontena.

Tengeneza nafasi kwa VPN juu

Mteja wa VPN huunganishwa baada ya mitandao hii kuwepo, kwa hiyo anaweza kuongeza njia mahususi zaidi, kanuni za sera na vichujio bila kujali gw_priority. Panga viambishi vya mbali dhidi ya subnet zote mbili za ndani, ikiwa ni pamoja na majibu ambayo njia ya udhibiti inahitaji. Viambishi vya mbali vinapogongana na LAN ya ofisi, rekebisha mpango wa anwani badala ya kung'oa safu yote ya kibinafsi kutoka kwenye handaki.

Kagua tena anwani, njia na njia ya huduma baada ya VPN kuanza na tena baada ya kuunganisha upya, kwa sababu ni wakati wa kuunganisha upya ambapo njia iliyoongezwa kwa mkono hupotea. Andika jedwali linalotarajiwa kabla ya jaribio la kwanza ili ulinganisho wa baadaye uwe diff na si mazoezi ya kumbukumbu. Weka umiliki wa kudumu wa mtandao katika Compose na uache usanidi wa VPN umiliki sera yake tu.

Makala zinazohusiana