37 Networking Overview

37.1 Einführung

Das Netzwerkmodell in Kubernetes ist eine zentrale Komponente, die die Kommunikation zwischen den verschiedenen Komponenten und Diensten innerhalb eines Clusters ermöglicht. Kubernetes abstrahiert Netzwerkelemente, um eine nahtlose und skalierbare Netzwerkkommunikation zu gewährleisten. Diese Übersicht behandelt die grundlegenden Konzepte und Architekturen des Kubernetes-Netzwerks.

37.2 Kubernetes Netzwerkgrundlagen

Kubernetes definiert mehrere Netzwerkschichten und Konzepte, um die Kommunikation zu verwalten:

  1. Pods und IPs: Jeder Pod in Kubernetes erhält eine eigene IP-Adresse. Pods können direkt über ihre IP-Adressen miteinander kommunizieren, ohne NAT (Network Address Translation) verwenden zu müssen. Diese IP-Adressen sind innerhalb des Cluster-Netzwerks einzigartig.

  2. Services: Ein Service ist eine Kubernetes-Resource, die eine feste IP-Adresse und DNS-Namen bereitstellt, um eine Gruppe von Pods zu erreichen. Services ermöglichen die Lastverteilung und ermöglichen Pods, miteinander zu kommunizieren, selbst wenn sich die zugrunde liegenden Pods ändern.

  3. ClusterIP: Der Standardtyp eines Services, der eine interne IP-Adresse im Cluster bereitstellt. Dieser Service-Typ ist nur innerhalb des Clusters zugänglich.

  4. NodePort: Ein Service-Typ, der es ermöglicht, einen Service über eine bestimmte Portnummer auf jeder Node im Cluster zugänglich zu machen. Dies ermöglicht den externen Zugriff auf den Service.

  5. LoadBalancer: Ein Service-Typ, der einen externen Load Balancer konfiguriert (z. B. von einem Cloud-Provider bereitgestellt), um den Traffic zu den Pods zu verteilen.

  6. NetworkPolicies: Diese ermöglichen es Administratoren, den Netzwerkverkehr zu kontrollieren, der in und aus Pods fließt. NetworkPolicies definieren Regeln, die den erlaubten Traffic zwischen Pods und anderen Netzwerkendpunkten einschränken.

37.3 Netzwerk-Plugins (CNI)

Kubernetes verwendet Container Network Interface (CNI)-Plugins, um das Netzwerkverhalten zu implementieren. Diese Plugins ermöglichen die Konfiguration und Verwaltung des Netzwerkes für Pods und Nodes. Einige gängige CNI-Plugins sind:

37.4 Kubernetes DNS

Kubernetes bietet ein integriertes DNS-System, das es Pods ermöglicht, andere Dienste im Cluster über DNS-Namen zu finden. Jeder Service erhält einen DNS-Eintrag, der es ermöglicht, ihn durch seinen Namen aufzurufen.

Beispiel eines DNS-Namens:

<service_name>.<namespace>.svc.cluster.local

37.5 Networking Beispiele

Erstellen eines ClusterIP-Services:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Erstellen eines NodePort-Services:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30001

Erstellen einer NetworkPolicy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-specific
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 3306

Das Kubernetes-Netzwerkmodell bietet eine leistungsstarke und flexible Architektur zur Verwaltung der Kommunikation innerhalb eines Clusters. Durch die Verwendung von Services, NetworkPolicies und CNI-Plugins können Administratoren sicherstellen, dass die Netzwerkkommunikation sicher und effizient ist. Das Verständnis dieser Grundlagen ist entscheidend für die erfolgreiche Verwaltung und Skalierung von Kubernetes-Clustern.