我如何从Kubernetes pod中运行curl命令

时间:2016-01-04 23:18:36

标签: docker containers kubernetes

我有以下问题: -

1:我使用以下命令登录Kubernetes窗格: -

./cluster/kubectl.sh exec my-nginx-0onux -c my-nginx -it bash

'ip addr show'

命令显示已分配pod的ip。由于pod是一个逻辑概念,我假设我登录了一个docker容器而不是pod,在这种情况下,pod ip与docker container ip相同。这种理解是否正确?

2:来自Kubernetes节点,我做sudo docker ps然后执行以下操作: -

sudo docker exec  71721cb14283 -it '/bin/bash'

这不起作用。有人知道我做错了吗?

3:我想使用curl从pod中访问我创建的nginx服务。如何在此pod或容器中安装curl以从内部访问服务。我想这样做是为了理解网络连接。

3 个答案:

答案 0 :(得分:21)

以下是在kubernetes网络中获取curl命令行以测试和探索内部REST端点的方法。

要获得在网络内运行的busybox的提示,请执行以下命令。 (提示是每个开发人员使用一个唯一的容器。)

kubectl run curl-<YOUR NAME> --image=radial/busyboxplus:curl -i --tty --rm

您可以省略--rm并保持实例运行以供以后重新使用。要在以后重复使用它,请键入:

kubectl attach <POD ID> -c curl-<YOUR NAME> -i -t

使用命令kubectl get pods,您可以看到所有正在运行的POD。这与curl-yourname-944940652-fvj28类似。

编辑:请注意,您需要先从终端登录谷歌云(一次)才能执行此操作!以下是一个示例,请务必放入您的区域,群集和项目:gcloud container clusters get-credentials example-cluster --zone europe-west1-c --project example-148812

答案 1 :(得分:3)

  1. Kubernetes使用IP-per-pod模型。同一个pod中的所有容器共享相同的IP地址,就像它们在同一主机上运行一样。

  2. 该命令应遵循docker exec [OPTIONS] CONTAINER COMMAND [ARG...]。在您的情况下,sudo docker exec -it 71721cb14283 '/bin/bash'应该有效。如果没有,您应该提供命令的输出。

  3. 这取决于您使用的图像。在容器中安装软件没有什么特别之处。对于nginx,请尝试apt-get update && apt-get install curl

答案 2 :(得分:3)

Kubernetes 的想法是 pods 是在主机上分配的,但没有任何确定或永久性,所以你不应该尝试从容器中查找容器或容器的IP,而不是使用Kubernetes所谓的服务

Kubernetes 服务是通过TiXmlElement* root = _waveDoc.FirstChildElement("root"); for(TiXmlElement* e = root->FirstChildElement("wave_manager"); e != NULL; e = e->NextSiblingElement("wave_manager")) { string wmName = e->Attribute("name"); } 定义了一组选择器的pod的路径,它将使请求选择器对所有pod进行负载均衡。

简而言之:

使用名为&#39; name&#39;的标签创建 Pod 例如。让我们说kube-proxy 使用您调用name=mypod选择器 name=mypod创建服务,例如,您为其分配端口myService

然后您可以使用来自pod的卷曲到此服务所服务的pod 9000

这假设您正在运行DNS pod。 如果在创建 LoadBalancer 类型的 Service 时要求它,并在AWS或GKE上运行,则此服务也可以从群集外部获得。对于仅内部服务,只需设置标志curl http://myService:9000,它就不会在外部进行负载平衡。

参见此处的参考资料:

https://kubernetes.io/docs/concepts/services-networking/service/ https://kubernetes.io/docs/tutorials/services/