【发布时间】:2022-04-22 16:29:19
【问题描述】:
我使用 istio-ingress gateway 和 virtualservice 来暴露不同的微服务。到目前为止,它们都是 http 服务,因此可以直接按照 istio 的文档进行操作。
但是对于 kafka,我遇到了一些问题。我正在使用bitnami/kafka helm chart 进行 kafka 安装。这是用于它的 values.yaml:
global:
storageClass: "kafka-sc"
replicaCount: 3
deleteTopicEnable: true
resources:
requests:
memory: 1024Mi
cpu: 500m
limits:
memory: 2048Mi
cpu: 1000m
zookeeper:
replicaCount: 3
resources:
requests:
memory: 1024Mi
cpu: 500m
limits:
memory: 2048Mi
cpu: 1000m
此部署在此端点上公开 kafka:my-kafka.kafka.svc.cluster.local:9092
我希望可以使用入口控制器通过 Internet 访问此端点。因此,我应用了以下 Kubernetes 清单 -->
A. kafka-ingress-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: kafka-ingress-gateway
namespace: kafka
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 9092
name: tcp
protocol: TCP
hosts:
- "kafka.<public_domain>"
B. kafka-ingress-virtualservice.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: kafka-ingress-virtualservice
namespace: kafka
spec:
hosts:
- "kafka.<public_domain>"
gateways:
- kafka/kafka-ingress-gateway
tcp:
- match:
- port: 9092
route:
- destination:
host: my-kafka.kafka.svc.cluster.local
port:
number: 9092
为了验证这是否有效,我使用以下方法:
- 创建一个 kafka-client pod 并在两个不同的终端中登录它
- 在第一个终端中,我使用以下命令在名为
test的主题中生成:kafka-console-producer.sh --broker-list my-kafka-0.my-kafka-headless.kafka.svc.cluster.local:9092 --topic test - 在第二个终端中,我使用此命令在
test主题中消费。
在这里,这有效:kafka-console-consumer.sh --bootstrap-server my-kafka.kafka.svc.cluster.local:9092 --topic test --from-beginning
这不起作用:kafka-console-consumer.sh --bootstrap-server kafka.<public_domain>:9092 --topic test --from-beginning
我收到此错误:WARN [Consumer clientId=consumer-console-consumer-89304-1, groupId=console-consumer-89304] Bootstrap broker kafka.<public_domain>:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
我是 kafka 的新手,所以不确定公开消费者端点还需要什么。从关于 stackoverflow 的类似问题中,我注意到我们应该使用 define "advertisedListeners" in kafka config,但不确定应该放什么值。
如果我在这里遗漏任何细节,请告诉我。
【问题讨论】:
-
您是如何配置集群的?它是本地还是云托管?您使用的是什么版本的 Kuberentes 和 Istio?
-
它在 AWS EKS 上。 Kubernetes 版本:1.17,Istio 版本:1.7.1
-
@Grimlock 你找到解决方案了吗?当通过 Istio 虚拟服务暴露 kafka 代理的无头服务时,我也遇到了同样的问题。
-
不,很遗憾我没有。 @角斗士
标签: kubernetes apache-kafka kubernetes-helm kubernetes-ingress istio