Skip to content

A libcluster strategy for discovering and connecting Elixir nodes over Tailscale

License

Notifications You must be signed in to change notification settings

moomerman/libcluster_tailscale

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

libcluster_tailscale

This library adds a libcluster strategy for discovering and connecting Elixir nodes over Tailscale.

See this blog post for a detailed walkthrough.

Installation

The package can be installed by adding libcluster_tailscale to your list of dependencies in mix.exs:

def deps do
  [
    {:libcluster_tailscale, "~> 0.1.0"}
  ]
end

Config

Configure your libcluster topology with the following config.

config :libcluster,
  topologies: [
    tailscale: [
      strategy: Cluster.Strategy.Tailscale,
      config: [
        authkey: "tskey-api-xxx-yyy",
        tailnet: "example.com",
        hostname: "app.example.com",
        appname: "app"
      ]
    ]
  ]

Example Phoenix Application

Let us say we're deploying a phoenix application called hello.

When you bring your tailscale service up on your node, provide a hostname that is consistent across your cluster and this strategy can then find all the IP addresses on your Tailnet belonging to that service and automatically cluster them together.

tailscale up --authkey=${TAILSCALE_AUTHKEY} --hostname=hello-app

Configure your release to use the tailscale IP address as part of the node name:

ip=$(tailscale ip --4)
export RELEASE_DISTRIBUTION=name
export RELEASE_NODE=<%= @release.name %>@$ip

Then configure your cluster as follows

config :libcluster,
  topologies: [
    tailscale: [
      strategy: Cluster.Strategy.Tailscale,
      config: [
        authkey: "tskey-api-xxx-yyy",
        tailnet: "example.com",
        hostname: "hello-app",
        appname: "hello"
      ]
    ]
  ]

About

A libcluster strategy for discovering and connecting Elixir nodes over Tailscale

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages