Docker: ఒక కంటైనర్ను VPN ద్వారా పంపండి, మరొకటి నేరుగా ఉంచండి
టన్నెల్కు దాని సొంత కంటైనర్ ఇవ్వండి, అది అవసరమైన సేవలు మాత్రమే ఆ నేమ్స్పేస్ను పంచుకోనివ్వండి, ఆపై యజమాని తర్వాత వచ్చేది పరిగణించండి: పోర్టులు, localhost, DNS.
ఒక హోస్ట్, రెండు వర్క్లోడ్లు మరియు వాటిని వేరు చేసే ఒక అవసరం: వాణిజ్య VPN నుండి బయటకు రావాల్సిన డౌన్లోడ్ క్లయింట్, మరియు హోస్ట్ కనెక్షన్ను కొనసాగించాల్సిన నిర్వహణ ఇంటర్ఫేస్. హోస్ట్పై VPN క్లయింట్ను ఇన్స్టాల్ చేస్తే అవసరం వెంటనే విఫలమవుతుంది, ఎందుకంటే అప్పుడు రెండు వర్క్లోడ్లు ఒకే నిష్క్రమణను పంచుకుంటాయి. నిజంగా పనిచేసే నమూనా ఏమిటంటే టన్నెల్ను దాని సొంత కంటైనర్లోకి తరలించి, అది అవసరమైన వర్క్లోడ్లు మాత్రమే ఆ కంటైనర్ నెట్వర్క్ నేమ్స్పేస్లో చేరడానికి అనుమతించడం. మిగతావన్నీ సాధారణ Docker మార్గాన్ని ఉంచుతాయి, మరియు తర్వాత వచ్చే వివరాలు నేమ్స్పేస్ ఎవరిది అనే దాని పరిణామాలు.
పంచుకున్న నేమ్స్పేస్ నియమాలను ఎందుకు మారుస్తుంది
మరొకదాని నేమ్స్పేస్లో చేరే కంటైనర్కు దాని సొంత నెట్వర్క్ స్టాక్ లభించదు. అది చేరిన కంటైనర్తో సమానమైన ఇంటర్ఫేస్లు, అదే రూటింగ్ పట్టిక మరియు అదే loopback చూస్తుంది, అందుకే ఈ నమూనా ఉపయోగకరం: వర్క్లోడ్ సాధారణంగా పరిష్కరించి కనెక్ట్ అవుతుంది, కింద ఉన్న టన్నెల్ అప్లికేషన్కు తెలియకుండానే ట్రాఫిక్ను పట్టుకుంటుంది. ధర ఏమిటంటే ప్రతి నెట్వర్క్ సెట్టింగ్కు ఇప్పుడు ఒకే యజమాని ఉంటాడు, మరియు చేరే కంటైనర్ అతను కాదు.
ఈ యాజమాన్య నియమం చాలా కాన్ఫిగరేషన్ ప్రశ్నలకు అవి అడగకముందే సమాధానం ఇస్తుంది. సెట్టింగ్ నెట్వర్క్ స్టాక్లో నివసిస్తే అది సైడ్కార్ది. అది ప్రక్రియను వివరిస్తే అది వర్క్లోడ్తోనే ఉంటుంది.
loopback అనేది ప్రజలను ఆశ్చర్యపరిచే భాగం. చేరే కంటైనర్ లోపల, localhost సైడ్కార్ loopbackకు పరిష్కరించబడుతుంది, దాని సొంత ప్రైవేట్కు కాదు, కాబట్టి ఒంటరితనాన్ని ఆశించి 127.0.0.1కు బంధించే సేవ ఇప్పుడు ఆ చిరునామాను టన్నెల్ కంటైనర్తో పంచుకుంటుంది.
నేమ్స్పేస్ ఉన్న కంటైనర్పై పోర్టులను ప్రచురించండి
పోర్ట్ మ్యాపింగ్ నేమ్స్పేస్ యజమానికే చెందుతుంది, వినిపించే ప్రక్రియ మరో కంటైనర్లో నడుస్తున్నప్పుడు కూడా. మ్యాపింగ్ను సైడ్కార్పై ప్రకటించండి, మరియు వర్క్లోడ్ తన సొంత ప్రక్రియ కాన్ఫిగరేషన్ను మార్పులేకుండా ఉంచుకోనివ్వండి. చేరే సేవపై మ్యాపింగ్ అమలులోకి రాలేదు, ఇంజిన్ దాన్ని తిరస్కరించినా లేదా కంటైనర్ ఎలా ప్రారంభమవుతుందనే దాన్ని బట్టి నిశ్శబ్దంగా పట్టించుకోకపోయినా, అందుకే క్షణం ముందు చేరుకోగలిగిన ఇంటర్ఫేస్ నమూనా వర్తించిన వెంటనే అదృశ్యమవుతుంది.
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"]ఈ బ్లాక్ను మూడు సేవలుగా కాకుండా మూడు నిర్ణయాలుగా చదవండి. సైడ్కార్ టన్నెల్ మరియు ప్రచురించిన పోర్టును కలిగి ఉంటుంది; చేరే క్లయింట్ ఎలాంటి నెట్వర్క్ను ప్రకటించదు; నేరుగా ఉండే క్లయింట్ డిఫాల్ట్ నెట్వర్క్లో తన సొంత మ్యాపింగ్ను ఉంచుకుంటుంది. సామర్థ్యం NET_ADMIN సైడ్కార్కు ఇంటర్ఫేస్లను సృష్టించడానికి మరియు మార్గాలను మార్చడానికి అనుమతిస్తుంది, అందుకే ఈ కంటైనర్కు అది సేవ చేసే వర్క్లోడ్ల కంటే ఎక్కువ అధికారాలు అవసరం.
నేరుగా ఉండే సేవ తన సొంత నెట్వర్క్ను ఉంచుకుంటుంది
టన్నెల్ గుండా వెళ్ళకూడని వర్క్లోడ్ డిఫాల్ట్ వంతెన లేదా తన సొంత వినియోగదారు-నిర్వచిత నెట్వర్క్ను తన సొంత ప్రచురిత పోర్టు మరియు నిష్క్రమణతో ఉంచుకుంటుంది. రెండు కంటైనర్లు పేరుతో మాట్లాడుకోగలగాలని దాన్ని సైడ్కార్ నెట్వర్క్కు కలపాలని ప్రలోభం కలుగుతుంది, కానీ ఆ ఒక్క అడుగే దాని ట్రాఫిక్ను నిశ్శబ్దంగా టన్నెల్లోకి తరలిస్తుంది. అవి ఒకదానికొకటి చేరుకోవాల్సి ఉంటే, వేరే వినియోగదారు-నిర్వచిత నెట్వర్క్ నిర్మించి, రెండింటినీ దానికి కలిపి, సైడ్కార్ను బయటకు వెళ్ళే ఏకైక మార్గంగా ఉంచండి.
రెండు ప్రశ్నలను వేరుగా ఉంచండి: ఏ కంటైనర్లు ఒకదానికొకటి చేరుకోగలవు, మరియు ఏది ఎక్కడి నుంచి బయటకు వెళ్తుంది. వాటిని కలపడమే ఈ రూపకల్పన మళ్లీ మొత్తం హోస్ట్-వ్యాప్త VPNగా మారే అత్యంత సాధారణ మార్గం.
మొదటి గంట కోసం వైఫల్యాల మాత్రిక
చాలా మొదటి ప్రయత్నాలు నాలుగింటిలో ఒక విధంగా విఫలమవుతాయి, ప్రతి దానికి వేరే కారణం ఉంటుంది. ఈ క్రమంలో వాటిని తనిఖీ చేయండి, ఎందుకంటే మొదటి రెండు దాదాపు ప్రతి నివేదికను వివరిస్తాయి.
| 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 |
నాల్గవ వరుస అనేది ప్రజలు తప్పుగా అప్లికేషన్ బగ్ అని నిర్ధారించేది. వర్క్లోడ్ తన సొంత loopbackకు వ్యతిరేకంగా రాసిన పరీక్ష ఇప్పుడు టన్నెల్ కంటైనర్ను పరీక్షిస్తోంది, కాబట్టి అది విఫలమవుతుంది లేదా పూర్తిగా తప్పు సేవను నివేదిస్తుంది.
ఒకే హోస్ట్నేమ్కు టన్నెల్ అవసరమైనప్పుడు
కొన్నిసార్లు పూర్తి టన్నెల్ చాలా ఎక్కువ: ఒక అంతర్గత పేరు కార్పొరేట్ VPN గుండా వెళ్ళాలి, అదే సమయంలో స్థానిక సాకెట్ లేదా డిస్ప్లే కనెక్షన్ నడుస్తూనే ఉంటుంది. కంటైనర్ లోపల పూర్తి టన్నెల్ ఆ మార్గాన్ని మరియు హోస్ట్కు చిరునామా చేసిన అన్నింటినీ బద్దలు కొడుతుంది, కాబట్టి అవసరమైన ఉపసర్గను మాత్రమే రూట్ చేయండి. క్లయింట్ చుట్టూ ఉన్న విభజిత రూటింగ్ ర్యాపర్ అది చేస్తుంది, పేరు పెట్టిన హోస్ట్ను టన్నెల్ ద్వారా పంపి మిగతావన్నింటికీ మునుపటి మార్గాన్ని మార్పులేకుండా ఉంచుతుంది.
మీరు ఒకే సేవను చేరుకోవాల్సి ఉన్నప్పుడు మరియు కంటైనర్ మొత్తం ట్రాఫిక్ను తరలించడానికి ప్రయత్నించనప్పుడు దీన్ని ఎంచుకోండి. ఇది సైడ్కార్ కంటే భిన్నమైన సాధనం మరియు భిన్నమైన ప్రశ్నకు సమాధానం ఇస్తుంది.
ధృవీకరించి, తర్వాత పునఃప్రారంభాన్ని తట్టుకునేలా చేయండి
ప్రతి కంటైనర్ను ఏ చిరునామా నుండి వస్తున్నట్టు కనిపిస్తుందని అడగండి. టన్నెల్లో ఉన్నది ప్రదాత చిరునామాను ముద్రించాలి, నేరుగా ఉన్నది హోస్ట్ నిష్క్రమణను. ఒకేలాంటి సమాధానాలు అంటే నేరుగా ఉన్న సేవ తప్పు నేమ్స్పేస్ను వారసత్వంగా పొందింది లేదా హోస్ట్ స్థాయి VPN ఇంకా అన్నింటినీ పట్టుకుంటోంది, మరియు ఆ రెండు సవరణలు వేరుగా ఉంటాయి. ప్రతి compose సవరణ తర్వాత తనిఖీని మళ్లీ నడపండి, ఎందుకంటే కాపీ చేసిన ఒక సేవ బ్లాక్ సమస్యను తిరిగి తేవడానికి సరిపోతుంది.
మూడు విషయాలు తర్వాత విరిగిపోతాయి. DNS నేమ్స్పేస్ యజమానిని అనుసరిస్తుంది, కాబట్టి రిజాల్వర్ మరియు శోధన డొమైన్ సెట్టింగ్లు హోస్ట్పై కాదు, సైడ్కార్పై ఉండాలి. పోర్ట్ ఫార్వార్డింగ్ ఉన్న VPN తిరిగి కనెక్ట్ అయినప్పుడు తన వినిపించే పోర్టును మారుస్తుంది, కాబట్టి ప్రదాత ఫార్వార్డ్ చేసిన పోర్టు మరియు కంటైనర్ వైపు వినిపించే పోర్టు క్లయింట్ కాన్ఫిగరేషన్లో లేదా పోర్ట్ మ్యాపింగ్లో తిరిగి రాయాలి, సాధారణంగా ప్రదాత API చదివే చిన్న అప్డేటర్ ద్వారా. మరియు localhostకు వ్యతిరేకంగా రాసిన ఏ పరీక్ష అయినా ఇప్పుడు వర్క్లోడ్ కాకుండా టన్నెల్ కంటైనర్ను అడుగుతుంది.
నమూనాను రాయండి, ఏ కంటైనర్ నేమ్స్పేస్ కలిగి ఉంది మరియు ఏ పోర్టులు దానికి చెందుతాయో కూడా చేర్చండి. తదుపరి వ్యక్తి ఒక సేవను జోడిస్తాడు, తప్పు బ్లాక్ను కాపీ చేస్తాడు మరియు ఈ వ్యాసంలోని మొదటి వైఫల్యాన్ని పునరుత్పత్తి చేస్తాడు.