【问题标题】:Kubernetes Service Port-Forwarded Locally is giving Connection RefusedKubernetes Service Port-Forwarded Locally 给 Connection Refused
【发布时间】:2023-03-16 15:40:02
【问题描述】:

我已经使用 kubectl 将外部 API 端口转发到 localhost:3000,并且能够通过 Postman、浏览器等发出请求和接收响应。但是,当我构建和部署 Spring 应用程序以使用该端口时-转发 API 地址和端口(即 localhost:3000)配置以接收和处理响应,检查部署它的本地 Kubernetes pod 的日志显示连接被拒绝:

java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)

我无法理解为什么本地部署的 pod 无法访问所提供的 URL,而它似乎可以正常工作。

【问题讨论】:

    标签: java docker kubernetes localhost


    【解决方案1】:

    听起来您正在将此 Spring 应用程序部署到 Kubernetes 集群。 Spring 应用部署时,会在容器内运行,localhost:3000 是应用运行所在 pod 的 3000 端口,而不是宿主机的 3000 端口。如果您无法使用 ingress 之类的方式访问此外部服务,也许您可​​以尝试在与 Spring 应用程序部署在同一 pod 中的单独容器中运行端口转发。

    【讨论】:

    • 我想我理解你的回复 - 所以除了部署另一个端口将外部服务转发到localhost:3000 在那个集群中?
    • 容器不能访问主机的端口,除非你配置docker网络使用主机网络。我不知道在本地主机上运行的 k8s 下这是否可能
    • 有道理 :) 但是可以将其配置为使用入口来使用外部服务,对吗?
    • 如果你在外部服务前面有一个入口,或者通过一个nodeport暴露出来,那么你就可以访问它。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2013-05-29
    • 2021-10-03
    • 2022-06-17
    • 2022-12-28
    • 1970-01-01
    • 2019-02-24
    • 2013-04-20
    相关资源
    最近更新 更多