Post

Self-Hosted Pihole on Kubernetes for a DNS server & Ads Blocker

pihole

The Pi-hole® is a DNS sinkhole that protects your devices from unwanted content without installing any client-side software.

Preqre

  • Helm
  • Kubernetes cluster, my homelab is using k3s-cluster.

Installation

We will use mojo2600/pihole helm repo in ArtifactHub

helm add repo.

1
2
helm repo add mojo2600 https://mojo2600.github.io/pihole-kubernetes/
helm repo update

get the values.yml of mojo2600/pihole and configure it first.

1
helm show values mojo2600/pihole > values.yml

Values.yml

I changed the DNS and https type to LoadBalancer and set the loadBalancerIP: '10.0.50.77', cause I’m using metallb service.
And configure the storageClass: 'longhorn' and the adminPassword

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
serviceDns:
  type: LoadBalancer 
  port: 53
  loadBalancerIP: "10.0.50.77"
  annotations:
    metallb.universe.tf/allow-shared-ip: pihole-svc

serviceWeb:
  http:
    enabled: true
    port: 80
  https:
    enabled: true
    port: 443
  type: LoadBalancer
  loadBalancerIP: 10.0.50.77
  annotations:
    metallb.universe.tf/allow-shared-ip: pihole-svc

persistentVolumeClaim:
  enabled: true
  accessModes:
    - ReadWriteOnce
  size: "2Gi"
  storageClass: "longhorn"

adminPassword: "P@ssw0rd"

extraEnvVars:
  TZ: Asia/Hong_Kong

DNS1: "1.1.1.1"
DNS2: "8.8.8.8"

podDnsConfig:
  enabled: true
  policy: "None"
  nameservers:
  - 127.0.0.1
  - 1.1.1.1

Helm Install

1
helm install pihole mojo2600/pihole -n pihole --create-namespaces -f values.yml

Web UI

access http://10.0.50.77/admin webui

update the ads block list first webui

you can setup your dns records as your local network dns server webui

then bind your devices dns to pihole, you will see the traffice display on dashboard. webui

Also you can check the query log for the details webui

This post is licensed under CC BY 4.0 by the author.