Skip to content

Commit 442183a

Browse files
carloryaojea
andauthored
Fix crash on kube manager's service-lb-controller after v1.31.0. (kubernetes#128182)
* Fix crash on kube manager's service-lb-controller after v1.31.0. * Update cmd/kube-controller-manager/app/controllermanager_test.go Co-authored-by: Antonio Ojea <[email protected]> --------- Co-authored-by: Antonio Ojea <[email protected]>
1 parent f1e447b commit 442183a

File tree

3 files changed

+43
-5
lines changed

3 files changed

+43
-5
lines changed

cmd/kube-controller-manager/app/controllermanager_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,3 +219,29 @@ func TestTaintEvictionControllerGating(t *testing.T) {
219219
})
220220
}
221221
}
222+
223+
func TestNoCloudProviderControllerStarted(t *testing.T) {
224+
_, ctx := ktesting.NewTestContext(t)
225+
ctx, cancel := context.WithCancel(ctx)
226+
defer cancel()
227+
228+
controllerCtx := ControllerContext{
229+
Cloud: nil,
230+
LoopMode: IncludeCloudLoops,
231+
}
232+
controllerCtx.ComponentConfig.Generic.Controllers = []string{"*"}
233+
for _, controller := range NewControllerDescriptors() {
234+
if !controller.IsCloudProviderController() {
235+
continue
236+
}
237+
238+
controllerName := controller.Name()
239+
checker, err := StartController(ctx, controllerCtx, controller, nil)
240+
if err != nil {
241+
t.Errorf("Error starting controller %q: %v", controllerName, err)
242+
}
243+
if checker != nil {
244+
t.Errorf("Controller %q should not be started", controllerName)
245+
}
246+
}
247+
}

cmd/kube-controller-manager/app/core.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ func newServiceLBControllerDescriptor() *ControllerDescriptor {
9292
}
9393

9494
func startServiceLBController(ctx context.Context, controllerContext ControllerContext, controllerName string) (controller.Interface, bool, error) {
95+
logger := klog.FromContext(ctx)
96+
if controllerContext.Cloud == nil {
97+
logger.Info("Warning: service-controller is set, but no cloud provider specified. Will not configure service controller.")
98+
return nil, false, nil
99+
}
100+
95101
serviceController, err := servicecontroller.New(
96102
controllerContext.Cloud,
97103
controllerContext.ClientBuilder.ClientOrDie("service-controller"),
@@ -102,7 +108,7 @@ func startServiceLBController(ctx context.Context, controllerContext ControllerC
102108
)
103109
if err != nil {
104110
// This error shouldn't fail. It lives like this as a legacy.
105-
klog.FromContext(ctx).Error(err, "Failed to start service controller")
111+
logger.Error(err, "Failed to start service controller.")
106112
return nil, false, nil
107113
}
108114
go serviceController.Run(ctx, int(controllerContext.ComponentConfig.ServiceController.ConcurrentServiceSyncs), controllerContext.ControllerManagerMetrics)
@@ -261,6 +267,11 @@ func newCloudNodeLifecycleControllerDescriptor() *ControllerDescriptor {
261267

262268
func startCloudNodeLifecycleController(ctx context.Context, controllerContext ControllerContext, controllerName string) (controller.Interface, bool, error) {
263269
logger := klog.FromContext(ctx)
270+
if controllerContext.Cloud == nil {
271+
logger.Info("Warning: node-controller is set, but no cloud provider specified. Will not configure node lifecyle controller.")
272+
return nil, false, nil
273+
}
274+
264275
cloudNodeLifecycleController, err := cloudnodelifecyclecontroller.NewCloudNodeLifecycleController(
265276
controllerContext.InformerFactory.Core().V1().Nodes(),
266277
// cloud node lifecycle controller uses existing cluster role from node-controller

staging/src/k8s.io/cloud-provider/controllers/service/controller.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ func New(
108108
featureGate featuregate.FeatureGate,
109109
) (*Controller, error) {
110110
registerMetrics()
111+
111112
s := &Controller{
112113
cloud: cloud,
113114
kubeClient: kubeClient,
@@ -126,6 +127,10 @@ func New(
126127
lastSyncedNodes: make(map[string][]*v1.Node),
127128
}
128129

130+
if err := s.init(); err != nil {
131+
return nil, err
132+
}
133+
129134
serviceInformer.Informer().AddEventHandlerWithResyncPeriod(
130135
cache.ResourceEventHandlerFuncs{
131136
AddFunc: func(cur interface{}) {
@@ -180,10 +185,6 @@ func New(
180185
nodeSyncPeriod,
181186
)
182187

183-
if err := s.init(); err != nil {
184-
return nil, err
185-
}
186-
187188
return s, nil
188189
}
189190

0 commit comments

Comments
 (0)