我正在设置一个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
(我的PC计算机的IP)代替addr
仍然无法正常工作。
我不知道该怎么办。
-解决方案- 我使用ngrok,基本上ngrok在公共地址中转发您可以选择的本地端口的流量。 很酷。 否则,这几乎是相同的问题: Calling an external service from within Minikube
答案 0 :(得分:0)
为此,我们可以使用Ngrok。
有一篇不错的博客文章,解释了如何Expose Kubernetes services over HTTPS with Ngrok
您是否曾经想公开过Internet上Minikube上运行的Kubernetes服务并为其提供一个临时HTTPS地址?如果是这样,那么Ngrok非常适合无需任何防火墙,NAT或DNS配置的情况。如果您正在开发可与Webhooks或oauth回调一起使用的应用程序,则Ngrok可以在Kubernetes服务与其云平台之间创建一条隧道,并为您提供一个唯一的HTTPS URL,可用于测试和调试服务。
在Expose Kubernetes services with ngrok媒体上也有一篇文章。
很多时候,有必要将在
[minikube](https://kubernetes.io/docs/setup/minikube/)
中运行的Kubernetes应用暴露给公共互联网。这篇文章只是使用[**ngrok**](https://ngrok.com/)
为此提供了一个手动但又快速又肮脏的技巧(它可能以前已经做过,但还是可以做到)我们将使用一个简单的
[nginx](https://www.nginx.com/)
应用进行测试,即,将nginx服务器(作为单个副本Kubernetes Deployment运行)作为可公开访问的URL。
答案 1 :(得分:0)
kafka服务器在我的计算机上本地运行(不在minikube中),而app.py在minikube中的容器中运行。
然后,您不需要ngrok。
Minikube将请求路由到主机。您的主机包含一个正在运行的代理。永远不需要外部服务,尤其是无需通过Internet路由。
您只需要在Python代码中使用主机IP或DNS名称,最好使用一个环境变量,例如KAFKA_BOOTSTRAP
。
您需要将与server.properties
地址相同的地址添加到advertised.listeners