使用 Strimzi 对 Kafka 的外部访问
Posted
技术标签:
【中文标题】使用 Strimzi 对 Kafka 的外部访问【英文标题】:External access to Kafka using Strimzi 【发布时间】:2021-12-13 12:53:00 【问题描述】:我正在尝试按照以下指南使用 Strimzi 提供对 Kafka 的双向外部访问:Red Hat Developer - Kafka in Kubernetes
我的YAML取自Strimizi examples on GitHub,如下:
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
version: 3.0.0
replicas: 1 #3
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
- name: external
port: 9094
type: loadbalancer
tls: false
configuration:
#externalTrafficPolicy: Local
#loadBalancerSourceRanges:
# - 10.0.0.200/32
brokers:
- broker: 0
advertisedHost: 10.0.0.200
advertisedPort: 30123
config:
offsets.topic.replication.factor: 1 #3
transaction.state.log.replication.factor: 1 #3
transaction.state.log.min.isr: 1 #2
log.message.format.version: "3.0"
inter.broker.protocol.version: "3.0"
storage:
type: ephemeral
zookeeper:
replicas: 1 #3
storage:
type: ephemeral
entityOperator:
topicOperator:
userOperator:
在运行 kubectl get services
时,我会看到以下内容:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 48m
my-cluster-kafka-0 LoadBalancer 10.107.190.96 <pending> 9094:31964/TCP 29m
my-cluster-kafka-bootstrap ClusterIP 10.99.34.246 <none> 9091/TCP,9092/TCP,9093/TCP 43m
my-cluster-kafka-brokers ClusterIP None <none> 9090/TCP,9091/TCP,9092/TCP,9093/TCP 43m
my-cluster-kafka-external-bootstrap LoadBalancer 10.99.91.68 <pending> 9094:31442/TCP 29m
my-cluster-zookeeper-client ClusterIP 10.101.216.35 <none> 2181/TCP 45m
my-cluster-zookeeper-nodes ClusterIP None <none> 2181/TCP,2888/TCP,3888/TCP 45m
注意my-cluster-kafka-0
和my-cluster-kafka-external-bootstrap
有一个<pending>
EXTERNAL-IP
。我的 YAML 文件中缺少什么来提供对 my-cluster-kafka-0
的双向外部访问?
【问题讨论】:
我一直在深入研究 Strimzi 文档,发现 5.2. Setting up access for clients outside of Kubernetes 示例指定了authorization
部分。如果我要使用 kcat 进行测试,是否仍需要这样做?
以上与3.2. Accessing Kafka using loadbalancers 冲突,但显示我可能缺少的只是 CA 证书。谁能证实这一点?
【参考方案1】:
Strimzi 刚刚创建了 Loadbalancer
类型的 Kubernetes 服务。由您的 Kubernetes 集群来配置负载均衡器并设置 Strimzi 可以使用的外部地址。当外部地址列为pending
时,表示负载均衡器尚未(尚未)创建。在一些可能需要几分钟的公共云中,所以它可能只是等待它。但请记住,并非所有环境都支持负载均衡器=>,当它们不受支持时,您就无法真正使用它们。所以你真的需要仔细检查你的环境是否支持它们。通常,不同的云会支持负载均衡器,而一些本地或裸机环境可能不支持(但这取决于)。
我也不确定你为什么要配置广告主机和端口:
advertisedHost: 10.0.0.200
advertisedPort: 30123
使用负载均衡器时(假设您的环境支持它们),您通常希望使用负载均衡器地址,该地址将自动设置为广告主机/端口。除此之外,您的 YAML 看起来不错,但可能缺少负载均衡器支持。
【讨论】:
感谢您在 Strimzi Jakub 上所做的工作!对于像我这样试图让事情正常工作而不必学习 K8s 的人来说,这是一个真正的救星 :)。明白了,那我需要查看 MiniKube 文档。我添加广告主机和广告端口是最后一次尝试让某些东西正常工作。 对于同一条船上的其他人来说,这是用户错误。您需要为 MiniKube 运行minikube tunnel
来生成生成 IP。请参阅How to access applications running within minikube 了解更多信息。以上是关于使用 Strimzi 对 Kafka 的外部访问的主要内容,如果未能解决你的问题,请参考以下文章
Strimzi Kafka外部侦听器VM上的入口错误[关闭]
Strimzi Kafka Bridge(桥接)实战之一:简介和部署
Strimzi Kafka Bridge(桥接)实战之一:简介和部署