我的问题类似于这个。我有一个 docker 镜像,其中包含一个使用 sys.stdin() 从命令行接受参数的 python 文件。我可以使用以下命令运行该镜像
cat 文件.csv | docker run -i -t my_image
它将 file.csv 的内容通过管道传输到图像,我得到了预期的输出。
现在我想将此映像部署到 kubernetes。我可以使用 docker 在服务器上运行该映像,没有任何问题。但根据这谷歌教程,如果我对其进行 curl 操作,它应该会返回响应,但我没有收到响应,因为我没有在任何端口上监听 Web 服务器。我继续使用以下命令构建部署。
kubectl run -i my_deployment --image=gcr.io/${PROJECT_ID}/my_image:v1 --port 8080
它构建了部署,我可以看到 Pod 正在运行。然后我将其公开。
kubectl 公开部署 my_deployment --type=LoadBalancer --port 80 --target-port 8080
但如果我尝试使用 curl 分配的 IP 来访问它,
它只是说连接被拒绝。
如何将此 docker 镜像部署为服务并将文件内容作为输入发送到服务?我需要一个 Web 服务器吗?
答案1
读取标准输入和读取网络请求是非常不同的事情。
如果您希望通过 HTTP 进行输入,那么您需要一个 HTTP 服务器来接收请求、解析它并将其发送到您的应用程序。
如果您只想要 TCP,而不是 HTTP,那就简单一些,您可能可以做一些事情来socat
监听套接字并将输出传递到 stdout 并通过您的应用程序进行管道传输。
但是 Kubernetes 中没有任何东西可以神奇地将 TCP/IP 转换为 stdin。