டிசிபிசர்வர் மற்றும் நெட்கேட் மூலம் குபெர்னெட்ஸ் பாட் அல்லது கொள்கலனில் சுரங்கப்பாதையை திறப்பது எப்படி

குறிப்பு. மொழிபெயர்: LayerCI உருவாக்கியவரின் இந்த நடைமுறைக் குறிப்பு, Kubernetes க்கான குறிப்புகள் & தந்திரங்கள் (மற்றும் பல) என அழைக்கப்படும் சிறந்த விளக்கமாகும். இங்கே முன்மொழியப்பட்ட தீர்வு சிலவற்றில் ஒன்று மட்டுமே மற்றும், ஒருவேளை, மிகவும் வெளிப்படையானது அல்ல (சில சந்தர்ப்பங்களில், கருத்துகளில் ஏற்கனவே குறிப்பிட்டுள்ள K8 களுக்கான "சொந்தமானது" பொருத்தமானதாக இருக்கலாம். kubectl port-forward) இருப்பினும், கிளாசிக்கல் பயன்பாடுகளைப் பயன்படுத்துதல் மற்றும் அவற்றை மேலும் இணைக்கும் கண்ணோட்டத்தில் குறைந்தபட்சம் சிக்கலைப் பார்க்க இது உங்களை அனுமதிக்கிறது - அதே நேரத்தில் எளிமையானது, நெகிழ்வானது மற்றும் சக்தி வாய்ந்தது (உத்வேகத்திற்காக இறுதியில் "பிற யோசனைகளைப்" பார்க்கவும்).

டிசிபிசர்வர் மற்றும் நெட்கேட் மூலம் குபெர்னெட்ஸ் பாட் அல்லது கொள்கலனில் சுரங்கப்பாதையை திறப்பது எப்படி

ஒரு பொதுவான சூழ்நிலையை கற்பனை செய்து பாருங்கள்: உங்கள் லோக்கல் மெஷினில் டிராஃபிக்கை மாயமாக ஒரு பாட்/கன்டெய்னருக்கு (அல்லது நேர்மாறாக) அனுப்ப வேண்டும்.

சாத்தியமான பயன்பாட்டு வழக்குகள்

  1. HTTP இறுதிப்புள்ளி என்ன திரும்பும் என்பதைச் சரிபார்க்கவும் /healthz உற்பத்தி கிளஸ்டரில் நெற்று.
  2. உள்ளூர் கணினியில் உள்ள பாட் உடன் TCP பிழைத்திருத்தியை இணைக்கவும்.
  3. உள்ளூர் தரவுத்தள கருவிகளிலிருந்து தயாரிப்பு தரவுத்தளத்திற்கான அணுகலைப் பெறவும், அங்கீகாரத்தைப் பற்றி கவலைப்படாமல் (பொதுவாக லோக்கல் ஹோஸ்டுக்கு ரூட் உரிமைகள் இருக்கும்).
  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:~$

(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)

டிசிபிசர்வர் மற்றும் நெட்கேட் மூலம் குபெர்னெட்ஸ் பாட் அல்லது கொள்கலனில் சுரங்கப்பாதையை திறப்பது எப்படி
பயன்பாட்டு தொடர்பு வரைபடம்

எதிர் திசையில்: பாடலில் கேட்டு ஹோஸ்டுடன் இணைக்கவும்

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"
  • சுரங்கப்பாதைக்கு K3s - இதை மாற்றவும்:
    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.

சாத்தியங்கள் முடிவற்றவை!

மொழிபெயர்ப்பாளரிடமிருந்து பி.எஸ்

எங்கள் வலைப்பதிவிலும் படிக்கவும்:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்