From d9299d64aac285967bf6407942935f7c636f8e8d Mon Sep 17 00:00:00 2001 From: Jociele Padilha Date: Tue, 2 Jun 2026 17:09:21 +0200 Subject: [PATCH] handle LoadBalancer to NodePort service type transition --- pkg/cluster/resources.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/cluster/resources.go b/pkg/cluster/resources.go index ed3eb3d75..7adae9846 100644 --- a/pkg/cluster/resources.go +++ b/pkg/cluster/resources.go @@ -324,7 +324,15 @@ func (c *Cluster) updateService(role PostgresRole, oldService *v1.Service, newSe // patch does not work because of LoadBalancerSourceRanges field (even if set to nil) oldServiceType := oldService.Spec.Type newServiceType := newService.Spec.Type - if newServiceType == "ClusterIP" && newServiceType != oldServiceType { + if newServiceType != oldServiceType && oldServiceType == v1.ServiceTypeLoadBalancer { + // Kubernetes rejects updates that change type away from LoadBalancer while + // loadBalancerSourceRanges is still set; clear it before updating + newService.Spec.LoadBalancerSourceRanges = nil + newService.ResourceVersion = oldService.ResourceVersion + if newServiceType == v1.ServiceTypeClusterIP { + newService.Spec.ClusterIP = oldService.Spec.ClusterIP + } + } else if newServiceType == v1.ServiceTypeClusterIP && newServiceType != oldServiceType { newService.ResourceVersion = oldService.ResourceVersion newService.Spec.ClusterIP = oldService.Spec.ClusterIP }