NodePort

NodePort

Ein NodePort-Service erweitert einen ClusterIP-Service, indem er zusätzlich einen festen Port auf allen Node-IP-Adressen öffnet. Kubernetes reserviert einen Port aus einem vordefinierten Bereich (standardmäßig 30000–32767) und richtet auf jedem Worker-Node eine Regel ein, die Traffic an diesen Port auf die Service-Endpoints weiterleitet. Man kann den NodePort auch manuell vorgeben (sofern im erlaubten Bereich).

NodePort-Services sind aus dem Cluster heraus erreichbar, indem man die IP eines Cluster-Nodes und den NodePort ansteuert. Dies erlaubt einfache Tests oder den Aufbau eigener Load-Balancing-Lösungen. Allerdings sind NodePorts oft durch Firewalls eingeschränkt, und die Port-Range ist hoch (unpraktisch für standard Ports 80/443). Zudem wird jeder Node exponiert, was in Cloud-Umgebungen mit virtuellen IPs beachtet werden muss.

YAML-Beispiel für einen NodePort-Service mit festgelegtem Port:

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service
spec:
  type: NodePort                # Expose via NodePort
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - name: web
      protocol: TCP
      port: 80                  # ClusterIP service port
      targetPort: 80            # Container port
      nodePort: 30007           # Static NodePort (optional)

Erläuterung: Dieser Service wird auf jedem Node-IP auf Port 30007 erreichbar sein. Intern erhält er trotzdem eine ClusterIP, d.h. Pods im Cluster können weiterhin my-nodeport-service auf Port 80 nutzen, während externe Clients <NodeIP>:30007 verwenden. Wenn man keinen nodePort angibt, weist Kubernetes automatisch einen freien Port zu. NodePort eignet sich, wenn kein Cloud-LoadBalancer verfügbar ist oder um einen Service schnell zugänglich zu machen (z.B. in einem Bare-Metal-Testcluster). Für den produktiven Einsatz im Internet sind NodePorts wegen der statischen Ports und fehlenden Layer-7-Routing meist nachteilig.

Die Kommentare sind geschlossen.