ప్రోహోస్టర్ > బ్లాగ్ > పరిపాలన > tcpserver మరియు netcatతో Kubernetes పాడ్ లేదా కంటైనర్లో సొరంగం తెరవడం ఎలా
tcpserver మరియు netcatతో Kubernetes పాడ్ లేదా కంటైనర్లో సొరంగం తెరవడం ఎలా
గమనిక. అనువాదం.: LayerCI సృష్టికర్త నుండి వచ్చిన ఈ ఆచరణాత్మక గమనిక కుబెర్నెటీస్ కోసం (మరియు మాత్రమే కాదు) చిట్కాలు & ట్రిక్స్ అని పిలవబడే అద్భుతమైన ఉదాహరణ. ఇక్కడ ప్రతిపాదించబడిన పరిష్కారం కొన్నింటిలో ఒకటి మాత్రమే మరియు, బహుశా, చాలా స్పష్టమైనది కాదు (కొన్ని సందర్భాల్లో, వ్యాఖ్యలలో ఇప్పటికే పేర్కొన్న K8s కోసం "స్థానిక" ఒకటి అనుకూలంగా ఉండవచ్చు kubectl port-forward) అయినప్పటికీ, క్లాసికల్ యుటిలిటీలను ఉపయోగించడం మరియు వాటిని మరింత కలపడం వంటి దృక్కోణం నుండి కనీసం సమస్యను చూడటానికి ఇది మిమ్మల్ని అనుమతిస్తుంది - అదే సమయంలో సరళమైనది, సౌకర్యవంతమైనది మరియు శక్తివంతమైనది (స్పూర్తి కోసం చివర “ఇతర ఆలోచనలు” చూడండి).
ఒక సాధారణ పరిస్థితిని ఊహించండి: పాడ్/కంటైనర్కు ట్రాఫిక్ను అద్భుతంగా ఫార్వార్డ్ చేయడానికి మీ స్థానిక మెషీన్లో పోర్ట్ కావాలి (లేదా దీనికి విరుద్ధంగా).
సాధ్యమైన ఉపయోగ సందర్భాలు
HTTP ఎండ్పాయింట్ రిటర్న్లను తనిఖీ చేయండి /healthz ఉత్పత్తి క్లస్టర్లో పాడ్.
స్థానిక మెషీన్లోని పాడ్కు TCP డీబగ్గర్ను కనెక్ట్ చేయండి.
ప్రామాణీకరణతో ఇబ్బంది పడకుండా స్థానిక డేటాబేస్ సాధనాల నుండి ఉత్పత్తి డేటాబేస్కు ప్రాప్యతను పొందండి (సాధారణంగా లోకల్ హోస్ట్కు రూట్ హక్కులు ఉంటాయి).
స్టేజింగ్ క్లస్టర్లో డేటా కోసం ఒక కంటైనర్ను సృష్టించాల్సిన అవసరం లేకుండా వన్-టైమ్ మైగ్రేషన్ స్క్రిప్ట్ను అమలు చేయండి.
వర్చువల్ డెస్క్టాప్ నడుస్తున్న పాడ్కి VNC సెషన్ను కనెక్ట్ చేయండి (XVFB చూడండి).
అవసరమైన సాధనాల గురించి కొన్ని మాటలు
Tcpserver — చాలా Linux ప్యాకేజీ రిపోజిటరీలలో ఓపెన్ సోర్స్ యుటిలిటీ అందుబాటులో ఉంది. ఇది స్థానిక పోర్ట్ను తెరవడానికి మరియు ఏదైనా పేర్కొన్న ఆదేశం నుండి stdin/stdout ద్వారా అందుకున్న ట్రాఫిక్ను దారి మళ్లించడానికి మిమ్మల్ని అనుమతిస్తుంది:
Netcat దీనికి విరుద్ధంగా చేస్తుంది. ఇది మిమ్మల్ని ఓపెన్ పోర్ట్కి కనెక్ట్ చేయడానికి మరియు దాని నుండి అందుకున్న I/Oని stdin/stdoutకి పాస్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది:
colin@colin-work:~$ nc -C httpstat.us 80
GET /200 HTTP/1.0
Host: httpstat.us
HTTP/1.1 200 OK
Cache-Control: private
Server: Microsoft-IIS/10.0
X-AspNetMvc-Version: 5.1
Access-Control-Allow-Origin: *
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=93fdbab9d364704de8ef77182b4d13811344b7dd1ec45d3a9682bbd6fa154ead;Path=/;HttpOnly;Domain=httpstat.us
Date: Fri, 01 Nov 2019 17:53:04 GMT
Connection: close
Content-Length: 0
^C
colin@colin-work:~$
ఈ ఆదేశం స్థానిక మెషీన్లో పోర్ట్ 8000ని యాక్సెస్ చేయడానికి పాడ్ని అనుమతిస్తుంది.
బాష్ స్క్రిప్ట్
నేను బాష్ కోసం ఒక ప్రత్యేక స్క్రిప్ట్ను వ్రాసాను, అది మిమ్మల్ని కుబెర్నెట్స్ ప్రొడక్షన్ క్లస్టర్ని నిర్వహించడానికి అనుమతిస్తుంది లేయర్సిఐపైన వివరించిన పద్ధతిని ఉపయోగించి:
kubetunnel() {
POD="$1"
DESTPORT="$2"
if [ -z "$POD" -o -z "$DESTPORT" ]; then
echo "Usage: kubetunnel [pod name] [destination port]"
return 1
fi
pkill -f 'tcpserver 127.0.0.1 6666'
tcpserver 127.0.0.1 6666 kubectl exec -i "$POD" nc 127.0.0.1 "$DESTPORT"&
echo "Connect to 127.0.0.1:6666 to access $POD:$DESTPORT"
}
మీరు ఈ ఫంక్షన్కి జోడిస్తే ~/.bashrc, మీరు కమాండ్తో పాడ్లో సొరంగంను సులభంగా తెరవవచ్చు kubetunnel web-pod 8080 మరియు చేయండి curl localhost:6666.
సొరంగం కోసం డాకర్ మీరు ప్రధాన లైన్ను దీనితో భర్తీ చేయవచ్చు: