kubernetes pod尝试自行连接并失败,因为http:// localhost:<port>

时间:2020-02-12 07:35:18

标签: kubernetes kubernetes-helm kubernetes-ingress kubernetes-pod

我们有一个基于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主服务器ha代理IP的预期行为是什么?

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

感谢提前添加∆点。

2 个答案:

答案 0 :(得分:1)

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

否,不希望连接到Master API Server进行localhost通信

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

执行进入吊舱

kubectl exec -it“ pod-name” -n“ namespace” bash

在容器内,检查是否有某个进程正在监听端口8081

ps -ef | grep“ 8081”

如果您发现所需的进程正在端口上运行并在监听,请对端点进行卷曲并检查是否正在获得响应

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

答案 1 :(得分:0)

正在运行的图像上/etc/hosts的内容是什么?我猜想它的配置错误或丢失,因此容器过程不是从那里获取localhost的正确IP,而是向域名服务器询问。可能您的api服务器也是您的群集DNS,当被问及本地主机时,它会使用自己的IP进行响应。

作为一种快速的解决方法,您可以将程序更改为直接使用127.0.0.1而不是localhost