Middle
Πώς μπορούμε να αποκτήσουμε πρόσβαση στο κοντέινερ Kubernetes στο οποίο τρέχει η εφαρμογή από το εξωτερικό δίκτυο;
sobes.tech AI
Απάντηση από AI
Υπάρχουν μερικοί βασικοί τρόποι πρόσβασης σε ένα κοντέινερ Kubernetes από το εξωτερικό δίκτυο:
-
Υπηρεσία τύπου LoadBalancer:
- Οι πάροχοι cloud (AWS, GCP, Azure) δημιουργούν έναν εξωτερικό φορτωτή, ο οποίος κατευθύνει την κυκλοφορία στα pods της εφαρμογής σας.
- Ανατίθεται μια εξωτερική διεύθυνση IP.
- Ο πιο απλός τρόπος σε cloud περιβάλλον.
-
Υπηρεσία τύπου NodePort:
- Ανοίγει μια θύρα σε κάθε κόμβο του cluster.
- Αυτή η θύρα κατευθύνει την κυκλοφορία στην υπηρεσία της εφαρμογής σας.
- Πρόσβαση μέσω IP οποιουδήποτε κόμβου και αριθμού NodePort.
- Λιγότερο κλιμακώσιμο και ασφαλές από το LoadBalancer.
-
Υπηρεσία τύπου ClusterIP μαζί με Ingress:
- Το ClusterIP είναι μια υπηρεσία διαθέσιμη μόνο εντός του cluster.
- Το Ingress είναι ένα αντικείμενο API που διαχειρίζεται την εξωτερική πρόσβαση στις υπηρεσίες του cluster.
- Ο διαχειριστής Ingress (π.χ., Nginx Ingress Controller, Traefik) ακούει την εξωτερική κυκλοφορία και την δρομολογεί στην κατάλληλη υπηρεσία ClusterIP.
- Επιτρέπει την κεντρική διαχείριση δρομολόγησης, SSL τερματισμού, φορτισής ισορροπίας.
- Ευέλικτη και κλιμακούμενη προσέγγιση.
-
Υπηρεσία τύπου ExternalName:
- Δημιουργεί ένα ψευδώνυμο για έναν εξωτερικό τομέα. Δεν παρέχει άμεση πρόσβαση στο κοντέινερ μέσω αυτής της υπηρεσίας, αλλά επιτρέπει τη χρήση DNS ονόματος εντός του cluster για πρόσβαση σε εξωτερικό πόρο. Δεν είναι κατάλληλο για άμεση πρόσβαση στο κοντέινερ από έξω.
-
Άμεση πρόσβαση σε NodePort/HostPort στο Pod:
- Μπορείτε να ορίσετε το
hostPortστην προδιαγραφή του pod, για να ανοίξετε μια θύρα στον κόμβο όπου τρέχει το pod. Δεν συνιστάται σε παραγωγικό περιβάλλον λόγω χαμηλής διαχειρισιμότητας και πιθανών συγκρούσεων θυρών. - Ομοίως, μπορείτε να ορίσετε το
nodePortσε μια υπηρεσία τύπου NodePort.
- Μπορείτε να ορίσετε το
Παραδείγματα διαμόρφωσης:
-
Υπηρεσία LoadBalancer:
// service.yaml apiVersion: v1 kind: Service metadata: name: my-app-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 type: LoadBalancer -
Υπηρεσία NodePort:
// service-nodeport.yaml apiVersion: v1 kind: Service metadata: name: my-app-service-np spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 nodePort: 30000 # προαιρετικά, το Kubernetes θα το αναθέσει αν δεν οριστεί type: NodePort -
Ingress (υπηρεσία ClusterIP):
// service-clusterip.yaml (υπάρχει ήδη) apiVersion: v1 kind: Service metadata: name: my-app-service-ci spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 type: ClusterIP// ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-app-ingress spec: rules: - host: myapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: my-app-service-ci port: number: 80
Η επιλογή εξαρτάται από τις απαιτήσεις κλιμάκωσης, ασφάλειας, περιβάλλοντος ανάπτυξης (cloud ή on-premise) και ανάγκης κεντρικής διαχείρισης πρόσβασης. Το Ingress είναι η προτιμώμενη λύση για παραγωγικά συστήματα.