我们有一个基于头盔的k8s应用程序,其中一个Pod(名为“ auth”)具有调用其自身进行CRUD操作以重置密码的代码。
由于正在调用自身,因此此操作正在使用端点URL http://localhost:8081/API/authorizations
问题:在本地k8s集群上部署相同的应用程序时,auth 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,是否意味着必须对群集网络进行故障排除才能解决此问题?
感谢提前添加了∆点。
1)在pod内使用localhost端点时,pod连接到k8s主服务器ha代理IP的预期行为是什么?
否,不希望连接到Master API Server进行localhost通信
2)对于AWS eks和azure aks,它仅指的是pod URL,是否意味着必须对群集网络进行故障排除才能解决此问题?
Exec进入广告连播
kubectl exec -it“ pod-name” -n“ namespace” bash
一旦在Pod内,检查某个进程是否正在侦听端口8081
ps -ef | grep“ 8081”
如果发现所需的进程正在运行并正在端口上侦听,请卷曲端点并检查是否返回响应
正在运行的图像上/etc/hosts
的内容是什么?我猜想它的配置错误或丢失,因此容器过程不是从那里获取正确的localhost
IP,而是向域名服务器询问。可能您的api服务器也是您的群集DNS,当被问及本地主机时,它会使用自己的IP进行响应。
作为一种快速的解决方法,您可以将程序更改为直接使用127.0.0.1
而不是localhost
。