Έργο projet11-kubernetes-services · η χρήσιμη θεωρία πριν (ή κατά) την πρακτική.
Ένα Pod είναι εφήμερο: μπορεί να διαγραφεί, να αναδημιουργηθεί, να μετακινηθεί σε άλλο κόμβο — και η διεύθυνση IP του αλλάζει. Αδύνατο λοιπόν να κωδικοποιήσουμε «στα σκληρά» την IP ενός Pod.
Το Service λύνει αυτό το πρόβλημα: παρέχει μια σταθερή διεύθυνση (IP + όνομα DNS) και κατανέμει αυτόματα την κίνηση προς όλα τα Pods που αντιστοιχούν στον επιλογέα ετικετών του.
Ο δεσμός Service → Pods δεν είναι μια παγωμένη IP: είναι ένας επιλογέας ετικετών. Το Kubernetes διατηρεί μόνο του τη λίστα των αντίστοιχων Pods (τα Endpoints).
http://demo-clusterip).http://<ip-du-noeud>:<nodePort> (εδώ http://localhost:30082).EXTERNAL-IP γίνεται localhost (http://localhost:8090).| Τύπος | Εμβέλεια | Πρόσβαση | Τυπική χρήση |
|---|---|---|---|
| ClusterIP | Εσωτερικό | Εσωτερικό όνομα DNS | Βάση δεδομένων, εσωτερική API, επικοινωνία Pod↔Pod |
| NodePort | Εξωτερικό | localhost:<30000-32767> | Επίδειξη / τοπικό dev |
| LoadBalancer | Εξωτερικό | Δημόσια IP (localhost τοπικά) | Δημόσια υπηρεσία σε παραγωγή cloud |
Υπάρχει επίσης το ExternalName (ψευδώνυμο DNS προς εξωτερική υπηρεσία) και το Ingress (δρομολόγηση HTTP/HTTPS ανά όνομα τομέα, αργότερα) — εκτός αυτού του έργου.
Το Kubernetes εκτελεί το CoreDNS στο σύμπλεγμα. Κάθε Service λαμβάνει ένα όνομα DNS:
<nom-du-service> # από τον ίδιο χώρο ονομάτων
<nom-du-service>.<namespace> # από άλλον χώρο ονομάτων
<nom-du-service>.<namespace>.svc.cluster.local # πλήρες όνομα (FQDN)Έτσι, από οποιοδήποτε Pod του ίδιου χώρου ονομάτων:
curl http://demo-clusterip # επιλύεται από το CoreDNS -> IP του Service -> ένα PodIP:port των αντίστοιχων Pods, ενημερωμένη αυτόματα από το Kubernetes.kubectl get endpoints demo-clusterip # εμφανίζει τις IP των Pods πίσω από το ServiceΜάθημα δημιουργημένο από τον Dr. Haythem REHOUMA — Ανάπτυξη και ανάπτυξη λύσεων δεδομένων