我正在设置一个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内部调用外部服务
2条答案
按热度按时间fjaof16o1#
kafka服务器在我的计算机上本地运行(不是minikube),app.py在minikube的容器中运行。
那你就不需要ngrok了。
minikube将请求路由到主机。您的主机包含一个正在运行的代理。从来就不需要外部服务,特别是不需要通过互联网路由。
您只需要在python代码中使用您的主机ip或dns名称,最好是通过一个环境变量,例如
KAFKA_BOOTSTRAP
.你需要把同样的地址添加到你的
server.properties
作为一个advertised.listeners
地址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。