How to Migrate Load Balancers

Validated on 9 Mar 2021 • Last edited on 17 Apr 2025

DigitalOcean Kubernetes (DOKS) is a Kubernetes service with a fully managed control plane, high availability, and autoscaling. DOKS integrates with standard Kubernetes toolchains and DigitalOcean’s load balancers, volumes, CPU and GPU Droplets, API, and CLI.

When you migrate an application from a Kubernetes cluster to another, you can also migrate the associated load balancer service to the target cluster. Doing so preserves the external IP address of the load balancer that your application’s DNS record points to.

To migrate a load balancer, you first disown the load balancer service from the existing service and then reference the load balancer’s ID in the service of the new cluster. Disowning the load balancer from the existing service turns all mutating actions, such as load balancer creates, updates and deletes, that are driven through the service into no-ops.

Note
The new service’s cluster must reside in the same VPC as the original service for the load balancer ownership to be transferred successfully. For more information, see the VPC documentation.

Use the following workflow to migrate a load balancer from one cluster to another. Suppose you have a load balancer service named app that is associated with a production-v1 cluster and you want to move it to another cluster production-v2.

  1. Ensure that there are no load balancer-related error events in your existing service by running the following command:

    kubectl describe service <service-name>

    Fix any reported errors to bring the service into a stable state.

  2. Disown the load balancer by adding the following annotation in the service config file and setting it to true:

      kind: Service
      apiVersion: v1
      metadata:
      name: app
      annotations:
        kubernetes.digitalocean.com/load-balancer-id: c16b0b29-217b-48eb-907e-93cf2e01fb56
        service.kubernetes.io/do-loadbalancer-disown: "true"
      spec:
        selector:
          name: app
        ports:
          - name: http
          protocol: TCP
          port: 80
        type: LoadBalancer

Use kubectl apply to apply the update to the config file. Verify that the change applied correctly by running kubectl describe service <service-name> again.

Once the change applies, all mutating requests directed at the load balancer and driven through the service are ignored.

  1. Create a new service config file in the production-v2 cluster to use the load-balancer-id from the previous service config file.

    kind: Service
    apiVersion: v1
    metadata:
      name: app
      annotations:
        kubernetes.digitalocean.com/load-balancer-id: c16b0b29-217b-48eb-907e-93cf2e01fb56
    spec:
      selector:
        name: app
      ports:
        - name: http
          protocol: TCP
          port: 80
      type: LoadBalancer

    If you have other load balancer configuration annotations that you want to transfer to the new service, add them to the config file.

  2. Check the service events again to ensure that the DigitalOcean cloud control manager has finished reconciling the update.

    Once complete, the load balancer is owned by the new service and the traffic is routed to the new cluster.

  3. Delete the service from the old cluster or change it to another Kubernetes service type.

We can't find any results for your search.

Try using different keywords or simplifying your search terms.