如何从minikube的容器内到达Kafka?

fzsnzjdm  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(532)

我正在设置一个python应用程序,我想为Kafka生成一条消息。kafka服务器在我的计算机上本地运行(不是在minikube中),并且 app.py 在minikube的容器中运行。
密码 app.py 这是:

try:
    producer = KafkaProducer(bootstrap_servers=['addr:9092'])
    producer.send('flask.logs', json.dumps("HELLO").encode('utf-8'))
    producer.flush()
    print(f"[P-KAFKA] kafka log posted")
except Exception as e:
    print(f"[P-KAFKA] kafka bad posted")
    raise e

我试着做一些事情,比如:
localhost 代替 addr ,我将localhost的端口9092与minikube的端口9092桥接,但此解决方案不起作用。
192.168.1.3 (我的电脑的ip)代替 addr 还是不行。
我不知道该怎么办。
--解决方案——我使用了ngrok,基本上ngrok转发来自本地端口的流量,您可以在公共地址中选择。很酷。否则,这几乎是同一个问题:从minikube内部调用外部服务

fjaof16o

fjaof16o1#

kafka服务器在我的计算机上本地运行(不是minikube),app.py在minikube的容器中运行。
那你就不需要ngrok了。
minikube将请求路由到主机。您的主机包含一个正在运行的代理。从来就不需要外部服务,特别是不需要通过互联网路由。
您只需要在python代码中使用您的主机ip或dns名称,最好是通过一个环境变量,例如 KAFKA_BOOTSTRAP .
你需要把同样的地址添加到你的 server.properties 作为一个 advertised.listeners 地址

tzxcd3kk

tzxcd3kk2#

为此,我们可以使用ngrok。
有一篇很好的博客文章解释了如何使用ngrok通过https公开kubernetes服务
你有没有想过在互联网上公开一个运行在minikube上的kubernetes服务,并为它提供一个临时的https地址?如果是这样的话,那么ngrok是一个非常适合这样做没有任何防火墙,nat或dns配置。如果您正在开发一个使用webhooks或oauth回调的应用程序,ngrok可以在kubernetes服务和他们的云平台之间创建一个隧道,并为您提供一个唯一的https url,您可以使用它来测试和调试您的服务。
还有一篇关于ngrok的媒体服务的文章。
通常情况下,需要公开kubernetes中运行的应用程序 [minikube](https://kubernetes.io/docs/setup/minikube/) 到公共互联网。这篇文章只是提供了一个手册,但快速和肮脏的黑客使用这个 [**ngrok**](https://ngrok.com/) (以前可能做过,但现在还是这样)
我们将使用一个简单的 [nginx](https://www.nginx.com/) 应用程序测试的东西,即我们将公开一个nginx服务器(运行作为一个单一的副本kubernetes部署)作为一个公开访问的url。

相关问题