network_mode: service:vpn dhe emri i hostit db që mungon
Ndarja e hapësirës së emrave të VPN është një zgjedhje topologjie. Ose db mban adresën e vet dhe vpn i bashkohet atij rrjeti, ose gjithçka përgjigjet në loopback.
Ju shtoni network_mode: service:vpn te aplikacioni, rinisni stivën dhe aplikacioni vdes sepse db nuk zgjidhet më. Asgjë nuk u riemërtua në skedarin compose, kështu që të dyshuarit e dukshëm janë DNS dhe baza e të dhënave. Ndryshimi i vërtetë është më i vogël dhe më i çuditshëm: aplikacioni pushoi së qeni anëtar i rrjetit Compose ku ekziston ai emër. Derisa të vendosni nga cila hapësirë emrash duhet të përgjigjet baza e të dhënave, çdo korrigjim i emrit të hostit është hamendje.
Pse emri i hostit db pushoi së zgjidhuri
Një shërbim që përdor network_mode nuk ka adresë të vet në një rrjet Compose; huazon hapësirën e emrave të shërbimit të emërtuar. Ajo hapësirë sjell ndërfaqet, rrugët, hapësirën e porteve dhe zgjidhësin e vet, dhe zëvendëson lidhjen e aplikacionit me rrjetin backend. Emri db nuk ishte kurrë abstrakt: jetonte në atë rrjet dhe zgjidhej përmes DNS-së së tij të integruar. Hiqni lidhjen dhe emri nuk ka ku të zgjidhet.
Konfirmojeni këtë nga brenda kontejnerëve dhe jo nga hosti. Një kërkim që dështon në aplikacion por ka sukses në kontejnerin e bazës së të dhënave do të thotë që emri është në rregull dhe anëtarësimi jo. Ai rezultat e vendos korrigjimin në topologjinë compose dhe jo në cilësimet e zgjidhësit të aplikacionit.
Tre pyetje përpara se të redaktoni skedarin
Përgjigjuni sipas radhës, sepse secila ngushton topologjinë. Ku duhet të përgjigjet baza e të dhënave: në një emër hosti që përdorin kontejnerë të tjerë, apo vetëm te aplikacioni në loopback? A duhet aplikacioni të publikojë një port te hosti, dhe cili shërbim do ta zotëronte? A duhet baza e të dhënave të jetë e arritshme nga hosti ose nga një makinë tjetër, apo vetëm nga brenda tunelit?
Nëse baza e të dhënave ka nevojë për emrin e vet dhe aplikacioni nuk publikon asgjë, mbajini në lidhje të ndara. Nëse aplikacioni duhet të publikojë një port dhe gjithçka kalon përmes tunelit, vendosni bazën e të dhënave në hapësirën e emrave të VPN dhe përdorni loopback. Përzierja e të dyjave prodhon një stivë që niset pastër dhe dështon në lidhje.
Lëreni bazën e të dhënave aty ku është
Ndryshimi më i vogël lidh zotëruesin e hapësirës së emrave me rrjetin që tashmë përmban bazën e të dhënave. Aplikacioni trashëgon atë lidhje sepse ndan stivën vpn, dhe db zgjidhet saktësisht si më parë.
services:
vpn:
networks:
- backend
app:
network_mode: service:vpn
db:
networks:
- backend
networks:
backend:Mos shtoni networks edhe te aplikacioni. Compose e refuzon atë veçori së bashku me network_mode në të njëjtin shërbim, dhe gabimi tregon skedarin dhe jo çiftin. Nëse klienti VPN filtron destinacionin backend brenda hapësirës së vet të emrave, rregulloni edhe politikën e tij të mbështetur të rrjetit lokal; një lidhje e përbashkët ofron një rrugë por nuk e anulon atë filtër.
Zhvendoseni bazën e të dhënave në hapësirën e emrave
Ndryshimi më i madh e vendos bazën e të dhënave në të njëjtën hapësirë emrash dhe e drejton aplikacionin te 127.0.0.1 me portën reale. Dy procese nuk mund të lidhin të dyja të njëjtën adresë dhe portë vetëm sepse nisën në kontejnerë të ndryshëm, kështu që një bazë e të dhënave që dëgjon edhe në adresën wildcard do të përplaset me çdo gjë tjetër që e bën këtë. Kontrolloni dëgjuesin përpara se ta zhvendosni.
Portet e publikuara i përkasin shërbimit që zotëron hapësirën e emrave. Shtimi i ports te aplikacioni refuzohet së bashku me network_mode, dhe sajimi i një adrese të veçantë aplikacioni përshkruan një ndërfaqe që nuk ekziston.
Gatishmëria, bllokimi dhe zgjidhësi
depends_on rendit nisjen e kontejnerëve; nuk është provë që tuneli është aktiv dhe nuk e ndal trafikun kur tuneli bie. Trajtojini arritshmërinë, gatishmërinë e tunelit dhe bllokimin e dështimeve si tre kërkesa të ndara. Një stivë që plotëson vetëm të parën kalon një test manual në një ditë të mirë dhe rrjedh në një ditë të keqe. Shkruani tre përgjigjet pranë skedarit compose, atje ku do të shohë personi tjetër.
Ndarja e hapësirës së emrave do të thotë gjithashtu që aplikacioni trashëgon zgjidhësin e kontejnerit VPN, gjë që ndihmon kur tuneli imponon serverë DNS dhe ngatërron kur nuk e bën. Kontrolloni çfarë përmban në të vërtetë hapësira e emrave në vend që të supozoni se zbatohet zgjidhësi i hostit. Referenca e shërbimeve Compose dokumenton network_mode, ports dhe sjelljen e varësive në një vend, duke përfshirë pse një shërbim network_mode nuk ka adresë të vet.