Is there any way to build agents that use a url to communicate with a controller?

Basically what the title is asking,

I’m trying to build a charmed model where the machines that the controller is talking to are behind a NAT. Since the IP address of the controller does not match the IP address that the provisioned machines need to use to communicate they never can report to the Juju controller and are stuck “pending” forever.

I have tried setting the “public-dns-address” controller-config value, and the “controller-url” value on the controller charm. Is there somewhere else I should be looking?

What is the cloud substrate in this case?

If you can access one of the provisioned machines (via direct SSH for example), check the agent configuration to see what API addresses it is getting. That should tell you if the controller configuration values you’re using are taking effect.

If they are, it might be a matter of firewalling.

Thanks for your reply!

The cloud substrate was a manual cloud.

I was able to get onto the nodes and check the agent configuration, but it would only ever set the API address to the IP addresses assigned to the network interfaces, and I was unable to find any way to get it to create a URL. Ultimately I was able to work around this by assigning a static IP to one of the interfaces, and create a routing rule on the firewall directly.

That said, it would still be nice to have a way to use a URL to point to controllers.