Overview
Tailscale is a mesh VPN built on WireGuard. This template deploys a Tailscale gateway workload on Control Plane that joins your Tailscale network and advertises internal Control Plane routes, allowing any connected Tailscale client to reach your GVC workloads via theircpln.local internal endpoints.
The gateway runs in a single configured location. Other locations are suspended so only one Tailscale node is active at a time.
What Gets Created
- Standard Workload — The Tailscale gateway (
RELEASE_NAME-tailscale), active in the configured location only. Advertises Control Plane’s internal network CIDRs and the location’s internal DNS server to Tailscale. - Secret — A dictionary secret storing the Tailscale auth key, injected into the container at startup.
- Identity & Policy — An identity bound to the workload with
revealaccess to the auth key secret. - Serverless Workload (optional) — An httpbin test workload (
RELEASE_NAME-httpbin) accessible only from the Tailscale workload, useful for verifying connectivity.
This template does not create a GVC. You must deploy it into an existing GVC.
Prerequisites
Complete the following in your Tailscale account before installing:1. Create an Auth Key
In the Tailscale Admin UI → Settings → Keys, create a new auth key with Reusable and Ephemeral enabled. Save the key value — you will set it asAuthKey in your values.
2. Update the Tailscale ACL
AddautoApprovers to your Tailscale ACL so that advertised routes are approved automatically:
/32 entry here as well.
3. Configure Tailscale DNS
In the Tailscale Admin UI → DNS tab, add a custom nameserver scoped to thecpln.local domain. Use the DNS IP for your selected location from the locationDNS map in values (e.g. 172.20.0.10 for most AWS locations).
If you need to reach per-replica stateful workload endpoints, add an additional custom nameserver scoped to <GVC_NAME>.svc.cluster.local using the same DNS IP.
Installation
To install, follow the instructions for your preferred method:UI
Browse, install, and manage templates visually
CLI
Manage templates from your terminal
Terraform
Declare templates in your Terraform configurations
Pulumi
Declare templates in your Pulumi programs
Configuration
The defaultvalues.yaml for this template:
Auth Key
AuthKey— Your Tailscale auth key. Replace this before deploying. The key must be created with the Reusable and Ephemeral options enabled.
Location
location— The single Control Plane location where the Tailscale gateway will run. All other locations in the GVC are suspended. Must match one of the locations configured in your GVC.
Partially Suspended in the console — this is expected behavior.
Advertised Routes
The gateway automatically advertises the following routes to Tailscale:| Route | Purpose |
|---|---|
192.168.0.0/16 | Control Plane internal network |
240.240.0.0/16 | Control Plane internal network |
<locationDNS[location]>/32 | Internal DNS server for the selected location |
/32 DNS host route allows Tailscale clients to resolve cpln.local endpoints after configuring a custom nameserver in Tailscale DNS.
Location DNS
locationDNS— A map of Control Plane location names to their internal DNS server IPs. The IP for the selectedlocationis advertised as a host route (/32) to enablecpln.localname resolution on Tailscale clients.
Resources and Image
resources.cpu/resources.memory— CPU and memory for the Tailscale gateway container.image.repository/image.tag— Tailscale container image. Defaults totailscale/tailscale:stable.
Extra Environment Variables
extraEnv— Additional environment variables passed to the Tailscale container. Common options:TS_HOSTNAME— The hostname the gateway registers under in your Tailscale network.TS_EXTRA_ARGS— Additional Tailscale daemon flags, e.g.--advertise-exit-nodeto use the gateway as an exit node.
Example Workload
deployHttpbinExample— Whentrue, deploys an httpbin test workload that only accepts internal connections from the Tailscale gateway. Use it to verify connectivity after setup.
Accessing GVC Workloads
Once the gateway is running and connected to Tailscale:- Ensure your local machine is connected to the same Tailscale network.
- Any GVC workload that grants internal access to the Tailscale workload can be reached via its
cpln.localaddress: