Как вы получаете имя Kubernetes pod с его IP-адреса?

Как получить имя модуля с его IP-адреса? Какое волшебное заклинание kubectl + sed/awk/grep/etc независимо от того, где вызывается kubectl?

Ответ 1

Пример:

kubectl get pods -o wide
NAME                               READY     STATUS    RESTARTS   AGE       IP            NODE
alpine-3835730047-ggn2v            1/1       Running   0          5d        10.22.19.69   ip-10-35-80-221.ec2.internal 

получить имя pod по IP

kubectl get --all-namespaces  --output json  pods | jq '.items[] | select(.status.podIP=="10.22.19.69")' | jq .metadata.name
"alpine-3835730047-ggn2v"

получить имя контейнера по IP

kubectl get --all-namespaces  --output json  pods | jq '.items[] | select(.status.podIP=="10.22.19.69")' | jq .spec.containers[].name
"alpine"

Ответ 2

Другой способ получить имя модуля по IP-адресу:

$ kubectl get pods --all-namespaces -o wide | grep 10.2.6.181

jenkins       jenkins-2-7d6d7fd99c-9xgkx                                                2/2     Running            3          12d   10.2.6.181      ip.ap-southeast-2.compute.internal    <none>

В этом примере имя модуля "jenkins-2-7d6d7fd99c-9xgkx" для IP-адреса "10.2.6.181".

Ответ 3

Может быть сделано без дополнительных инструментов, достаточно kubectl:

kubectl get pods -o custom-columns=:metadata.name --no-headers=true --field-selector status.podIP=<pod-ip-address-goes-here>