无法从Kubernetes Pod内部使用curl和服务名称

gra*_*ore 5 kubernetes

我在coreos上运行kubernetes单节点

我创建了一个运行python应用程序并公开http端点的pod。

我创建了一个暴露HTTP端点的kubernetes服务。我已经使用NodePort公开了该服务,并且可以从集群外部成功调用它。

我要尝试的是从docker容器调用HTTP服务。为了测试,我只是使用相同的运行容器并使用curl。

我可以docker exec进入运行服务的docker容器中。“ my-service”的nslookup解析为IP地址。因此,我很高兴DNS服务注册可以正常工作。(我还检查了该服务的ENV变量是否存在-并且确实存在并且与从返回的值相同nslookup

但是,如果我尝试:

curl http://my-service:9042/status
Run Code Online (Sandbox Code Playgroud)

它只是挂起而没有任何响应。(端口9042是正确的端口,状态是有效的资源)

我假设我确实缺少一些明显的东西。任何建议都受到热烈欢迎。

更新:

curl -v的响应是:

root@lake-cluster-manager:/# curl -v http://lake-service:9042/status
* Hostname was NOT found in DNS cache
*   Trying 10.3.0.128...
Run Code Online (Sandbox Code Playgroud)

nslookup的输出是:

root@lake-cluster-manager:/# nslookup lake-service   
Server:     10.3.0.10
Address:    10.3.0.10#53

Name:   lake-service.default.svc.cluster.local
Address: 10.3.0.128
Run Code Online (Sandbox Code Playgroud)

小智 3

从评论来看,听起来你已经成功了。

到服务 IP 的流量通过 kube-proxy 转发,可以通过用户空间代理或通过 iptables 规则转发,具体取决于 Kubernetes 发行版本和配置。您可能需要查看与该容器对应的节点的 iptables 规则,看看这是否是问题的根源。