If you have taken a look in your January 2020 invoice from your GCP subscription, you would notice a new line that resembles this:
Compute Engine External IP Charge on a Standard VM: xxx.xxx Hours [Currency conversion: USD to SGD using rate 1.352]
Edit: Google is currently discounting the public IP charges 100% for the first 3 months until 1 April 2020.
This will add about US$3 to your GCP bill per month per VM, that is US$36 a year for each VM with an IPv4 address. This can be substantial if you’re using the smallest VM like the N1 f1-micro, or when you simply have many Compute Engines running.
If you belong to the first group of users, you’ll probably want to make a switch. Providers like AWS, Linode, Vultr, Digital Ocean, AWS and many others are not charging for the first IPv4 address attached to an instance. Microsoft Azure gives you five free IPv4 addresses per subscription when they are set to static and are assigned to an instance each.
If you have many GCE instances, and when the network I/O requirement are not high, you may consider routing the traffic through a single IPv4 GCE node to minimize the IP address fees. I don’t think the NAT gateway option is viable, because you will be billed for both the NAT gateway, egress and ingress traffic through the NAT gateway.
As at time of writing, IPv6 is not implemented in GCP.