በኩበርኔትስ ፖድ ወይም ኮንቴይነር በ tcpserver እና netcat ውስጥ ዋሻ እንዴት እንደሚከፈት

ማስታወሻ. ትርጉምይህ የ LayerCI ፈጣሪ ጠቃሚ ማስታወሻ ለኩበርኔትስ (እና ሌሎችም) ጠቃሚ ምክሮች እና ዘዴዎች እየተባለ የሚጠራውን ግሩም ምሳሌ ነው። እዚህ የቀረበው መፍትሄ ከጥቂቶቹ ውስጥ አንዱ ብቻ ነው እና ምናልባትም በጣም ግልፅ አይደለም (ለአንዳንድ ሁኔታዎች በአስተያየቶቹ ውስጥ አስቀድሞ የተጠቀሰው ለ K8s "ተወላጅ" ተስማሚ ሊሆን ይችላል) kubectl port-forward). ሆኖም ፣ ችግሩን ቢያንስ ክላሲካል መገልገያዎችን ከመጠቀም እና እነሱን ከማጣመር አንፃር ቢያንስ ችግሩን እንዲመለከቱ ያስችልዎታል - በተመሳሳይ ጊዜ ቀላል ፣ ተለዋዋጭ እና ኃይለኛ (ለተመስጦ መጨረሻ ላይ “ሌሎች ሀሳቦችን” ይመልከቱ)።

በኩበርኔትስ ፖድ ወይም ኮንቴይነር በ tcpserver እና netcat ውስጥ ዋሻ እንዴት እንደሚከፈት

አንድ የተለመደ ሁኔታ በዓይነ ሕሊናህ ይታይህ፡ በአከባቢህ ማሽን ላይ ያለ ወደብ ትራፊክን በአስማት ወደ ፖድ/ኮንቴይነር (ወይም በተቃራኒው) ለማስተላለፍ ትፈልጋለህ።

ሊሆኑ የሚችሉ የአጠቃቀም ጉዳዮች

  1. የኤችቲቲፒ መጨረሻ ነጥብ ምን እንደሚመልስ ያረጋግጡ /healthz ፖድ በምርት ክላስተር ውስጥ.
  2. በአካባቢው ማሽን ላይ የ TCP አራሚን ከፖድ ጋር ያገናኙ.
  3. ከማረጋገጫ ጋር መጨነቅ ሳያስፈልግ ከአካባቢያዊ የውሂብ ጎታ መሳሪያዎች የምርት ዳታቤዙን ያግኙ (ብዙውን ጊዜ localhost የስር መብቶች አሉት)።
  4. ለእሱ መያዣ ሳይፈጥሩ የአንድ ጊዜ የፍልሰት ስክሪፕት ለውሂብ በዝግጅት ክላስተር ውስጥ ያሂዱ።
  5. የVNC ክፍለ ጊዜ ቨርቹዋል ዴስክቶፕን ከሚያሄድ ፖድ ጋር ያገናኙ (XVFB ይመልከቱ)።

ስለ አስፈላጊ መሳሪያዎች ጥቂት ቃላት

Tcpserver - ክፍት ምንጭ መገልገያ በአብዛኛዎቹ የሊኑክስ ጥቅል ማከማቻዎች ይገኛል። የአካባቢ ወደብ እንዲከፍቱ እና በ stdin/stdout የተቀበለውን ትራፊክ ከማንኛውም ከተጠቀሰው ትዕዛዝ እንዲቀይሩ ያስችልዎታል፡-

colin@colin-work:~$ tcpserver 127.0.0.1 8080 echo -e 'HTTP/1.0 200 OKrnContent-Length: 19rnrn<body>hello!</body>'&
[1] 17377
colin@colin-work:~$ curl localhost:8080
<body>hello!</body>colin@colin-work:~$

(አስሲኔማ.org)

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:~$

(አስሲኔማ.org)

ከላይ ባለው ምሳሌ netcat ገጹን በ HTTP ላይ ይጠይቃል። ባንዲራ -C በመስመሩ መጨረሻ ላይ CRLF እንዲጨምር ያደርገዋል።

ከ kubectl ጋር ግንኙነት: በአስተናጋጁ ላይ ያዳምጡ እና ከፖድ ጋር ይገናኙ

ከላይ የተጠቀሱትን መሳሪያዎች ከ kubectl ጋር ካዋሃድን, እንደዚህ አይነት ትዕዛዝ እናገኛለን:

tcpserver 127.0.0.1 8000 kubectl exec -i web-pod nc 127.0.0.1 8080

በተመሣሣይ ሁኔታ፣ በፖድ ውስጥ ወደብ 80 ለመግባት በቂ ነው። curl "127.0.0.1:80":

colin@colin-work:~$ sanic kubectl exec -it web-54dfb667b6-28n85 bash
root@web-54dfb667b6-28n85:/web# apt-get -y install netcat-openbsd
Reading package lists... Done
Building dependency tree
Reading state information... Done
netcat-openbsd is already the newest version (1.195-2).
0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.
root@web-54dfb667b6-28n85:/web# exit
colin@colin-work:~$ tcpserver 127.0.0.1 8000 sanic kubectl exec -i web-54dfb667b6-28n85 nc 127.0.0.1 8080&
[1] 3232
colin@colin-work:~$ curl localhost:8000/healthz
{"status":"ok"}colin@colin-work:~$ exit

(አስሲኔማ.org)

በኩበርኔትስ ፖድ ወይም ኮንቴይነር በ tcpserver እና netcat ውስጥ ዋሻ እንዴት እንደሚከፈት
የመገልገያ መስተጋብር ንድፍ

በተቃራኒው አቅጣጫ: በፖድ ውስጥ ያዳምጡ እና ከአስተናጋጁ ጋር ይገናኙ

nc 127.0.0.1 8000 | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat

ይህ ትእዛዝ ፖድ 8000 በሃገር ውስጥ ማሽን ላይ እንዲደርስ ያስችለዋል።

የባሽ ስክሪፕት።

የኩበርኔትስ የምርት ክላስተርን እንድታስተዳድሩ የሚያስችል ልዩ ስክሪፕት ለ Bash ጻፍኩ። LayerCIከላይ የተገለጸውን ዘዴ በመጠቀም፡-

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.

  • ለዋሻው ውስጥ Docker ዋናውን መስመር በሚከተሉት መተካት ይችላሉ:
    tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT"
  • ለዋሻው ውስጥ K3 ሴ - ቀይር ወደ፡-
    tcpserver 127.0.0.1 6666 k3s kubectl exec …
  • እና የመሳሰሉት.

ሌሎች ሀሳቦች

  • ትእዛዞቹን በመጠቀም የ UDP ትራፊክን ማዞር ይችላሉ። netcat -l -u -ctcpserver и netcat -unetcat በየደረጃው.
  • I/Oን በቧንቧ መመልከቻ ይመልከቱ፡-

    nc 127.0.0.1 8000 | pv --progress | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat

  • በመጠቀም በሁለቱም ጫፎች ላይ ያለውን ትራፊክ መጭመቅ እና መፍታት ይችላሉ gzip.
  • ተዛማጅ ፋይል ካለው ሌላ ኮምፒውተር በSSH በኩል ያገናኙ kubeconfig:

    tcpserver ssh workcomputer "kubectl exec -i my-pod nc 127.0.0.1 80"

  • በመጠቀም ሁለት ፖዶችን በተለያዩ ስብስቦች ውስጥ ማገናኘት ይችላሉ mkfifo እና ሁለት የተለያዩ ትዕዛዞችን ያሂዱ kubectl.

Озможности безграничны!

PS ከተርጓሚ

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