首页 > 解决方案 > kubernetes pod 尝试自行连接并失败,因为 http://localhost:

问题描述

我们有基于 helm 的 k8s 应用程序,其中一个 pod(名为“auth”)具有调用自身执行 CRUD 操作以重置密码的代码。

由于它在调用自己,因此此操作使用端点 URL http://localhost:8081/API/authorizations

问题: 在本地 k8s 集群上部署相同的应用程序时,身份验证 pod 无法自行连接。

错误: {"api":"external","component":"auth","delay":900000000,"error":"Post http://localhost:8081/api/authorizations: dial tcp 10.250.44.31:8081: connect: connection refused","insecureSkipVerify":false,"message":"Request failed, retrying","method":"POST","requestID":"fb9475e8-bcf9-4924-8339-d3d21922f357","severity":"debug","timestamp":"2020-02-10T11:54:29Z","url":"http://localhost:8081/api/authorizations"}

注意:10.250.44.31:8081 是集群端点 IP 地址

预期行为:在AWS eks 或 azure aks上运行此应用程序时,它可以正常运行所需的操作。

问题:

1) 在 pod 内使用 localhost 端点时,pod 连接到 k8s 主服务器的代理 IP 是否是预期行为?

2) 对于 AWS eks 和 azure aks,它仅指 pod URL,这是否意味着必须对我们的集群网络进行故障排除才能解决此问题?

感谢提前添加Δ点..

标签: kuberneteskubernetes-helmkubernetes-ingresskubernetes-pod

解决方案


1) 在 pod 内使用 localhost 端点时,pod 连接到 k8s 主服务器的代理 IP 是否是预期行为?

否,预计不会连接到 Master API Server 进行 localhost 通信

2) 对于 AWS eks 和 azure aks,它仅指 pod URL,这是否意味着我们的集群网络必须进行故障排除才能解决此问题?

执行到 pod

kubectl exec -it "pod-name" -n "命名空间" bash

进入 pod 后,检查是否某个进程正在侦听端口8081

ps -ef | grep "8081"

如果您发现所需的进程在端口上运行和侦听,则 curl 端点并检查您是否收到响应

curl -v http://localhost:8081/API/authorizations


推荐阅读