Skip to content

Commit 49ffd32

Browse files
authored
Merge pull request #1276 from jichenjc/bug/1265
not assign floating ip when there are multiple controller nodes
2 parents c43aeae + 3c09540 commit 49ffd32

File tree

2 files changed

+37
-23
lines changed

2 files changed

+37
-23
lines changed

controllers/openstackmachine_controller.go

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -359,29 +359,37 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, scope
359359
return ctrl.Result{RequeueAfter: waitForInstanceBecomeActiveToReconcile}, nil
360360
}
361361

362-
if util.IsControlPlaneMachine(machine) {
363-
if openStackCluster.Spec.APIServerLoadBalancer.Enabled {
364-
err = r.reconcileLoadBalancerMember(scope, openStackCluster, machine, openStackMachine, instanceNS, clusterName)
365-
if err != nil {
366-
handleUpdateMachineError(scope.Logger, openStackMachine, errors.Errorf("LoadBalancerMember cannot be reconciled: %v", err))
367-
return ctrl.Result{}, nil
368-
}
369-
} else if !openStackCluster.Spec.DisableAPIServerFloatingIP {
370-
floatingIPAddress := openStackCluster.Spec.ControlPlaneEndpoint.Host
371-
if openStackCluster.Spec.APIServerFloatingIP != "" {
372-
floatingIPAddress = openStackCluster.Spec.APIServerFloatingIP
373-
}
374-
fp, err := networkingService.GetOrCreateFloatingIP(openStackMachine, openStackCluster, clusterName, floatingIPAddress)
375-
if err != nil {
376-
handleUpdateMachineError(scope.Logger, openStackMachine, errors.Errorf("Floating IP cannot be got or created: %v", err))
377-
return ctrl.Result{}, nil
378-
}
379-
port, err := computeService.GetManagementPort(openStackCluster, instanceStatus)
380-
if err != nil {
381-
err = errors.Errorf("getting management port for control plane machine %s: %v", machine.Name, err)
382-
handleUpdateMachineError(scope.Logger, openStackMachine, err)
383-
return ctrl.Result{}, nil
384-
}
362+
if !util.IsControlPlaneMachine(machine) {
363+
scope.Logger.Info("Not a Control plane machine, no floating ip reconcile needed, Reconciled Machine create successfully")
364+
return ctrl.Result{}, nil
365+
}
366+
367+
if openStackCluster.Spec.APIServerLoadBalancer.Enabled {
368+
err = r.reconcileLoadBalancerMember(scope, openStackCluster, machine, openStackMachine, instanceNS, clusterName)
369+
if err != nil {
370+
handleUpdateMachineError(scope.Logger, openStackMachine, errors.Errorf("LoadBalancerMember cannot be reconciled: %v", err))
371+
return ctrl.Result{}, nil
372+
}
373+
} else if !openStackCluster.Spec.DisableAPIServerFloatingIP {
374+
floatingIPAddress := openStackCluster.Spec.ControlPlaneEndpoint.Host
375+
if openStackCluster.Spec.APIServerFloatingIP != "" {
376+
floatingIPAddress = openStackCluster.Spec.APIServerFloatingIP
377+
}
378+
fp, err := networkingService.GetOrCreateFloatingIP(openStackMachine, openStackCluster, clusterName, floatingIPAddress)
379+
if err != nil {
380+
handleUpdateMachineError(scope.Logger, openStackMachine, errors.Errorf("Floating IP cannot be got or created: %v", err))
381+
return ctrl.Result{}, nil
382+
}
383+
port, err := computeService.GetManagementPort(openStackCluster, instanceStatus)
384+
if err != nil {
385+
err = errors.Errorf("getting management port for control plane machine %s: %v", machine.Name, err)
386+
handleUpdateMachineError(scope.Logger, openStackMachine, err)
387+
return ctrl.Result{}, nil
388+
}
389+
390+
if len(fp.PortID) != 0 {
391+
scope.Logger.Info("Floating IP already associated to a port:", "id", fp.ID, "fixed ip", fp.FixedIP, "portID", port.ID)
392+
} else {
385393
err = networkingService.AssociateFloatingIP(openStackMachine, fp, port.ID)
386394
if err != nil {
387395
handleUpdateMachineError(scope.Logger, openStackMachine, errors.Errorf("Floating IP cannot be associated: %v", err))

docs/book/src/clusteropenstack/configuration.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,12 @@ openstack floating ip create <public network>
153153

154154
Note: Only user with admin role can create a floating IP with specific IP.
155155

156+
Note: When associating a floating IP to a cluster with more than 1 controller node, the floatingIP will be
157+
associated to the first controller node and the other controller nodes have no floating IP assigned. When
158+
the controller node has the floating IP status down CAPO will NOT auto assign the floating IP address
159+
to any other controller node. So we recommend to only set one controller node when floating IP is needed,
160+
or please consider using load balancer instead, see [issue #1265](https://github.com/kubernetes-sigs/cluster-api-provider-openstack/issues/1265) for further information.
161+
156162
### Disabling the API server floating IP
157163

158164
It is possible to provision a cluster without a floating IP for the API server by setting

0 commit comments

Comments
 (0)