如何从Kubernetes窗格中运行curl命令

我有以下问题:

1:我使用以下命令login到Kubernetes窗格: –

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

'ip addr show'

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

2:从一个Kubernetes节点,我做sudo docker ps docker sudo docker ps ,然后执行以下操作: –

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

这不工作。 有人知道我在做什么错吗?

3:我想访问我创build的nginx服务,使用curl从pod内部。 我怎样才能在这个容器或容器内安装curl从内部访问服务。 我想这样做来了解networking连接。

以下是您如何在kubernetesnetworking中获得curl命令行来testing和探索您的内部REST端点。

要获得在networking中运行的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。

编辑:请注意,你需要从terminal(一次)login到谷歌云之前,你可以这样做! 下面是一个例子,确保把你的区域,集群和项目: gcloud container clusters get-credentials example-cluster --zone europe-west1-c --project example-148812

  1. Kubernetes使用IP-per-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

Kubernetes的想法是豆荚是在主机上分配的,但没有任何确定或永久的东西,所以你不应该试图从你的容器中查找容器或豆荚的IP,而应该使用Kubernetes称之为服务的东西

Kubernetes 服务是通过kube-proxy ,通过一组定义select器的podpath,它将负载平衡请求到给定select器的所有pod。

简而言之:

例如,创build一个名为“name”的标签Pod 。 比方说, name=mypod创build一个服务select器 name=mypod ,你调用myService例如,你分配端口9000例如。

那么你可以使用curl http://myService:9000从一个容器curl到这个服务提供的容器

这假设你有DNS pod运行当然。 如果在创build服务时请求LoadBalancertypes的服务 ,并在AWS或GKE上运行,则此服务也将从群集外部可用。 对于仅内部服务,只需设置标志clusterIP: None ,并且不会在外部进行负载平衡。

在这里看到参考:

http://kubernetes.io/v1.1/docs/user-guide/services.html