Strimzi Kafka external listeners Ingress error on VM

9/17/2021

I'm trying to deploy Kafka with Strimzi on a Kubernetes Cluster runnng on VM (VMWare Workstation 15 and Ubuntu 20.04 running on it), using kubeadm, kubelet, containerd, Calico, MetalLb.

I can create the ingress nginx controller service of type loadbalancer with IP from range that I have specified, but when i create the Kafka cluster and its external listeners of type ingress and try to associate the DNS it crashes with error:

Exceeded timeout of 300000ms while waiting for Ingress resource my-cluster-kafka-bootstrap in namespace default to be addressable

This is the whole stack trace (from Strimzi cluster operator logs)

<pre>2021-09-16 16:59:21 WARN AbstractOperator:481 - Reconciliation #100(timer) Kafka(default/my-cluster): Failed to reconcile io.strimzi.operator.common.operator.resource.TimeoutException: Exceeded timeout of 300000ms while waiting for Ingress resource my-cluster-kafka-bootstrap in namespace default to be addressable at io.strimzi.operator.common.Util$1.lambda$handle$1(Util.java:139) ~[io.strimzi.operator-common-0.25.0.jar:0.25.0] at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:128) ~[io.vertx.vertx-core-4.1.2.jar:4.1.2] at io.vertx.core.impl.future.FutureBase.lambda$emitFailure$1(FutureBase.java:71) ~[io.vertx.vertx-core-4.1.2.jar:4.1.2] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) [io.netty.netty-transport-4.1.66.Final.jar:4.1.66.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final] at java.lang.Thread.run(Thread.java:829) [?:?] </pre>

This is my Kafka Cluster manifest

<pre> apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: kafka: version: 2.8.0 replicas: 1 listeners: - name: plain port: 9092 type: internal tls: false authentication: type: scram-sha-512 - name: external port: 9094 type: ingress tls: true authentication: type: scram-sha-512 configuration: bootstrap: host: localb.kafka.xxx.com brokers: - broker: 0 host: local.kafka.xxx.com </pre>

and this is my ingress controller service

<pre> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR ingress-nginx-controller LoadBalancer 10.111.221.8 10.104.187.226 80:30856/TCP,443:31698/TCP 14h app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx </pre>

Could you please help me out, how did you deloy Kafka with Strimzi on prem?

-- Oana
kubernetes
strimzi

1 Answer

9/17/2021

The error from Strimzi means that the Ingress resources are missing the .status section. When the Nginx Ingress controller registers them, it normally sets the status to something like this:

  status:
    loadBalancer:
      ingress:
      - ip: 192.168.1.245

where the IP address is the Ingress IP address (so in your case it would be 10.104.187.226). Strimzi is waiting for this and without it will not see the Ingresses as ready.

But that did not happened in our case. From my experience, that mostly means that the Ingress controller had not found the Ingress instances. They might be missing the right class name in the Ingres .spec or in the annotation, they might be in a namespace the Ingress controller is not watching for etc. Checking the log of the Ingress controller might help.

-- Jakub
Source: StackOverflow