tcpserver ಮತ್ತು netcat ನೊಂದಿಗೆ ಕುಬರ್ನೆಟ್ಸ್ ಪಾಡ್ ಅಥವಾ ಕಂಟೇನರ್ನಲ್ಲಿ ಸುರಂಗವನ್ನು ಹೇಗೆ ತೆರೆಯುವುದು

ಸೂಚನೆ. ಅನುವಾದ.: LayerCI ನ ಸೃಷ್ಟಿಕರ್ತರಿಂದ ಈ ಪ್ರಾಯೋಗಿಕ ಟಿಪ್ಪಣಿಯು ಕುಬರ್ನೆಟ್ಸ್ (ಮತ್ತು ಹೆಚ್ಚಿನವು) ಗಾಗಿ ಸಲಹೆಗಳು ಮತ್ತು ತಂತ್ರಗಳು ಎಂದು ಕರೆಯಲ್ಪಡುವ ಅತ್ಯುತ್ತಮ ವಿವರಣೆಯಾಗಿದೆ. ಇಲ್ಲಿ ಪ್ರಸ್ತಾಪಿಸಲಾದ ಪರಿಹಾರವು ಕೆಲವೇ ಕೆಲವು ಮತ್ತು, ಬಹುಶಃ, ಹೆಚ್ಚು ಸ್ಪಷ್ಟವಾಗಿಲ್ಲ (ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ, ಈಗಾಗಲೇ ಕಾಮೆಂಟ್‌ಗಳಲ್ಲಿ ಉಲ್ಲೇಖಿಸಲಾದ K8 ಗಳಿಗೆ "ಸ್ಥಳೀಯ" ಸೂಕ್ತವಾಗಿರಬಹುದು kubectl port-forward) ಆದಾಗ್ಯೂ, ಕ್ಲಾಸಿಕಲ್ ಉಪಯುಕ್ತತೆಗಳನ್ನು ಬಳಸುವ ಮತ್ತು ಅವುಗಳನ್ನು ಮತ್ತಷ್ಟು ಸಂಯೋಜಿಸುವ ದೃಷ್ಟಿಕೋನದಿಂದ ಕನಿಷ್ಠ ಸಮಸ್ಯೆಯನ್ನು ನೋಡಲು ಇದು ನಿಮ್ಮನ್ನು ಅನುಮತಿಸುತ್ತದೆ - ಅದೇ ಸಮಯದಲ್ಲಿ ಸರಳ, ಹೊಂದಿಕೊಳ್ಳುವ ಮತ್ತು ಶಕ್ತಿಯುತ (ಸ್ಫೂರ್ತಿಗಾಗಿ ಕೊನೆಯಲ್ಲಿ "ಇತರ ವಿಚಾರಗಳು" ನೋಡಿ).

tcpserver ಮತ್ತು netcat ನೊಂದಿಗೆ ಕುಬರ್ನೆಟ್ಸ್ ಪಾಡ್ ಅಥವಾ ಕಂಟೇನರ್ನಲ್ಲಿ ಸುರಂಗವನ್ನು ಹೇಗೆ ತೆರೆಯುವುದು

ವಿಶಿಷ್ಟ ಸನ್ನಿವೇಶವನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ: ನಿಮ್ಮ ಸ್ಥಳೀಯ ಗಣಕದಲ್ಲಿ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಪಾಡ್/ಕಂಟೇನರ್‌ಗೆ (ಅಥವಾ ಪ್ರತಿಯಾಗಿ) ಮಾಂತ್ರಿಕವಾಗಿ ಫಾರ್ವರ್ಡ್ ಮಾಡಲು ನೀವು ಪೋರ್ಟ್ ಬಯಸುತ್ತೀರಿ.

