

Why not use Tailscale on each device?
No need to expose any ports, no need for a bastion, no need for any complicated method of retrieving their public IP address, can use ACLs to restrict their access to other devices on the tailnet (if they’re tech-savvy enough to go looking at the tailnet in the first place).
Essentially, as long as they have internet and Tailscale is running, you’ll be able to connect to their device without exposing anything over the internet.

I have pretty much this exact setup.
That being said, all of the configs are stored in a private git repo that isn’t exposed to the internet, so I’m afraid I can share it all with you.
Like others, I don’t use a UI for Flux, just a combination of VSCode, Vim, kubectl, k9s and the flux cli.
Kubernetes is not for the faint hearted and is a massive step up/learning curve from Docker. I definitely wouldn’t recommend it for everyone, I’m ‘lucky’ that I also work with it most of the time in my day job.
I can share my immich helm release later, but I’d suggest looking into bjw-s-app template and having a look at https://kubesearch.dev/