如何从 Kubernetes pod 中运行curl 命令

问题描述 投票:0回答:5

我有以下问题:

  1. 我使用以下命令登录到 Kubernetes pod:

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

    “ip addr show”命令显示为其分配的 pod 的 IP。由于 pod 是一个逻辑概念,我假设我登录的是 docker 容器而不是 pod,在这种情况下,pod IP 与 docker 容器 IP 相同。这样的理解正确吗?

  2. 从 Kubernetes 节点,我执行

    sudo docker ps
    ,然后执行以下操作:-

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

    这行不通。有人知道我做错了什么吗?

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

docker containers kubernetes
5个回答
95
投票

以下是如何在 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。
<POD ID>
curl-yourname-944940652-fvj28
类似。

编辑:请注意,您需要从终端登录谷歌云(一次),然后才能执行此操作!这是一个示例,请确保输入您的区域、集群和项目:

gcloud container clusters get-credentials example-cluster --zone europe-west1-c --project example-148812

26
投票

Kubernetes的想法是,pods分配在host上,但没有什么是确定或永久的,所以你不应该尝试从容器中查找容器或pod的IP,而应该使用Kubernetes 调用 Service

Kubernetes

Service 是通过 kube-proxy

 到具有一组定义的选择器的 pod 的路径,它将通过给定选择器将请求负载均衡到所有 pod。

简而言之:

例如,

创建一个带有名为“name”的

labelPod。就说吧name=mypod

例如,使用您称为 
name=mypod选择器 myService
 创建一个 
Service
,例如为其分配端口 
9000

然后您可以使用以下命令从 pod 卷曲到此服务提供的 pod

curl http://myService:9000



当然,这是假设您正在运行 DNS pod。 如果您在创建时请求

LoadBalancer 类型的 Service,并在 AWS 或 GKE 上运行,则该服务也可以从集群外部使用。对于仅限内部的服务,只需设置标志clusterIP: None

,外部就不会进行负载平衡。

请参阅此处的参考:

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


13
投票
这几天有一个官方的curl团队图片:

https://hub.docker.com/r/curlimages/curl

运行它:

kubectl run -it --rm --image=curlimages/curl 卷曲 --sh


12
投票
  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

     


0
投票
kubectl exec -n NAMESPACE -c CONTAINER PODNAME curl "URL"
    
© www.soinside.com 2019 - 2024. All rights reserved.