The complementary relationship
Tailscale is network infrastructure. Private Connect is developer experience.- Tailscale: “Can I reach that machine?”
- Private Connect: “Can I reach that service by name, from anywhere, and share it with my team?”
For Kubernetes users: Your internal DNS (
postgres.staging.svc.cluster.local) works great inside the cluster. Private Connect makes those same services accessible from your laptop, CI/CD, or any environment—without VPN, SSH tunnels, or exposing services publicly.The problem with network-level access alone
Tailscale is great. You install it, join a tailnet, and suddenly you can reach100.x.x.x from anywhere. Your home server, your work VM, your friend’s Raspberry Pi, all accessible.
But then what?
- Outside the cluster: Kubernetes has internal DNS (
postgres.staging.svc.cluster.local), but that only works inside the cluster. From your laptop, you need VPN, port forwarding, or a bastion host. - Cross-environment access: Staging database is in one cluster, prod API in another. How do you access both from your local machine?
- Team collaboration: How do you give your new teammate access to the same services you use, without them setting up VPN, SSH tunnels, or cluster access?
- Developer experience: Even with Kubernetes service names, you’re still managing port forwards, SSH tunnels, or VPN configs.
How they work together
Private Connect adds a service layer
Private Connect sits on top of any network—Tailscale, VPN, Kubernetes, or plain internet—and adds:| Capability | Without Private Connect | With Private Connect |
|---|---|---|
| Access from outside cluster | VPN + port forward, or SSH tunnel | connect reach prod-db |
| Cross-environment access | Different VPN configs per environment | Same command, works everywhere |
| Share with teammate | ”Here’s the VPN config and cluster access…” | connect clone alice |
| Works with Kubernetes | Internal DNS only works in-cluster | Access K8s services from your laptop |
| Revoke access | Delete VPN config? Remove cluster RBAC? | connect share --revoke |
Use case: Local database with Tailscale
Problem: You have a local DB and use Tailscale. You can SSH in, but you can’t see the results without opening a port or binding to0.0.0.0.
Solution: Private Connect solves that.
Keep your database secure
Your database stays on
127.0.0.1 (no opening a port, no binding to 0.0.0.0).Use case: Kubernetes cluster access
You have a Kubernetes cluster with services likepostgres.staging.svc.cluster.local. Inside the cluster, DNS works great. But from your laptop?
Without Private Connect
With Private Connect
Works with Kubernetes service names. No VPN. No SSH tunnels. Teammates clone your setup in 30 seconds.
Use case: AI development VM
You’re running Claude Code on a beefy VM. You access it via Tailscale + SSH. But you also have:- A dev server on port 8000
- A database on port 5432
- An API on port 3000
Without Private Connect
With Private Connect
Named services. No port memorization. Teammates clone your setup instantly.Use case: Home lab
You have a home server running:- Jellyfin on port 8096
- Home Assistant on port 8123
- A NAS on 192.168.1.50
When to use which
| Use case | Tool |
|---|---|
| ”I need to SSH into my VM” | Tailscale |
| ”I need to reach services from outside the cluster” | Private Connect |
| ”I need to share my dev environment with a teammate” | Private Connect |
| ”I need all my devices on one network” | Tailscale |
| ”I need cross-environment access (staging + prod)“ | Private Connect |
| ”I need Kubernetes services accessible from my laptop” | Private Connect |
| ”I need named, discoverable services across environments” | Private Connect |
They’re complementary. Use both for the best experience.