我正在尝试将我的springboot应用程序(在minikube中运行)连接到本地主机(即笔记本电脑)上的kafka。
我尝试了很多东西,包括无头服务,没有选择器的服务,更新minikube \etc\hosts,但是都没有效果。
我从Spring启动收到错误,说引导程序中没有给出可解析的引导 url.servers
有人能告诉我我做错了什么吗?
我的无头服务
apiVersion: v1
kind: Service
metadata:
name: es-local-kafka
namespace: demo
spec:
clusterIP: None
---
apiVersion: v1
kind: Endpoints
metadata:
name: es-local-kafka
subsets:
- addresses:
- ip: "10.0.2.2"
ports:
- name: "kafkabroker1"
port: 9191
- name: "kafkabroker2"
port: 9192
- name: "kafkabroker3"
port: 9193
我的kafka应用程序属性:
kafka.bootstrap-servers=${LOCALHOST}:9191,${LOCALHOST}:9192,${LOCALHOST}:9193
我的配置映射:
apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: null
name: rr-config
namespace: demo
data:
LOCALHOST: es-local-kafka.demo.svc
不确定您是如何尝试连接在Minikube或本地系统上运行的服务,并希望在Minikube上利用kafka。
如果您的应用程序在本地系统上运行,而Kafka在minikube上运行
您也可以使用minikube的IP将应用程序连接到Kafka集群。
这里有一个很好的例子:https://github.com/d1egoaz/minikube-kafka-cluster
Git克隆:https://github.com/d1egoaz/minikube-kafka-cluster
cd minikube-kafka-cluster
kubectl apply -f 00-namespace/
kubectl apply -f 01-zookeeper/
kubectl apply -f 02-kafka/
kubectl apply -f 03-yahoo-kafka-manager/
kubectl get svc -n kafka-ca1 (Note the port of kafka 31445)
列出迷你库贝的IP
minikube ip
现在,从您的本地系统到minikube kafka,您可以连接,<code>http://minikube-ip:port您将在浏览器中看到kafka管理器的用户界面
如果您正在minikube上运行sprint引导应用程序
如果两个服务在同一个名称空间中运行,您只需使用服务名进行连接
sprint引导中的唯一服务名,如果需要端口,您也可以传递它
es-local-kafka
试着通过全面的服务
<servicename>.<namespace>.svc.cluster.local
无头服务有不同的用途,没有选择器的服务很奇怪,在这种情况下,您的服务将无法连接到POD。
我最终得到了修复,并且不需要我在问题中提到的所有疯狂的东西:
>
您需要确保您的 kafka 代理绑定到 0.0.0.0 而不是 127.0.0.0(本地主机)。默认情况下,在单节点 kafka 代理设置中,这是使用的。由于时间限制,以及这只是为了我的本地POC,我选择了这个(无论如何,prod都会有一个特定的可dns的kafka URL,并且不需要这样的本地主机恶作剧)
在应用程序属性文件的 kafka URL 中,您需要将 ip 作为 minikube ip,而不是本地主机。这与执行命令minikube ip
:)时将获得的IP相同
在这里阅读更多关于这是如何工作的:https://minikube.sigs.k8s.io/docs/handbook/host-access/