Reputation: 394
Querying the network interface will only return the internal instance IP address info.
Is it possible to get external IP address info from somewhere inside the running instance?
As an example, AWS has a metadata REST endpoint for instance info:
curl http://169.254.169.254/latest/meta-data/public-ipv4
(source: http://tech-queries.blogspot.co.uk/2011/06/how-to-get-public-ip-for-amazon-ec2.html)
Upvotes: 37
Views: 14762
Reputation: 860
Here are the links for getting Public IPv4 on various clouds.
Azure
curl -H Metadata:true "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-08-01&format=text"
AWS
curl http://169.254.169.254/latest/meta-data/public-ipv4
GCP
curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip
Since 169.254.169.254
is a global metadata server for these above cloud vendors, no need to use different domain names.
Upvotes: 30
Reputation: 9721
You can get the public IP address with an HTTP GET of http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip
. You must set the Metadata-Flavor: Google
in HTTP header as per the documentation.
Upvotes: 37