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

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.



Solution 1:[1]

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.)

Solution 2:[2]

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}"

Solution 3:[3]

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

Solution 4:[4]

...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.

Solution 5:[5]

All previous solutions don't work any more for me (on GCP).

To get the IP:

kubectl get ingress <YOUR_INGRESS_NAME> -o jsonpath="{.status.loadBalancer.ingress[0].ip}"

To get the host-name:

kubectl get ingress <YOUR_INGRESS_NAME> -o jsonpath="{.spec.rules[0].host}"

Solution 6:[6]

To get the external-ip on GCP i can use:

kubectl get services --namespace=<your-namespace> -o jsonpath="{.items[0].status.loadBalancer.ingress[0].ip}"

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 kenny
Solution 2 Gadget
Solution 3 Juan Buhagiar
Solution 4 AndyPook
Solution 5
Solution 6 MC Vermeulen