繁体   English   中英

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

[英]Unable to use curl and service name from inside kubernetes pod

我在coreos 上运行 kubernetes 单节点

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

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

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

我可以通过docker exec进入运行我的服务的 docker 容器。 “我的服务”的 nslookup 解析为 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

从评论来看,这听起来像是你成功了。

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

由于 Kubernetes v1.10 kubectl port-forward允许使用资源名称(例如服务名称)来选择匹配的 pod 以进行端口转发有了此连接,您可以使用本地工作站调试在 pod 中运行的应用程序。

捕获你的 pod PORT NUMBER

kubectl get pods [YOUR_PODE_NAME] --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'

假设我们有端口号 8080

kubectl port-forward [YOUR_PODE_NAME] 8080:8080

现在导航到本地计算机上的http://localhost:8080/以查看您的应用程序正在运行

在同一集群中的另一个 pod 上访问服务的另一种方法是使用服务的扩展网络名称,例如:

service-name: wash-disher
service-port: 8080
namespace: restaurant

kubectl run client --image=curlimages/curl --namespace test
kubectl -n test exec client-654845585c-s4fcw -- curl -v -Ss http://wash-disher.restaurant.svc.cluster.local:8080

在服务ip上通过nslookup可以找到:

$ kubectl -n test exec client-654845585c-s4fcw -- nslookup 10.96.183.177
Server:         10.96.5.5
Address:        10.96.5.5:53

a.b.c.d.in-addr.arpa      name = ingress-nginx.ingress-nginx.svc.cluster.local

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM