Pi-hole could only block blocks ads and tracking domains but technitium is a self-hosted DNS server plus a Pi-hole . It resolves ash.local domain names to IPs and also blocks ads at DNS level like Pi-hole so its a two in one deployment.
The installation doc is here.
https://artifacthub.io/packages/helm/obeone/technitium-dnsserver
Add helm repo
helm repo add obeone https://charts.obeone.cloudUpdate helm repo
helm repo update
curl -v http://172.16.77.10:30053
Install the technitium one the local storage class
helm install technitium obeone/technitium-dnsserver \
--version 1.8.0 \
--namespace dns \
--create-namespace \
--set service.main.type=NodePort \
--set service.main.ports.http.nodePort=30053 \
--set persistence.config.type=pvc \
--set persistence.config.storageClass=local-path \
--set persistence.config.size=1GiGet pods
kubectl get pods -n dnskubectl get pods -n dns --show-labels
Export the yml config file
kubectl get svc technitium-technitium-dnsserver -n dns -o yaml
curl -v http://172.16.77.10:30053 | head -1The Helm chart mapped the web UI to NodePort 30053

The URL wont be accessible via html UI so the issue here is we need to expose the Web Interface via Ingress so a dedicated NodePort service can be created on 30680
https://artifacthub.io/packages/helm/obeone/technitium-dnsserver
awk@k3s-cp-01:~/k8s$ cat technitium-ui-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: technitium-ui
namespace: dns
spec:
type: NodePort
selector:
app.kubernetes.io/name: technitium-dnsserver
ports:
- name: http
port: 80
targetPort: 5380
nodePort: 30680
awk@k3s-cp-01:~/k8s$Apply the config
kubectl apply -f technitium-ui-svc.yaml
So Technitium is the new DNS server for ash.local

