【发布时间】:2016-04-06 02:16:14
【问题描述】:
我在 coreos 上运行 kubernetes 单节点。
我创建了一个运行 python 应用程序并公开 http 端点的 pod。
我创建了一个暴露 HTTP 端点的 kubernetes 服务。我已经使用 NodePort 公开了这个服务,并且可以从集群外部成功调用它。
然后我正在尝试从 docker 容器调用 HTTP 服务。为了测试我只是使用相同的运行容器并使用 curl。
我可以docker exec 进入运行我的服务的 docker 容器。
nslookup for 'my-service' 解析为 IP 地址。所以我很高兴 DNS 服务注册工作正常。 (我还检查了服务的 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
【问题讨论】:
-
请与我们分享以下命令的输出:
curl -v http://my-service:9042/status -
感谢@IDvoretskyi 我已将 curl -v 信息以及 nsloookup 的输出添加到原始描述中。
-
@IDvoretskyi 我想我找到了问题所在。我正在测试 curl 命令的容器是托管服务的容器。如果我在另一个 Pod 的同一节点上启动另一个容器,则 curl 命令按预期工作。我想了解为什么会这样......
-
@gra-moore 你有什么发现
-
@RajeshRajendran 您是否发现为什么容器不能通过其服务名称引用自己?我正在运行一个 IdentityServer,它需要能够通过服务名称引用自己,当它这样做时,它会超时。我用 kubectl 连接到 pod 并尝试 curl 到它刚刚挂起的服务名称。
标签: kubernetes