Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
99668fa
feat: add dnsdist and dnscollector
cc-datum Nov 25, 2025
8177610
feat: add vector configuration
cc-datum Nov 26, 2025
db1d504
feat: update dnscollector and dnsdist configurations
cc-datum Nov 27, 2025
4e33cc9
feat: add Grafana, Prometheus, and Loki configurations for DNS observ…
cc-datum Nov 29, 2025
79c100e
feat: enhance DNS observability with GeoIP integration and new Grafan…
cc-datum Dec 4, 2025
166f332
chore: update configurations
cc-datum Dec 5, 2025
786c5df
feat: add DNS Workbench dashboard
cc-datum Dec 5, 2025
bcb3b5f
chore: clean up configurations
cc-datum Dec 5, 2025
83a8fe3
feat: add metrics verification
cc-datum Dec 6, 2025
7918776
feat: update DNS Workbench dashboard
cc-datum Dec 6, 2025
6fb523e
chore: empty commit
cc-datum Jan 6, 2026
dd51be1
feat: implement a metrics push model
cc-datum Jan 10, 2026
bd8073d
feat: add enrichment table for zone and project mapping
cc-datum Jan 12, 2026
582ee3c
feat: update buffer configuration
cc-datum Jan 12, 2026
2d80e5e
feat: add Helm repository and release configuration for Vector metric…
cc-datum Jan 13, 2026
02288c3
feat: add HTTP basic authentication for Vector configuration
cc-datum Jan 14, 2026
7849f74
feat: add console sink for project tags
cc-datum Jan 14, 2026
c2cfd02
feat: update authentication configuration for Vector metrics gateway
cc-datum Jan 14, 2026
d073598
chore: update vector configuration
cc-datum Jan 19, 2026
7ba5d62
chore: update vector-hr configuration
cc-datum Jan 21, 2026
0a934a8
chore: update vector-hr configuration
cc-datum Jan 21, 2026
a642c24
feat: update fullnameOverride for vector metrics gateway
cc-datum Jan 21, 2026
ac67a0a
Merge remote-tracking branch 'origin/main' into feat/dnsdist
cc-datum Jan 21, 2026
f653b2b
feat: update resolver port for ALIAS expansion
cc-datum Jan 21, 2026
1b0b422
feat: add console sink for project tags in vector-hr configuration
cc-datum Jan 21, 2026
60b00ee
feat: update VECTOR_METRICS_GATEWAY_ADDRESS
cc-datum Jan 21, 2026
01d9de7
feat: add TLS container port for vector service
cc-datum Jan 21, 2026
8d15434
feat: remove TLS container port configuration for vector service
cc-datum Jan 21, 2026
427f057
feat: update batch configuration and timeout settings in vector-hr
cc-datum Jan 21, 2026
2dba126
feat: update batch configuration and timeout settings in vector-hr
cc-datum Jan 21, 2026
6f36474
feat: change compression method from gzip to snappy in vector-hr conf…
cc-datum Jan 27, 2026
1b50144
feat: update label for dnszone in vector-hr configuration
cc-datum Jan 28, 2026
05f935b
feat: update vector configuration with image details
cc-datum Jan 28, 2026
7930946
fix: listener addresses
zachsmith1 Feb 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ config/**/charts
coverage.*
*.coverprofile
profile.cov

test/e2e/kubeconfig-*
# Dependency directories (remove the comment below to include it)
# vendor/

Expand All @@ -35,5 +35,5 @@ go.work.sum
.env

# Editor/IDE
# .idea/
.idea/
# .vscode/
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,9 @@ bootstrap-downstream: ## Create kind downstream and deploy agent with embedded P
CONTEXT=kind-$(DOWNSTREAM_CLUSTER_NAME) KUSTOMIZE_DIR=config/overlays/agent-powerdns $(MAKE) kustomize-apply
# Export external kubeconfig for downstream cluster (reachable from host/other containers)
CLUSTER=$(DOWNSTREAM_CLUSTER_NAME) OUT=dev/kind.downstream.kubeconfig $(MAKE) export-kind-kubeconfig-raw
# Install monitoring stack into downstream
CONTEXT=kind-$(DOWNSTREAM_CLUSTER_NAME) KUSTOMIZE_DIR=config/monitoring $(MAKE) kustomize-apply
CONTEXT=kind-$(DOWNSTREAM_CLUSTER_NAME) KUSTOMIZE_DIR=config/overlays/vector-metrics-gateway $(MAKE) kustomize-apply

.PHONY: bootstrap-upstream
bootstrap-upstream: ## Create kind upstream and deploy replicator pointing to downstream
Expand Down Expand Up @@ -474,7 +477,7 @@ set -e; \
package=$(2)@$(3) ;\
echo "Downloading $${package}" ;\
rm -f $(1) ;\
GOBIN=$(LOCALBIN) go install $${package} ;\
CGO_ENABLED=0 GOOS=$$(go env GOOS) GOARCH=$$(go env GOARCH) GOBIN=$(LOCALBIN) go install $${package} ;\
mv $(1) $(1)-$(3) ;\
} ;\
ln -sf $$(realpath $(1)-$(3)) $(1)
Expand Down
109 changes: 109 additions & 0 deletions config/agent/dnscollector-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
################################################
# global configuration
# more details: https://github.com/dmachard/DNS-collector/blob/main/docs/configuration.md#global
################################################
global:
trace:
verbose: true
log-malformed: true
filename: ""
max-size: 10
max-backups: 10
server-identity: "dns-collector"
worker:
interval-monitor: 10
buffer-size: 8192
telemetry:
enabled: true
web-path: "/metrics"
web-listen: ":9165"
prometheus-prefix: "dnscollector_exporter"

# Optional TLS configuration
tls-support: false
tls-cert-file: ""
tls-key-file: ""
client-ca-file: ""

# Optional authentication
basic-auth-enable: false
basic-auth-login: admin
basic-auth-pwd: changeme

################################################
# Pipelining configuration
# more details: https://github.com/dmachard/DNS-collector/blob/main/docs/running_mode.md#pipelining
# workers: https://github.com/dmachard/DNS-collector/blob/main/docs/workers.md
# transformers: https://github.com/dmachard/DNS-collector/blob/main/docs/transformers.md
################################################
pipelines:
- name: tap
dnstap:
listen-ip: 0.0.0.0
listen-port: 6000
transforms:
normalize:
enable: true
qname-lowercase: true
rr-lowercase: true
qname-replace-nonprintable: true
add-tld: true
add-tld-plus-one: true
quiet-text: false
reordering:
enable: true
flush-interval: 30
max-buffer-size: 100
suspicious:
enable: true
threshold-qname-len: 100
threshold-packet-len: 1000
threshold-slow: 1.0
common-qtypes:
- A
- AAAA
- TXT
- CNAME
- PTR
- NAPTR
- DNSKEY
- SRV
- SOA
- NS
- MX
- DS
- HTTPS
unallowed-chars:
- '"'
- '=='
- '/'
- ':'
threshold-max-labels: 10
whitelist-domains:
- '\.ip6\.arpa'
latency:
enable: true
measure-latency: true
unanswered-queries: true
queries-timeout: 2
routing-policy:
forward: [ vector ]
dropped: [ ]

- name: vector
tcpclient:
transport: tcp
remote-address: 127.0.0.1
remote-port: 6001
connect-timeout: 5
retry-interval: 10
flush-interval: 30
tls-insecure: false
tls-min-version: 1.2
ca-file: ""
cert-file: ""
key-file: ""
mode: json
text-format: ""
buffer-size: 100
chan-buffer-size: 0
75 changes: 75 additions & 0 deletions config/agent/dnsdist-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# TODO(cristhian): Make sure we block api access from outside the cluster.
webserver:
listen_addresses:
- "0.0.0.0:8083"
password: ""
api_key: ""
acl:
- 0.0.0.0/0
api_requires_authentication: false
stats_require_authentication: false
dashboard_requires_authentication: false

acl:
- 0.0.0.0/0

binds:
- listen_address: "0.0.0.0:53"
reuseport: true
protocol: Do53
threads: 2

packet_caches:
- name: cache
size: 100

pools:
- name: default
packet_cache: cache

backends:
- address: "127.0.0.1:5300"
protocol: Do53
pools:
- default

remote_logging:
dnstap_loggers:
- name: remote_logging
transport: tcp
address: "127.0.0.1:6000"
connection_count: 2

query_rules:
- name: "log all queries"
selector:
type: All
action:
type: DnstapLog
identity: dnsdist
logger_name: remote_logging

- name: "default rule"
selector:
type: All
action:
type: Pool
pool_name: default

response_rules:
- name: log all responses
selector:
type: All
action:
type: DnstapLog
identity: dnsdist
logger_name: remote_logging

cache_hit_response_rules:
- name: log all responses from cache
selector:
type: All
action:
type: DnstapLog
identity: dnsdist_cache
logger_name: remote_logging
9 changes: 9 additions & 0 deletions config/agent/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ configMapGenerator:
files:
- pdns.conf
- recursor.conf
- name: dnsdist-config
files:
- dnsdist.yml=dnsdist-config.yaml
- name: dnscollector-config
files:
- config.yaml=dnscollector-config.yaml
- name: vector-config
files:
- vector-config.yaml

images:
- name: ghcr.io/datum-cloud/dns-operator
Expand Down
103 changes: 99 additions & 4 deletions config/agent/manager.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -131,14 +131,15 @@ spec:
mountPath: /config
- name: pdns-shared
mountPath: /run/pdns

- name: pdns
image: powerdns/pdns-auth-51:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 53
- containerPort: 5300
name: dns
protocol: UDP
- containerPort: 53
- containerPort: 5300
name: dns-tcp
protocol: TCP
- containerPort: 8082
Expand All @@ -157,7 +158,10 @@ spec:
- |
set -eu;
exec pdns_server \
--api-key="$(cat /run/pdns/api-key)" --api=yes --webserver-port=8082
--local-port=5300 \
--api-key="$(cat /run/pdns/api-key)" \
--api=yes \
--webserver-port=8082
securityContext:
runAsUser: 953
runAsGroup: 953
Expand All @@ -167,6 +171,7 @@ spec:
drop:
- "ALL"
add: ["NET_BIND_SERVICE"]

- name: pdns-recursor
image: powerdns/pdns-recursor-51:latest
imagePullPolicy: IfNotPresent
Expand Down Expand Up @@ -201,6 +206,7 @@ spec:
- name: pdns-config
mountPath: /etc/powerdns
readOnly: true

- name: lightningstream
image: powerdns/lightningstream:main
imagePullPolicy: IfNotPresent
Expand Down Expand Up @@ -258,7 +264,85 @@ spec:
mountPath: /lmdb
- name: lightningstream-config
mountPath: /etc/lightningstream


- name: dnsdist
image: powerdns/dnsdist-21:latest
args: ["--config", "/etc/dnsdist/dnsdist.yml"]
imagePullPolicy: IfNotPresent
ports:
- containerPort: 53
name: dnsdist-udp
protocol: UDP
- containerPort: 53
name: dnsdist-tcp
protocol: TCP
- containerPort: 8083
name: dnsdist-metrics
protocol: TCP
volumeMounts:
- name: pdns-shared
mountPath: /run/pdns
- name: dnsdist-config
mountPath: /etc/dnsdist
readOnly: true
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- "ALL"
add: ["NET_BIND_SERVICE"]

- name: dnstap-collector
image: dmachard/dnscollector:latest
imagePullPolicy: IfNotPresent
args: ["-config", "/etc/dnscollector/config.yaml"]
ports:
- containerPort: 6000
name: dnstap
protocol: TCP
- containerPort: 9165
name: dnscol-metrics
protocol: TCP
volumeMounts:
- name: dnscollector-config
mountPath: /etc/dnscollector
readOnly: true
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- "ALL"

- name: vector
image: timberio/vector:0.51.1-distroless-static
args:
- --log-format=json
- --verbose
- --watch-config
- --config-dir
- /etc/vector/
env:
- name: VECTOR_METRICS_GATEWAY_ADDRESS
value: vector-metrics-gateway:9000
volumeMounts:
- name: vector-config
mountPath: /etc/vector/vector-config.yaml
subPath: vector-config.yaml
- name: vector-config-volume
mountPath: /etc/vector
ports:
- containerPort: 9598
name: vector-metrics
protocol: TCP
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
volumes:
- name: server-config
configMap:
Expand All @@ -271,5 +355,16 @@ spec:
- name: pdns-config
configMap:
name: pdns-config
- name: dnsdist-config
configMap:
name: dnsdist-config
- name: dnscollector-config
configMap:
name: dnscollector-config
- name: vector-config
configMap:
name: vector-config
- name: vector-config-volume
emptyDir: {}
serviceAccountName: controller-manager
terminationGracePeriodSeconds: 10
Loading
Loading