How do I get the External IP of a Kubernetes service as a raw value?

12/25/2017

I am running an application with GKE. It works fine but I can not figure out how to get the external IP of the service in a machine readable format. So i am searching a gcloud or kubectl command that gives me only the external IP or a url of the format http://192.168.0.2:80 so that I can cut out the IP.

-- stm
google-kubernetes-engine
kubectl
kubernetes

5 Answers

1/9/2020

The answers above do not provide the output the user asked. The correct command would be: kubectl -n $namespace get svc $ingressServiceName -o json | jq -r .status.loadBalancer.ingress[].hostname

-- Juan Buhagiar
Source: StackOverflow

5/21/2019

In my case 'kubectl get services' returns array of items, but not just one service.

So then such jsonpath works fine to me:

kubectl get services -l component=controller,app=nginx-ingress -o jsonpath="{.items[0].status.loadBalancer.ingress[0].ip}"
-- Gadget
Source: StackOverflow

5/17/2020

...and yet another way... This will list all the "load-balancer" services

kubectl get services --all-namespaces -o json | jq -r '.items[] | { name: .metadata.name, ns: .metadata.namespace, ip: .status.loadBalancer?|.ingress[]?|.ip }'

Depending on the networkPlugin used by your cluster services/pods may be exposed directly on external-ip. But this will also find an Ingress controllers run in the cluster.

-- AndyPook
Source: StackOverflow

12/25/2017

Maybe not GKE as my clusters are on AWS, but I assume logic will be similar. When you kubectl get svc you can select output format and it will show more then just the "normal" get. For me, with ELB based services to het LB hostname it's enough to run ie. kubectl -n kube-system get svc cluster-nginx-ingress-controller -o json | jq .status.loadBalancer.ingress.hostname

-- Radek 'Goblin' Pieczonka
Source: StackOverflow

1/30/2019

You can use the jsonpath output type to get the data directly without needing the additional jq to process the json:

kubectl get services --namespace ingress-nginx nginx-ingress-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}'

(Be sure to replace the namespace and service name, respectively, with yours.)

-- kenny
Source: StackOverflow