Skip to content

[Bug] KubeApiDiscovery Failed to synchronize Endpoints in namespace default #905

@zerda

Description

@zerda

Current Behavior

When deployed with helm chart in namespace default, Pod cryostat-v4 logs print Failed to syncronize Endpoints in namespace default error message.

2025-05-09 16:46:52,475 ERROR [io.cry.dis.KubeApiDiscovery] (executor-thread-1) Failed to syncronize Endpoints in namespace default: java.lang.NullPointerException: Cannot invoke "io.fabric8.kubernetes.api.model.ObjectReference.getNamespace()" because "ref" is null
	at io.cryostat.discovery.KubeApiDiscovery.tuplesFromEndpoints(KubeApiDiscovery.java:232)
	at io.cryostat.discovery.KubeApiDiscovery.getTargetTuplesFrom(KubeApiDiscovery.java:243)
	at io.cryostat.discovery.KubeApiDiscovery.lambda$handleQueryEvent$4(KubeApiDiscovery.java:300)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at io.cryostat.discovery.KubeApiDiscovery.handleQueryEvent(KubeApiDiscovery.java:312)
	at io.cryostat.discovery.KubeApiDiscovery_Subclass.handleQueryEvent$$superforward(Unknown Source)
	at io.cryostat.discovery.KubeApiDiscovery_Subclass$$function$$2.apply(Unknown Source)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequiresNew.doIntercept(TransactionalInterceptorRequiresNew.java:41)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequiresNew.intercept(TransactionalInterceptorRequiresNew.java:32)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequiresNew_Bean.intercept(Unknown Source)
	at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
	at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
	at io.cryostat.discovery.KubeApiDiscovery_Subclass.handleQueryEvent(Unknown Source)
	at io.cryostat.discovery.KubeApiDiscovery_ClientProxy.handleQueryEvent(Unknown Source)
	at io.cryostat.discovery.KubeApiDiscovery_handleQueryEvent_Invoker_-8wgLqvC_-i4engVkpoKZrK1uko.invoke(Unknown Source)
	at io.cryostat.discovery.KubeApiDiscovery_handleQueryEvent_LazyInvoker_-8wgLqvC_-i4engVkpoKZrK1uko.invoke(Unknown Source)
	at io.quarkus.vertx.runtime.EventConsumerInvoker.invokeBean(EventConsumerInvoker.java:79)
	at io.quarkus.vertx.runtime.EventConsumerInvoker.invoke(EventConsumerInvoker.java:51)
	at io.quarkus.vertx.runtime.VertxEventBusConsumerRecorder$3$1$2.call(VertxEventBusConsumerRecorder.java:158)
	at io.quarkus.vertx.runtime.VertxEventBusConsumerRecorder$3$1$2.call(VertxEventBusConsumerRecorder.java:154)
	at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$4(ContextImpl.java:192)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
	at io.vertx.core.impl.ContextImpl$1.execute(ContextImpl.java:221)
	at io.vertx.core.impl.WorkerTask.run(WorkerTask.java:56)
	at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:81)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:635)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)

Expected Behavior

kube-api discovery should be working in namespace default, with builtin name=kubernetes service.

Steps To Reproduce

  1. helm install cryostat cryostat-charts/cryostat;
  2. kubectl logs cryostat-v4-5df98d8c48-9c9jg;

Environment

- OS: macOS 15.3.2
- Environment: OrbStack 1.10.3
- Version: Cryostat 4.0.0

Anything else?

this kubernetes service in default namespace has no selector, so the endpoint is not ref to any pod.

apiVersion: v1
kind: Endpoints
metadata:
  creationTimestamp: "2024-11-14T23:05:38Z"
  labels:
    endpointslice.kubernetes.io/skip-mirror: "true"
  name: kubernetes
  namespace: default
  resourceVersion: "72"
  uid: 3f90a71d-3843-4a13-ba40-9bf1d274c8b2
subsets:
- addresses:
  - ip: 198.19.249.2
  ports:
  - name: https
    port: 26443
    protocol: TCP

not like other service, for example

apiVersion: v1
kind: Endpoints
metadata:
  annotations:
    endpoints.kubernetes.io/last-change-trigger-time: "2025-05-09T18:11:56Z"
  creationTimestamp: "2025-05-09T17:36:16Z"
  labels:
    app.kubernetes.io/component: cryostat
    app.kubernetes.io/instance: cryostat
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: cryostat
    app.kubernetes.io/part-of: cryostat
    app.kubernetes.io/version: 4.0.0
    helm.sh/chart: cryostat-2.0.0
  name: cryostat
  namespace: default
  resourceVersion: "36099"
  uid: 71457534-39fc-46c2-981b-450d8e02f4e5
subsets:
- addresses:
  - ip: 192.168.194.46
    nodeName: orbstack
    targetRef:
      kind: Pod
      name: cryostat-v4-5df98d8c48-9c9jg
      namespace: default
      uid: 40531965-e0c5-45a3-85f0-35f46422c7d1
  ports:
  - appProtocol: http
    name: http
    port: 4180
    protocol: TCP

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions