Πώς να αναπτύξετε το Nginx σε ένα σύμπλεγμα Kubernetes


Στο τελευταίο μας άρθρο, συζητήσαμε τον τρόπο ρύθμισης και εκτέλεσης ενός συμπλέγματος Kubernetes, ας συζητήσουμε πώς μπορούμε να αναπτύξουμε την υπηρεσία NGINX στο σύμπλεγμα μας.

Θα εκτελέσω αυτήν την ανάπτυξη σε μια εικονική μηχανή που φιλοξενείται από έναν δημόσιο πάροχο cloud. Όπως συμβαίνει με πολλές δημόσιες υπηρεσίες cloud, πολλοί διατηρούν γενικά ένα δημόσιο και ιδιωτικό σχήμα IP για τις Εικονικές Μηχανές τους.

Περιβάλλον Δοκιμών

Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197

Ανάπτυξη του NGINX σε ένα σύμπλεγμα Kubernetes

Θα εκτελέσουμε αυτήν την ανάπτυξη από τον κύριο κόμβο.

Ας ξεκινήσουμε ελέγχοντας την κατάσταση του συμπλέγματος. Όλοι οι κόμβοι σας θα πρέπει να βρίσκονται σε κατάσταση ΕΤΟΙΜΟΙ.

kubectl get nodes

Δημιουργούμε μια ανάπτυξη του NGINX χρησιμοποιώντας την εικόνα NGINX.

kubectl create deployment nginx --image=nginx

Τώρα μπορείτε να δείτε την κατάσταση της ανάπτυξής σας.

kubectl get deployments

Εάν θέλετε να δείτε περισσότερες λεπτομέρειες σχετικά με την ανάπτυξή σας, μπορείτε να εκτελέσετε την εντολή περιγράψτε. Για παράδειγμα, είναι δυνατό να προσδιοριστεί πόσα αντίγραφα της ανάπτυξης εκτελούνται. Στην περίπτωσή μας, αναμένουμε να δούμε ένα αντίγραφο του 1 να εκτελείται (δηλαδή 1/1 αντίγραφα).

kubectl describe deployment nginx

Τώρα η ανάπτυξη του Nginx είναι ενεργή, ίσως θέλετε να εκθέσετε την υπηρεσία NGINX σε μια δημόσια IP προσβάσιμη στο διαδίκτυο.

Έκθεση της υπηρεσίας Nginx σας στο δημόσιο δίκτυο

Το Kubernetes προσφέρει πολλές επιλογές κατά την έκθεση της υπηρεσίας σας με βάση μια δυνατότητα που ονομάζεται Τύποι υπηρεσίας Kubernetes και είναι:

  1. ClusterIP – Αυτός ο τύπος υπηρεσίας γενικά εκθέτει την υπηρεσία σε μια εσωτερική IP, προσβάσιμη μόνο εντός του συμπλέγματος και πιθανώς μόνο εντός των κόμβων του συμπλέγματος.
  2. NodePort – Αυτή είναι η πιο βασική επιλογή για να εκθέσετε την υπηρεσία σας ώστε να είναι προσβάσιμη εκτός του συμπλέγματός σας, σε μια συγκεκριμένη θύρα (που ονομάζεται NodePort) σε κάθε κόμβο του συμπλέγματος. Θα παρουσιάσουμε αυτήν την επιλογή σύντομα.
  3. LoadBalancer – Αυτή η επιλογή αξιοποιεί τις εξωτερικές υπηρεσίες Load-Balancing που προσφέρονται από διάφορους παρόχους για να επιτρέψει την πρόσβαση στην υπηρεσία σας. Αυτή είναι μια πιο αξιόπιστη επιλογή όταν σκέφτεστε την υψηλή διαθεσιμότητα για την υπηρεσία σας και έχει περισσότερες δυνατότητες πέρα από την προεπιλεγμένη πρόσβαση.
  4. ExternalName – Αυτή η υπηρεσία ανακατευθύνει την κυκλοφορία σε υπηρεσίες εκτός του συμπλέγματος. Ως εκ τούτου, η υπηρεσία αντιστοιχίζεται σε ένα όνομα DNS που θα μπορούσε να φιλοξενηθεί έξω από το σύμπλεγμα σας. Είναι σημαντικό να σημειωθεί ότι αυτό δεν χρησιμοποιεί διακομιστή μεσολάβησης.

