Floating IP zwischen Services übertragen

Dieses Tutorial zeigt, wie eine bestehende Floating IP von einem Kubernetes LoadBalancer Service auf einen anderen übertragen wird — ohne dass die IP freigegeben und neu zugewiesen werden muss.

Anwendungsfall: Neue Version eines Services soll unter derselben IP erreichbar sein, z.B. bei einem Blue/Green-Deployment oder einem Service-Rename.

Voraussetzungen

  • Ein bestehender LoadBalancer Service mit zugewiesener Floating IP
  • kubectl-Zugriff auf den Cluster

Schritt 1 — Aktuelle Floating IP ermitteln

kubectl get svc <alter-service-name>

Die Floating IP steht in der Spalte EXTERNAL-IP. Alternativ:

kubectl get svc <alter-service-name> -o jsonpath='{.metadata.annotations.loadbalancer\.openstack\.org/load-balancer-address}'

Notiere die IP für die folgenden Schritte.


Schritt 2 — Floating IP am alten Service reservieren

Falls die Annotation keep-floatingip noch nicht gesetzt ist, jetzt hinzufügen:

kubectl annotate svc <alter-service-name> \
  loadbalancer.openstack.org/keep-floatingip="true"

Schritt 3 — Alten Service löschen

kubectl delete svc <alter-service-name>

Der LoadBalancer in OpenStack wird entfernt, die Floating IP bleibt jedoch reserviert.


Schritt 4 — Neuen Service mit der Floating IP erstellen

Im Manifest des neuen Services die Floating IP über spec.loadBalancerIP und die Annotations referenzieren:

apiVersion: v1
kind: Service
metadata:
  name: <neuer-service-name>
  annotations:
    loadbalancer.openstack.org/keep-floatingip: "true"
    loadbalancer.openstack.org/load-balancer-address: <FloatingIP>
spec:
  type: LoadBalancer
  loadBalancerIP: <FloatingIP>
  selector:
    app: <neues-app-label>
  ports:
    - port: 80
      targetPort: 8080
kubectl apply -f <neuer-service>.yaml

Schritt 5 — Zuweisung prüfen

kubectl get svc <neuer-service-name>

Nach 1–2 Minuten erscheint die Floating IP in der Spalte EXTERNAL-IP. Der CCM kann einen kurzen Moment benötigen, bis der neue LoadBalancer provisioniert und die IP zugewiesen ist.


Hinweise

  • Zwischen dem Löschen des alten und dem Erstellen des neuen Services entsteht eine kurze Downtime.
  • keep-floatingip: "true" sollte im neuen Service gesetzt bleiben, damit die IP auch bei zukünftigen Löschvorgängen erhalten bleibt.
  • Falls die IP nach dem Löschen des alten Services nicht mehr bekannt ist, bitte ein Support-Ticket im Kundenportal eröffnen.