Kubernetes:如何从 Pod 中获取其他 Pod 的名称?

时间:2021-06-07 21:54:09

标签: kubernetes

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

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

谢谢,

1 个答案:

答案 0 :(得分:1)

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

  • 首先你需要有一个 serviceaccount 绑定到 clusterrole 才能向 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 的功劳