In gke one can define a load balancer and it will bind to the public ip of one of the node. How can I guaranty the service is always bound to the same public ip to not have to re configure external dns?
I don't think the LoadBalancer should be exposed through the IP of your pods, but instead get its own IP.
Use the Google cloud dashboard. Navigate to Networking › External IP addresses.
Find the IP of your LoadBalancer, and change it from ephemeral to static.
Try setting the ClusterIP field when defining your service. The documentation for the field says "If specified, it will be allocated to the service if it is unused or else creation of the service will fail" so this should allow you to bind your service to a specific IP address (presuming that you are allowed to use that address).