首页 > 解决方案 > 虚拟机上的 Strimzi Kafka 外部侦听器入口错误

问题描述

我正在尝试使用 kubeadm、kubelet、containerd、Calico、MetalLb 在 VM 上运行的 Kubernetes 集群上部署带有 Strimzi 的 Kafka(VMWare Workstation 15 和 Ubuntu 20.04 在其上运行)。

我可以使用我指定的范围内的 IP 创建负载均衡器类型的入口 nginx 控制器服务,但是当我创建 Kafka 集群及其入口类型的外部侦听器并尝试关联 DNS 时,它会崩溃并出现错误:

等待命名空间中的入口资源 my-cluster-kafka-bootstrap 时超时超过 300000 毫秒,默认为可寻址

这是整个堆栈跟踪(来自 Strimzi 集群操作员日志)

2021-09-16 16:59:21 WARN AbstractOperator:481 - Reconciliation #100(timer) Kafka(default/my-cluster): 无法协调
io.strimzi.operator.common.operator.resource.TimeoutException: 等待命名空间中的 Ingress 资源 my-cluster-kafka-bootstrap 时超时超过 300000 毫秒,默认为可寻址
    在 io.strimzi.operator.common.Util$1.lambda$handle$1(Util.java:139) ~[io.strimzi.operator-common-0.25.0.jar:0.25.0]
    在 io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:128) ~[io.vertx.vertx-core-4.1.2.jar:4.1.2]
    在 io.vertx.core.impl.future.FutureBase.lambda$emitFailure$1(FutureBase.java:71) ~[io.vertx.vertx-core-4.1.2.jar:4.1.2]
    在 io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final]
    在 io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:469) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final]
    在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) [io.netty.netty-transport-4.1.66.Final.jar:4.1.66.Final]
    在 io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final]
    在 io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final]
    在 io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [io.netty.netty-common-4.1.66.Final.jar:4.1.66.Final]
    在 java.lang.Thread.run(Thread.java:829) [?:?]

这是我的 Kafka 集群清单

api版本:kafka.strimzi.io/v1beta2
种类:卡夫卡
元数据:
  名称:我的集群
规格:
  卡夫卡:
    版本:2.8.0
    复制品:1
    听众:
      - 名称:平原
        端口:9092
        类型:内部
        tls: 假的
        验证:
          类型:scram-sha-512
      - 名称:外部
        端口:9094
        类型:入口
        tls: 真的
        验证:
          类型:scram-sha-512
        配置:
          引导程序:
            主机:localb.kafka.xxx.com
          经纪人:
          - 经纪人:0
            主机:local.kafka.xxx.com

这是我的入口控制器服务

名称 类型 CLUSTER-IP EXTERNAL-IP PORT(S) 年龄选择器
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

您能帮帮我吗,您是如何在 Prem 上使用 Strimzi 部署 Kafka 的?

标签: kubernetesstrimzi

解决方案


Strimzi 的错误意味着Ingress资源缺少该.status部分。当 Nginx Ingress 控制器注册它们时,它通常将状态设置为如下所示:

  status:
    loadBalancer:
      ingress:
      - ip: 192.168.1.245

其中 IP 地址是 Ingress IP 地址(因此在您的情况下是10.104.187.226)。Strimzi 正在等待这一点,如果没有它,Ingresses 就不会做好准备

但在我们的案例中并没有发生这种情况。根据我的经验,这主要意味着 Ingress 控制器没有找到 Ingress 实例。它们可能在 Ingres 或注释中缺少正确的.spec,它们可能位于 Ingress 控制器未监视的命名空间中等。检查 Ingress 控制器的日志可能会有所帮助。


推荐阅读