如何从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
-
Kubernetes使用IP-per-pod模式。 同一个容器中的所有容器共享相同的IP地址,就像它们在同一主机上运行一样。
-
该命令应该遵循
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
。 在你的情况下,sudo docker exec -it 71721cb14283 '/bin/bash'
应该工作。 如果没有,你应该提供你的命令的输出。 -
这取决于你使用的图像。 在容器中安装软件没有什么特别之处。 对于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
,并且不会在外部进行负载平衡。
在这里看到参考: