Bind setup
The Bind primary resides outside Kubernetes at 193.40.103.2 and
it's internally reachable via 172.20.0.2.
Bind secondaries are hosted inside Kubernetes, load balanced behind 62.65.250.2 and
under normal circumstances managed by ArgoCD.
Ingresses and DNSEndpoints referring to k-space.ee, kspace.ee, k6.ee
are picked up automatically by external-dns and updated on primary.
The primary triggers notification events to 172.20.53.{1..3}
which are internally exposed IP-s of the secondaries.
Secrets
To configure TSIG secrets:
kubectl create secret generic -n bind bind-readonly-secret \
--from-file=readonly.key
kubectl create secret generic -n bind bind-readwrite-secret \
--from-file=readwrite.key
kubectl create secret generic -n bind external-dns
kubectl -n bind delete secret tsig-secret
kubectl -n bind create secret generic tsig-secret \
--from-literal=TSIG_SECRET=$(cat readwrite.key | grep secret | cut -d '"' -f 2)
kubectl -n cert-manager delete secret tsig-secret
kubectl -n cert-manager create secret generic tsig-secret \
--from-literal=TSIG_SECRET=$(cat readwrite.key | grep secret | cut -d '"' -f 2)
Serving additional zones
Bind primary configuration
To serve additional domains from this Bind setup add following
section to named.conf.local on primary ns1.k-space.ee:
key "foobar" {
algorithm hmac-sha512;
secret "...";
};
zone "foobar.com" {
type master;
file "/var/lib/bind/db.foobar.com";
allow-update { !rejected; key foobar; };
allow-transfer { !rejected; key readonly; key foobar; };
notify explicit; also-notify { 172.20.53.1; 172.20.53.2; 172.20.53.3; };
};
Initiate empty zonefile in /var/lib/bind/db.foobar.com on the primary ns1.k-space.ee:
foobar.com IN SOA ns1.foobar.com. hostmaster.foobar.com. (1 300 300 2592000 300)
NS ns1.foobar.com.
NS ns2.foobar.com.
ns1.foobar.com. A 193.40.103.2
ns2.foobar.com. A 62.65.250.2
Reload Bind config:
named-checkconf
systemctl reload bind9
Bind secondary config
Add section to bind-secondary-config-local under key named.conf.local:
zone "foobar.com" { type slave; masters { 172.20.0.2 key readonly; }; };
And restart secondaries:
kubectl rollout restart -n bind statefulset/bind-secondary
Registrar config
At your DNS registrar point your glue records to:
foobar.com. NS ns1.foobar.com.
foobar.com. NS ns2.foobar.com.
ns1.foobar.com. A 193.40.103.2
ns2.foobar.com. A 62.65.250.2
Updating DNS records
With the configured TSIG key foobar you can now:
- Obtain Let's Encrypt certificates with DNS challenge.
Inside Kubernetes use
cert-managerwith RFC2136 provider. - Update DNS records.
Inside Kubernetes use
external-dnswith RFC2136 provider.