My main use case for Tailscale is to whitelist connections using the exit node to whitelist certain connections to public addresses. I also use it to access internally exposed load balancers and to gatekeep certain services within the VPN.
For accessing internally exposed load balancers or whitelisting connections, we may have a GKE Kubernetes cluster set up with an authorized network, meaning access is restricted to authorized networks and a VPN Gateway IP that can only access it from the public internet. To give a developer access to the internal IP of the control plane without exposing it publicly, we install a Tailscale operator in the cluster. Once the Tailscale operator is installed, we expose the internal IP of the cluster through one of the pod operators as a subnet router. When developers connect their Tailscale client, they can access the cluster locally without routing through the public internet.
Tailscale can also be used for whitelisting. For instance, if we have a service in the Kubernetes cluster exposed externally through Traefik, NGINX Ingress, or a Gateway and certain users need access, we can set up exit nodes for different regions. If we have users in Europe and users in America, we can set up an exit node for users in America and another for users in Europe. These exit nodes have external IPs that we can use as a whitelist in our externally exposed services. When traffic comes from those external IPs, it is allowed through. When a user connects their Tailscale client and enables one of the exit nodes, they can access the externally exposed address since it is whitelisted to those external IPs. If their Tailscale client is not connected and the exit node is not enabled, they cannot access the externally exposed service.