This commit is contained in:
parent
70a5f4dcdf
commit
655c658adf
1 changed files with 67 additions and 0 deletions
67
README.md
Normal file
67
README.md
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
D53
|
||||||
|
===
|
||||||
|
|
||||||
|
[![Build Status](https://drone.deuxfleurs.fr/api/badges/lx/D53/status.svg)](https://drone.deuxfleurs.fr/lx/D53)
|
||||||
|
|
||||||
|
D53 is a dynamic DNS updater that sources information from Consul to route services to the correct place
|
||||||
|
|
||||||
|
### Tag syntax
|
||||||
|
|
||||||
|
D53 reads tags affected to services in Consul. Tags can be formatted as follows:
|
||||||
|
|
||||||
|
- `d53-a <domain> <subdomain>`, will set the node running this service as an IPv4 target in an A record for `<subdomain>.<domain>`
|
||||||
|
- `d53-aaaa <domain> <subdomain>`, same but as an IPv6 target in a AAAA record
|
||||||
|
- `d53-cname <domain> <subdomain>`, same but as an alias using a CNAME record
|
||||||
|
|
||||||
|
Example Nomad service configurations:
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
# The following can be used in the Tricot service definition
|
||||||
|
# to redirect the current deuxfleurs.fr and <site_name>.site.deuxfleurs.fr
|
||||||
|
# to this node through A and AAAA records
|
||||||
|
tags = [
|
||||||
|
"(diplonat (tcp_port 80))"
|
||||||
|
"d53-a deuxfleurs.fr ${meta.site}.site",
|
||||||
|
"d53-a deuxfleurs.fr global.site",
|
||||||
|
"d53-aaaa deuxfleurs.fr ${meta.site}.site",
|
||||||
|
"d53-aaaa deuxfleurs.fr global.site",
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
# The following can be used in the Guichet service definition
|
||||||
|
# to configure a Tricot reverse proxy entry, and to redirect using
|
||||||
|
# a CNAME the guichet.deuxfleurs.fr to the correct target,
|
||||||
|
# which is usually defined in the form of <site_name>.site.deuxfleurs.fr
|
||||||
|
tags = [
|
||||||
|
"tricot guichet.deuxfleurs.fr",
|
||||||
|
"d53-cname deuxfleurs.fr guichet",
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Finding targets
|
||||||
|
|
||||||
|
The IPv4, IPv6 and CNAME targets to set in the record are extracted from the metadata values affected to each node in the Consul configuration.
|
||||||
|
In particular, the following values are used:
|
||||||
|
|
||||||
|
- `public_ipv4`: a public IPv4 through which the current node is possibly reachable (see DiploNAT to automatically open ports in a NAT)
|
||||||
|
- `public_ipv6`: a public IPv6 through which the current node is reachable
|
||||||
|
- `cname_target`: a CNAME target that resolves to a domain name whose A and/or AAAA entries point to this node (possibly among others)
|
||||||
|
|
||||||
|
Here is the relevant Nix configuration snippet that sets up these metadata values:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
let node_meta = {
|
||||||
|
"site" = cfg.site_name;
|
||||||
|
"public_ipv6" = cfg.ipv6;
|
||||||
|
} //
|
||||||
|
(if cfg.public_ipv4 != null
|
||||||
|
then { "public_ipv4" = cfg.public_ipv4; }
|
||||||
|
else {}) //
|
||||||
|
(if cfg.cname_target != null
|
||||||
|
then { "cname_target" = cfg.cname_target; }
|
||||||
|
else {});
|
||||||
|
|
||||||
|
### ... later ...
|
||||||
|
services.consul.extraConfig.node_meta = node_meta;
|
||||||
|
```
|
Loading…
Reference in a new issue