Strimzi Kafka外部侦听器VM上的入口错误[关闭]

Posted

技术标签:

【中文标题】Strimzi Kafka外部侦听器VM上的入口错误[关闭]【英文标题】:Strimzi Kafka external listeners Ingress error on VM [closed] 【发布时间】:2021-11-12 02:30:45 【问题描述】:

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

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

等待命名空间默认可寻址的 Ingress 资源 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 的?

【问题讨论】:

看来这是关键点:Exceeded timeout of 300000ms while waiting for Ingress resource my-cluster-kafka-bootstrap in namespace default to be addressabledefault namespace 中是否有任何 Ingress 称为 my-cluster-kafka-bootstrap ?看起来它应该存在。 kubectl get ingress -n default my-cluster-kafka-bootstrap 返回什么? 【参考方案1】:

来自 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 或注释中缺少正确的 class 名称,它们可能位于 Ingress 控制器未监视的命名空间中等。检查 Ingress 控制器的日志可能会有所帮助.

【讨论】:

谢谢@Jakub!你完全正确!你已经结束了我的问题,我不能投票给你的答案,但每一个字都是正确的;这是缺少入口类...

以上是关于Strimzi Kafka外部侦听器VM上的入口错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

srimzi - 无法从外部 m/c 访问 Kafka 代理

使用 SSL 的 Kubernetes 上的 Kafka

Strimzi Kafka 与 Azure 存储类兼容?

Strimzi kafka 出口商 kafka_consumergroup_members 指标

如何在 Strimzi 中使用 Kafka 连接

Strimzi / Kafka Connect 找不到我的插件