Ο προεπιλεγμένος τύπος υπηρεσίας είναι ClusterIP.

Στο σενάριό μας, θέλουμε να χρησιμοποιήσουμε τον Τύπος υπηρεσίας NodePort επειδή έχουμε δημόσια και ιδιωτική διεύθυνση IP και δεν χρειαζόμαστε προς το παρόν εξωτερικό εξισορροπητή φόρτου. Με αυτόν τον τύπο υπηρεσίας, η Kubernetes θα εκχωρήσει αυτήν την υπηρεσία σε θύρες στην περιοχή 30000+.

kubectl create service nodeport nginx --tcp=80:80

Εκτελέστε την εντολή get svc για να δείτε μια σύνοψη της υπηρεσίας και των θυρών που εκτίθενται.

kubectl get svc

Τώρα μπορείτε να επαληθεύσετε ότι η σελίδα Nginx είναι προσβάσιμη σε όλους τους κόμβους χρησιμοποιώντας την εντολή curl.

curl master-node:30386
curl node-1:30386
curl node-2:30386

Όπως μπορείτε να δείτε, μπορείτε να μεταβείτε στη σελίδα "ΚΑΛΩΣ ΟΡΙΣΑΤΕ ΣΤΟ NGINX!".

Πρόσβαση σε εφήμερες δημόσιες διευθύνσεις IP

Όπως ίσως έχετε παρατηρήσει, το Kubernetes αναφέρει ότι δεν έχω καταχωρημένη ενεργή δημόσια IP ή μάλλον δεν έχω καταχωρίσει ΕΞΩΤΕΡΙΚΗ IP.

kubectl get svc

Ας επαληθεύσουμε αν είναι όντως αλήθεια, ότι δεν έχω συνδεδεμένη ΕΞΩΤΕΡΙΚΗ IP στις διεπαφές μου χρησιμοποιώντας την εντολή IP.

ip a

Δεν υπάρχει δημόσια IP όπως μπορείτε να δείτε.

Όπως αναφέρθηκε προηγουμένως, αυτήν τη στιγμή εκτελώ αυτήν την ανάπτυξη σε μια Εικονική μηχανή που προσφέρεται από έναν δημόσιο πάροχο cloud. Έτσι, ενώ δεν υπάρχει κάποια συγκεκριμένη διεπαφή στην οποία έχει εκχωρηθεί δημόσια IP, ο πάροχος VM έχει εκδώσει μια Εφήμερη εξωτερική διεύθυνση IP.

Μια εφήμερη εξωτερική διεύθυνση IP είναι μια προσωρινή διεύθυνση IP που παραμένει συνδεδεμένη στο VM μέχρι να σταματήσει η εικονική παρουσία. Κατά την επανεκκίνηση της εικονικής παρουσίας, εκχωρείται μια νέα εξωτερική IP. Βασικά, είναι ένας απλός τρόπος για τους παρόχους υπηρεσιών να αξιοποιήσουν τις δημόσιες IP σε αδράνεια.

Η πρόκληση εδώ, εκτός από το γεγονός ότι η δημόσια IP σας δεν είναι στατική, είναι ότι η Εφήμερη δημόσια IP είναι απλώς μια επέκταση (ή διακομιστής μεσολάβησης) της ιδιωτικής διεύθυνσης IP και για αυτόν τον λόγο, η υπηρεσία θα πρόσβαση μόνο στη θύρα 30386. Αυτό σημαίνει ότι η πρόσβαση στην υπηρεσία θα γίνει από τη διεύθυνση URL , δηλαδή 104.197.170.99:30386, την οποία εάν ελέγξετε το πρόγραμμα περιήγησής σας, θα πρέπει να μπορείτε να δείτε τη σελίδα καλωσορίσματος.

Με αυτό, αναπτύξαμε με επιτυχία το NGINX στο σύμπλεγμα 3 κόμβων Kubernetes.