tailscale-docker/README.md
Louis-Philippe Asselin 7c146ab113
Version 1.0 (#2)
* Adds @rhjensen79 k8s example

* Instructions in README instead of Makefile

* Adds optional TAILSCALE_HOSTNAME instead of hardcoding in tailscale.sh

* TAILSCALE_STATE_ARG env variable, to enable stateful-example which reuses the same ip between deployments

* Fix tailscale.sh for proper `tailscale logout` on container SIGTERM

* Adds github action to build image

* all docker images are in the images folder. Instead of repeating in each example

Co-authored-by: Robert Jensen <robert@robert-jensen.dk>
2022-09-01 14:51:23 -04:00

59 lines
2 KiB
Markdown

# Tailscale in Docker without elevated privileges
See associated blog post: <https://asselin.engineer/tailscale-docker>
**Set the TAILSCALE_AUTH_KEY with your own ephemeral auth key**: <https://login.tailscale.com/admin/settings/keys>
The `Makefile` contains all commands to launch the various examples. Refer to it to understand which commands are used.
## docker-compose
By default, no state is saved. The nodes are removed from the network when the tailscale container is terminated. This means the ip address is never the same.
The `stateful-example` does save the tailscale node state to a docker volume.
Usage:
````bash
export TAILSCALE_AUTH_KEY="your-key"
# set which project is used
export PROJECT_DIRECTORY="docker-compose/simple-example"
# Sart with rebuild if necessary:
docker-compose --project-directory=${PROJECT_DIRECTORY} up -d --build
# Show logs and tail (follow):
docker-compose --project-directory=${PROJECT_DIRECTORY} logs --follow
# Stop:
docker-compose --project-directory=${PROJECT_DIRECTORY} down
````
### simple-example
As explained in the blog post, uses a docker-compose service to add the container in the VPN.
### complex-example
Not complex but more complex than the simple-example.
A nginx layer is added. It manages two services in independent containers at urls `/service-one` and `/service-two`.
### stateful-example
Same as simple-example but uses a volume to save state. The goal is to be able to reuse the same tailscale hostname _and ip address_.
Useful in situations where the tailscale magic DNS cannot be used.
## K8S
Same as the simple-example but on kubernetes.
Requirements:
- [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installing-with-a-package-manager)
- [Kubectl](https://kubernetes.io/docs/tasks/tools/)
Usage:
````bash
# Create cluster
kind create cluster --name tailscale
kubectl get nodes
# Deploy tailscale and demo webpage:
kubectl apply -f k8s/simple-example/deployment.yaml
# Delete cluster:
kind delete cluster --name tailscale
````