提问者:小点点

如何从kubernetes (minikube)内的应用程序连接到本地主机(主机)上的kafka


我正在尝试将我的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

共2个答案

匿名用户

不确定您是如何尝试连接在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/