简体   繁体   English

Kubernetes:如何从一个 pod 中获取其他 pod 的名称?

[英]Kubernetes: How to get other pods' name from within a pod?

I'd like to find out the other pods' name running in the same single-host cluster.我想找出在同一个单主机集群中运行的其他 pod 的名称。 All pods are single-application containers.所有 pod 都是单应用程序容器。 I have pod A (written in Java) that acts as a TCP/IP server and a few other pods (written in C++) connect to the server.我有充当 TCP/IP 服务器的 pod A(用 Java 编写),还有一些其他 pod(用 C++ 编写)连接到服务器。

In pod A, I can get IP address of clients (other pods).在 pod A 中,我可以获得客户端(其他 pod)的 IP 地址。 How do I get their pods' name?我如何获得他们的豆荚的名字? I can't run kubectl commands because pod A has no kubectl installed.我无法运行 kubectl 命令,因为 pod A 没有安装 kubectl。

Thanks,谢谢,

You can directly call kube-apiserver with cURL.您可以使用 cURL 直接调用 kube-apiserver。

  • First you need to have a serviceaccount binded to clusterrole to be able to send requests to apiserver.首先,您需要将服务帐户绑定到 clusterrole 才能向 apiserver 发送请求。

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

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

  • Get a shell inside a container在容器中获取 shell

    kubectl exec -it deploy/YOUR_DEPLOYMENT -- sh

  • Define necessary parameters for your cURL, run below commands inside container为您的 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=https://kubernetes.default.svc SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace) TOKEN=$(cat ${SERVICEACCOUNT}/token) CACERT=${SERVICEACCOUNT}/ca.crt

  • Send pods list request to apiserver向 apiserver 发送 pod 列表请求

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

Done !完毕 ! It will return you a json list of " kubectl get pods "它会返回一个“ kubectl get pods ”的 json 列表

For more examples, you can check OpenShift RestAPI Reference .有关更多示例,您可以查看OpenShift RestAPI Reference Also, if you are planning to do some programmatic stuff, I advice you to checkout official kubernetes-clients .另外,如果您打算做一些程序化的事情,我建议您查看官方 kubernetes-clients

Credits for jq improvement to @moonkotte@moonkotte的 jq 改进致谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM