i.imgur.com
robustperception.io
robustperception.io
The trick to this is that the instance label of a target isn't what Prometheus connects to, it actually connects to what's in the __address__ label. This means you can change the instance label to any value you like, and Prometheus will still successfully scrape the target.
Why does it seem as though the instance label is what Prometheus connects to? The answer is that the instance label is one of the two special target labels that must have a value (the other being job). Accordingly if no instance label is present after service discovery and relabelling, it'll be set to the value of __address__.