我正在运行 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 回答
从评论中,听起来你有这个工作 .
服务IP的流量通过kube-proxy转发,可以通过用户空间代理或通过iptables规则转发,具体取决于Kubernetes发行版本和配置 . 您可能希望查看与该容器对应的节点的iptables规则,以查看是否可能是问题的根源 .