Skip to content

io.micronaut.kubernetes.client crashes while reading unexpected KubeApi response #934

@c-hoeger

Description

@c-hoeger

Expected Behavior

In case terminate-startup-on-exception is set to false, it should start and ignore the unexpected value.

micronaut:
  config-client:
    enabled: true
kubernetes:
  client:
    config-maps:
      terminate-startup-on-exception: false

Actual Behaviour

It crashes with the following exception:

2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/api  OUT<0-byte> IN <134-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/api/v1  OUT<0-byte> IN <unknown-length> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis  OUT<0-byte> IN <unknown-length> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/apiregistration.k8s.io/v1  OUT<0-byte> IN <465-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/apps/v1  OUT<0-byte> IN <2254-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/events.k8s.io/v1  OUT<0-byte> IN <308-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/authentication.k8s.io/v1  OUT<0-byte> IN <343-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/authorization.k8s.io/v1  OUT<0-byte> IN <679-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/autoscaling/v2  OUT<0-byte> IN <527-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/batch/v1  OUT<0-byte> IN <755-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/certificates.k8s.io/v1  OUT<0-byte> IN <678-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/networking.k8s.io/v1  OUT<0-byte> IN <896-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/policy/v1  OUT<0-byte> IN <481-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/rbac.authorization.k8s.io/v1  OUT<0-byte> IN <959-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/storage.k8s.io/v1  OUT<0-byte> IN <1338-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/admissionregistration.k8s.io/v1  OUT<0-byte> IN <1457-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/apiextensions.k8s.io/v1  OUT<0-byte> IN <561-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/scheduling.k8s.io/v1  OUT<0-byte> IN <338-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/coordination.k8s.io/v1  OUT<0-byte> IN <294-byte> 200
2025-09-11 08:50:37 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/node.k8s.io/v1  OUT<0-byte> IN <309-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/discovery.k8s.io/v1  OUT<0-byte> IN <315-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/flowcontrol.apiserver.k8s.io/v1  OUT<0-byte> IN <850-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/acme.cert-manager.io/v1  OUT<0-byte> IN <828-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/cert-manager.io/v1  OUT<0-byte> IN <1672-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/databases.spotahome.com/v1  OUT<0-byte> IN <342-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/dex.coreos.com/v1  OUT<0-byte> IN <2223-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/monitoring.coreos.com/v1  OUT<0-byte> IN <2369-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/networking.istio.io/v1  OUT<0-byte> IN <2917-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/security.istio.io/v1  OUT<0-byte> IN <1424-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/telemetry.istio.io/v1  OUT<0-byte> IN <498-byte> 200
2025-09-11 08:50:38 +0200 DEBUG [main] io.micronaut.kubernetes.client.OkHttpClientLogging.intercept:91 KubeApi GET https://10.233.0.1/apis/acme.easydns.com/v1alpha1  OUT<0-byte> IN <164-byte> 200
2025-09-11 08:50:38 +0200 ERROR [main] io.micronaut.runtime.Micronaut.handleStartupException:349 Error starting Micronaut server: Bean definition [io.micronaut.kubernetes.configuration.KubernetesConfigMapWatcher] could not be loaded: The required field `verbs` is not found in the JSON string: {"kind":"Challenge","name":"challenges","version":"v1alpha1"} io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [io.micronaut.kubernetes.configuration.KubernetesConfigMapWatcher] could not be loaded: The required field `verbs` is not found in the JSON string: {"kind":"Challenge","name":"challenges","version":"v1alpha1"}
	at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:2038)
	at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:323)
	at io.micronaut.context.DefaultBeanContext.configureAndStartContext(DefaultBeanContext.java:3342)
	at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:353)
	at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:225)
	at io.micronaut.runtime.Micronaut.start(Micronaut.java:75)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:334)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:320)
	at cloud.api.main.Application.main(Application.java:137)
Caused by: java.lang.IllegalArgumentException: The required field `verbs` is not found in the JSON string: {"kind":"Challenge","name":"challenges","version":"v1alpha1"}
	at io.kubernetes.client.openapi.models.V1APIResource.validateJsonElement(V1APIResource.java:441)
	at io.kubernetes.client.openapi.models.V1APIResourceList.validateJsonElement(V1APIResourceList.java:276)
	at io.kubernetes.client.openapi.models.V1APIResourceList$CustomTypeAdapterFactory$1.read(V1APIResourceList.java:301)
	at io.kubernetes.client.openapi.models.V1APIResourceList$CustomTypeAdapterFactory$1.read(V1APIResourceList.java:291)
	at com.google.gson.TypeAdapter$NullSafeTypeAdapter.read(TypeAdapter.java:314)
	at com.google.gson.Gson.fromJson(Gson.java:1359)
	at com.google.gson.Gson.fromJson(Gson.java:1260)
	at com.google.gson.Gson.fromJson(Gson.java:1228)
	at io.kubernetes.client.openapi.JSON.deserialize(JSON.java:894)
	at io.kubernetes.client.openapi.ApiClient.deserialize(ApiClient.java:926)
	at io.kubernetes.client.openapi.ApiClient.handleResponse(ApiClient.java:1143)
	at io.kubernetes.client.openapi.ApiClient.execute(ApiClient.java:1067)
	at io.kubernetes.client.Discovery.get(Discovery.java:192)
	at io.kubernetes.client.Discovery.resourceDiscovery(Discovery.java:173)
	at io.kubernetes.client.Discovery.findAll(Discovery.java:88)
	at io.kubernetes.client.Discovery.findAll(Discovery.java:82)
	at io.kubernetes.client.Discovery.findAll(Discovery.java:58)
	at io.micronaut.kubernetes.client.DiscoveryCache.getLastAPIDiscovery(DiscoveryCache.java:121)
	at io.micronaut.kubernetes.client.DiscoveryCache.find(DiscoveryCache.java:103)
	at io.micronaut.kubernetes.client.informer.resolvers.DefaultInformerNamespaceResolver.resolveInformerNamespaces(DefaultInformerNamespaceResolver.java:116)
	at io.micronaut.kubernetes.client.informer.ResourceEventHandlerBeanListener.onCreated(ResourceEventHandlerBeanListener.java:93)
	at io.micronaut.kubernetes.client.informer.ResourceEventHandlerBeanListener.onCreated(ResourceEventHandlerBeanListener.java:50)
	at io.micronaut.context.DefaultBeanContext.triggerBeanCreatedEventListener(DefaultBeanContext.java:2388)
	at io.micronaut.context.DefaultBeanContext.postBeanCreated(DefaultBeanContext.java:2365)
	at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3150)
	at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
	at io.micronaut.context.DefaultBeanContext.intializeEagerBean(DefaultBeanContext.java:3035)
	at io.micronaut.context.DefaultBeanContext.initializeEagerBean(DefaultBeanContext.java:2704)
	at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:2032)
	... 8 common frames omitted

Steps To Reproduce

No response

Environment Information

  • K8S version: v1.32.5
  • micronaut-platform: 4.8.3
  • micronaut-kubernetes-client: 7.0.0
  • also failing with io.kubernetes:client-java v24.0.0
  • Java version eclipse-temurin:24

Example Application

No response

Version

micronaut-platform: 4.8.3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions