ProHoster > Blog > διαχείριση > Πώς να ανοίξετε ένα τούνελ σε ένα pod ή κοντέινερ Kubernetes με tcpserver και netcat
Πώς να ανοίξετε ένα τούνελ σε ένα pod ή κοντέινερ Kubernetes με tcpserver και netcat
Σημείωση. μετάφρ.: Αυτή η πρακτική σημείωση από τον δημιουργό του LayerCI είναι μια εξαιρετική απεικόνιση των λεγόμενων tips & tricks για το Kubernetes (και πολλά άλλα). Η λύση που προτείνεται εδώ είναι μόνο μία από τις λίγες και, ίσως, όχι η πιο προφανής (για ορισμένες περιπτώσεις, η "εγγενής" λύση για K8 που αναφέρεται ήδη στα σχόλια μπορεί να είναι κατάλληλη kubectl port-forward). Ωστόσο, σας επιτρέπει να εξετάσετε τουλάχιστον το πρόβλημα από την προοπτική της χρήσης κλασικών βοηθητικών προγραμμάτων και του περαιτέρω συνδυασμού τους - ταυτόχρονα απλά, ευέλικτα και ισχυρά (δείτε «άλλες ιδέες» στο τέλος για έμπνευση).
Φανταστείτε μια τυπική κατάσταση: θέλετε μια θύρα στο τοπικό σας μηχάνημα για να προωθήσει μαγικά την κυκλοφορία σε ένα pod/container (ή το αντίστροφο).
Πιθανές περιπτώσεις χρήσης
Ελέγξτε τι επιστρέφει το τελικό σημείο HTTP /healthz λοβό στο σύμπλεγμα παραγωγής.
Συνδέστε ένα πρόγραμμα εντοπισμού σφαλμάτων TCP στο pod του τοπικού υπολογιστή.
Αποκτήστε πρόσβαση στη βάση δεδομένων παραγωγής από εργαλεία τοπικής βάσης δεδομένων χωρίς να χρειάζεται να ασχοληθείτε με τον έλεγχο ταυτότητας (συνήθως ο localhost έχει δικαιώματα root).
Εκτελέστε ένα εφάπαξ σενάριο μετεγκατάστασης για δεδομένα σε ένα σύμπλεγμα σταδιοποίησης χωρίς να χρειάζεται να δημιουργήσετε ένα κοντέινερ για αυτό.
Συνδέστε μια περίοδο λειτουργίας VNC σε ένα pod που εκτελεί εικονική επιφάνεια εργασίας (δείτε XVFB).
Λίγα λόγια για τα απαραίτητα εργαλεία
Tcpserver — Ένα βοηθητικό πρόγραμμα ανοιχτού κώδικα διαθέσιμο στα περισσότερα αποθετήρια πακέτων Linux. Σας επιτρέπει να ανοίξετε μια τοπική θύρα και να ανακατευθύνετε την κυκλοφορία που λαμβάνεται μέσω stdin/stdout από οποιαδήποτε καθορισμένη εντολή σε αυτήν:
Η Netcat κάνει το αντίθετο. Σας επιτρέπει να συνδεθείτε σε μια ανοιχτή θύρα και να περάσετε τις εισόδους/εξόδους που λαμβάνετε από αυτήν στο 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:~$
Αυτή η εντολή επιτρέπει στο pod να έχει πρόσβαση στη θύρα 8000 στον τοπικό υπολογιστή.
Σενάριο Bash
Έγραψα ένα ειδικό σενάριο για το Bash που σας επιτρέπει να διαχειριστείτε ένα σύμπλεγμα παραγωγής Kubernetes 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.
Για το τούνελ μέσα Λιμενεργάτης μπορείτε να αντικαταστήσετε την κύρια γραμμή με: