
Was ist PowerDNS-Admin?
PowerDNS-Admin ist eine webbasierte Schnittstelle zur Verwaltung des PowerDNS DNS-Servers. Es ermöglicht Benutzern, DNS-Zonen und -Einträge über eine benutzerfreundliche Weboberfläche zu verwalten. Es ist in Python geschrieben, verwendet das Flask-Framework und eine SQL-Datenbank, um Daten zu speichern. In einer Kubernetes-Umgebung kann PowerDNS-Admin verwendet werden, um die DNS-Einträge für einen Cluster und seine Ressourcen über ExternalDNS zu verwalten.
Beziehung zwischen PowerDNS-Admin und PowerDNS Server
Im folgenden Diagramm seht Ihr, dass der PowerDNS-Admin die API vom PowerDNS-Server über einen geheimen Schlüssel aufruft (siehe roter Kasten). Der geheime Schlüssel wird in der PowerDNS-Serverkonfiguration definiert.

Als Docker-Container ausgeführen
Wenn Ihr PowerDNS-Admin als Docker-Container ausführt, erstellt Docker ein Volume auf dem Hostsystem und erstellt eine Sqlite3-Datenbank. Wenn Ihr euch dann zum ersten Mal in der PowerDNS-Admin-UI anmeldet, müsst Ihr einen neuen Benutzer erstellen, dieser Benutzer erhält die Admin-Rolle.
Vergessen Sie Ihr Passwort, machen Sie sich keine Sorgen!
Keine Panik, da Sqlite3 eine dateibasierte Datenbank ist und das Linux-Rechtekonzept gilt, können die Daten leicht manipuliert werden.
1. Herstellen einer Verbindung dem System auf dem PowerDNS-Admin-Container wird ausgeführt:
#use ssh to connect to your vm like:
ssh exampleuser@10.0.0.17
2. Dann listet die volumes auf und überprüft sie:
#list the docker volumes
docker volume ls
#Similar output like:
DRIVER VOLUME NAME
local 1a6bf52ae2edfeaa41d662ec674d026e348a1ed62491742923bf52ae22ec674e
local 17fc48e354723bf52ae2edfe17fc48e354723bf5ec674d026e348a1ed62e2edf
local powerdns-admin
#inspect the docker volume from the powerdns-admin
docker volume inspect powerdns-admin
#Similar Output like:
[
{
"CreatedAt": "2023-01-21T10:39:18+01:00",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "powerdns-admin",
"com.docker.compose.volume": "pdns-admin"
},
"Mountpoint": "/var/lib/docker/volumes/powerdns-admin/_data",
"Name": "powerdns-admin",
"Options": null,
"Scope": "local"
}
]
3. Verbindung zur Sqlite3-Datenbank herstellen:
#Connect to the sqlite3 powerdns-admin database
sqlite3 /var/lib/docker/volumes/powerdns-admin/_data/powerdns-admin.db
4. Tabelle anzeigen:
sqlite> .tables
#Similar output like:
account domain_apikey history
account_user domain_setting role
alembic_version domain_template setting
apikey domain_template_record user
domain domain_user
5. Schema der Benutzertabelle anzeigen:
sqlite> PRAGMA table_info(user);
#Similar output like:
0|id|INTEGER|1||1
1|username|VARCHAR(64)|0||0
2|password|VARCHAR(64)|0||0
3|firstname|VARCHAR(64)|0||0
4|lastname|VARCHAR(64)|0||0
5|email|VARCHAR(128)|0||0
6|otp_secret|VARCHAR(16)|0||0
7|role_id|INTEGER|0||0
8|confirmed|BOOLEAN|1||0
6. Inhalt der Tabelle role aneigen:
sqlite> select * from role;
#Similar output like:
1|Administrator|Administrator
2|User|User
3|Operator|Operator
7. Einen neuen Benutzer mit bcrypt-Hash erstellen:
sqlite> INSERT INTO user (id, username, password, firstname, lastname, email, otp_secret, role_id, confirmed)
VALUES (50, 'artemla', '$2a$12$hx8Qcuo2vq0xdMhFhzLAY********', 'Artem', 'La', 'artemla@showcase.de', '', 1, 0);
Du kannst sehen, dass ich den Benutzer mit der Rolle ID1 (Administrator|Administrator) eingefügt habe.
8. Überprüfen, ob der neue Benutzer erstellt wurde:
sqlite> select * from user;
#Similar output like:
1|admin|$2b$12$HpYpbwpuqlZ.ixfu/hvbI.Rk********|admin|admin|admin@lab.de||1|0
50|artemla|$2a$12$hx8Qcuo2vq0xdMhFhzLAY********|Artem|La|artemla@showcase.de||1|0
9. Meldet euch mit dem neuen Benutzer bei PowerDNS-Admin an.
Was sollte man auf keinen Fall machen?
PowerDNS-Admin Datenbank löschen löscht alle API-Schlüssel und Domain-Zonen, die von External-DNS verwendet werden.
Referenzen:
PowerDNS — https://www.powerdns.com
ExternalDNS — https://github.com/kubernetes-sigs/external-dns
PowerDNS-Admin — https://github.com/PowerDNS-Admin/PowerDNS-Admin
Kontaktinformationen
Wenn du mehr über GitOps erfahren möchtest dann kontaktiere uns hier oder füge mich einfach in dein LinkedIn-Netzwerk hinzu!