ಸಂಭವನೀಯ ಬಳಕೆಯ ಪ್ರಕರಣಗಳು

  1. HTTP ಎಂಡ್‌ಪಾಯಿಂಟ್ ಏನನ್ನು ನೀಡುತ್ತದೆ ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸಿ /healthz ಉತ್ಪಾದನಾ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ ಪಾಡ್.
  2. ಸ್ಥಳೀಯ ಗಣಕದಲ್ಲಿನ ಪಾಡ್‌ಗೆ TCP ಡೀಬಗರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿ.
  3. ದೃಢೀಕರಣದೊಂದಿಗೆ ತಲೆಕೆಡಿಸಿಕೊಳ್ಳದೆಯೇ ಸ್ಥಳೀಯ ಡೇಟಾಬೇಸ್ ಪರಿಕರಗಳಿಂದ ಉತ್ಪಾದನಾ ಡೇಟಾಬೇಸ್‌ಗೆ ಪ್ರವೇಶವನ್ನು ಪಡೆಯಿರಿ (ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಥಳೀಯ ಹೋಸ್ಟ್ ಮೂಲ ಹಕ್ಕುಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ).
  4. ಧಾರಕವನ್ನು ರಚಿಸದೆಯೇ ಸ್ಟೇಜಿಂಗ್ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ ಡೇಟಾಕ್ಕಾಗಿ ಒಂದು-ಬಾರಿ ವಲಸೆ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ರನ್ ಮಾಡಿ.
  5. ವರ್ಚುವಲ್ ಡೆಸ್ಕ್‌ಟಾಪ್ ಚಾಲನೆಯಲ್ಲಿರುವ ಪಾಡ್‌ಗೆ VNC ಸೆಶನ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿ (XVFB ನೋಡಿ).

ಅಗತ್ಯ ಉಪಕರಣಗಳ ಬಗ್ಗೆ ಕೆಲವು ಪದಗಳು

Tcpserver — ಹೆಚ್ಚಿನ Linux ಪ್ಯಾಕೇಜ್ ರೆಪೊಸಿಟರಿಗಳಲ್ಲಿ ತೆರೆದ ಮೂಲ ಉಪಯುಕ್ತತೆ ಲಭ್ಯವಿದೆ. ಸ್ಥಳೀಯ ಪೋರ್ಟ್ ಅನ್ನು ತೆರೆಯಲು ಮತ್ತು ಯಾವುದೇ ನಿರ್ದಿಷ್ಟ ಆಜ್ಞೆಯಿಂದ 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:~$

(asciinema.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:~$

(asciinema.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

(asciinema.org)

tcpserver ಮತ್ತು netcat ನೊಂದಿಗೆ ಕುಬರ್ನೆಟ್ಸ್ ಪಾಡ್ ಅಥವಾ ಕಂಟೇನರ್ನಲ್ಲಿ ಸುರಂಗವನ್ನು ಹೇಗೆ ತೆರೆಯುವುದು
ಯುಟಿಲಿಟಿ ಇಂಟರ್ಯಾಕ್ಷನ್ ರೇಖಾಚಿತ್ರ

ವಿರುದ್ಧ ದಿಕ್ಕಿನಲ್ಲಿ: ಪಾಡ್‌ನಲ್ಲಿ ಆಲಿಸಿ ಮತ್ತು ಹೋಸ್ಟ್‌ಗೆ ಸಂಪರ್ಕಪಡಿಸಿ

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

ಈ ಆಜ್ಞೆಯು ಪಾಡ್ ಸ್ಥಳೀಯ ಗಣಕದಲ್ಲಿ ಪೋರ್ಟ್ 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.

  • ಒಳಗೆ ಸುರಂಗಕ್ಕಾಗಿ ಡಾಕರ್ ನೀವು ಮುಖ್ಯ ಸಾಲನ್ನು ಇದರೊಂದಿಗೆ ಬದಲಾಯಿಸಬಹುದು:
    tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT"
  • ಒಳಗೆ ಸುರಂಗಕ್ಕಾಗಿ ಕೆ3ಗಳು - ಇದನ್ನು ಬದಲಾಯಿಸಿ:
    tcpserver 127.0.0.1 6666 k3s kubectl exec …
  • ಮತ್ತು ಹೀಗೆ.

ಹೆಚ್ಚಿನ ವಿಚಾರಗಳು

  • ಆಜ್ಞೆಗಳನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು UDP ಸಂಚಾರವನ್ನು ಮರುನಿರ್ದೇಶಿಸಬಹುದು netcat -l -u -c вместо tcpserver и netcat -u вместо netcat ಅನುಕ್ರಮವಾಗಿ.
  • ಪೈಪ್ ವೀಕ್ಷಕ ಮೂಲಕ 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

ನಮ್ಮ ಬ್ಲಾಗ್‌ನಲ್ಲಿಯೂ ಓದಿ:

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