首页 文章

无法使用kubernetes pod中的curl和服务名称

提问于
浏览
3

我正在运行 kubernetes single node on coreos .

我创建了一个运行python应用程序的pod并公开了一个http endpoints .

我创建了一个公开HTTP endpoints 的kubernetes服务 . 我已经使用NodePort公开了这项服务,并且可以从集群外部成功调用它 .

我当时尝试的是从docker容器调用HTTP服务 . 测试我只是使用相同的运行容器并使用curl .

我可以 docker exec 进入运行我的服务的docker容器 . nslookup for 'my-service'解析为IP地址 . 所以我很高兴 DNS service registration is working correctly . (我还检查了服务的ENV变量是否存在 - 它们与 nslookup 返回的值相同并且相同)

但是,如果我然后尝试:

curl http://my-service:9042/status

它只是挂起而没有回应 . (端口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...

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

1 回答

  • 0

    从评论中,听起来你有这个工作 .

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

相关问题