【问题标题】:Kubernetes: How to get other pods' name from within a pod?Kubernetes:如何从一个 pod 中获取其他 pod 的名称?
【发布时间】:2021-06-07 21:54:09
【问题描述】:

我想找出在同一个单主机集群中运行的其他 pod 的名称。所有 pod 都是单应用程序容器。我有充当 TCP/IP 服务器的 pod A(用 Java 编写)和一些其他 pod(用 C++ 编写)连接到服务器。

在 pod A 中,我可以获取客户端(其他 pod)的 IP 地址。我如何获得他们的豆荚的名字?我无法运行 kubectl 命令,因为 pod A 没有安装 kubectl。

谢谢,

【问题讨论】:

  • 你可以试试 nslookup <ip-address> 的反向 dns 吗?
  • @P... 我试过了。 nslookup 返回 pod 的主机名,它可能与 pod 名称不匹配

标签: kubernetes


【解决方案1】:

您可以直接使用 cURL 调用 kube-apiserver。

  • 首先,您需要有一个绑定到 clusterrole 的 serviceaccount 才能向 apiserver 发送请求。

    kubectl create clusterrole listpods --verb=get,list,watch --resource=pods

    kubectl create clusterrolebinding listpods --clusterrole=listpods --serviceaccount=default:default

  • 在容器中获取外壳

    kubectl exec -it deploy/YOUR_DEPLOYMENT -- sh

  • 为你的 cURL 定义必要的参数,在容器内运行下面的命令

    APISERVER=https://kubernetes.default.svc SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace) TOKEN=$(cat ${SERVICEACCOUNT}/token) CACERT=${SERVICEACCOUNT}/ca.crt

  • 向 apiserver 发送 pod 列表请求

    curl -s -k -H "Authorization: Bearer $TOKEN" -H 'Accept: application/json' $APISERVER/api/v1/pods | jq "[ .items[] | .metadata.name ]"

完成!它将返回一个“kubectl get pods”的 json 列表

更多示例,您可以查看OpenShift RestAPI Reference。另外,如果你打算做一些程序化的东西,我建议你结帐official kubernetes-clients

将 jq 改进为 @moonkotte

【讨论】:

  • 我可能会在这个答案中添加可能在主机上安装jq,它会使用curl -s -k -H "Authorization: Bearer $TOKEN" -H 'Accept: application/json' $APISERVER/api/v1/pods | jq "[ .items[] | .metadata.name ]" 命令提供简单而漂亮的输出。 -s 静音模式。
  • 谢谢!我添加了你的改进:)
猜你喜欢
  • 2020-11-02
  • 2017-05-24
  • 2019-01-07
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
相关资源
最近更新 更多