Kubernetes - Pihole

apiVersion: v1
kind: ConfigMap
metadata:
  name: pihole-adlists
data:
  adlists.list: |
    https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/pro.txt
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: pihole-regex
data:
  regex.list: |
    ^(.+[-_.])??adse?rv(er?|ice)?s?[0-9]*[-.]
    ^(.+[-_.])??m?ad[sxv]?[0-9]*[-_.]
    ^(.+[-_.])??telemetry[-.]
    ^(.+[-_.])??xn--
    ^adim(age|g)s?[0-9]*[-_.]
    ^adtrack(er|ing)?[0-9]*[-.]
    ^advert(s|is(ing|ements?))?[0-9]*[-_.]
    ^aff(iliat(es?|ion))?[-.]
    ^analytics?[-.]
    ^banners?[-.]
    ^beacons?[0-9]*[-.]
    ^count(ers?)?[0-9]*[-.]
    ^pixels?[-.]
    ^stat(s|istics)?[0-9]*[-.]
    ^track(ers?|ing)?[0-9]*[-.]
    ^traff(ic)?[-.]
    ^(.*)\.g00\.(.*)
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: pihole-env
data:
  TZ: America/New_York
  FTLCONF_dns_upstreams: '127.0.0.1#5054'
  FTLCONF_webserver_api_password: 'password'
  FTLCONF_dns_listeningMode: 'all'
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pihole
  labels:
    app: pihole
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pihole
  template:
    metadata:
      labels:
        app: pihole
    spec:
      containers:
      - name:  cloudflared
        image: visibilityspots/cloudflared
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
      - name: pihole
        image: pihole/pihole
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        env:
        - name: TZ
          valueFrom:
            configMapKeyRef:
              name: pihole-env
              key: TZ
        - name: FTLCONF_webserver_api_password
          valueFrom:
            configMapKeyRef:
              name: pihole-env
              key: FTLCONF_webserver_api_password
        - name: FTLCONF_dns_upstreams
          valueFrom:
            configMapKeyRef:
              name: pihole-env
              key: FTLCONF_dns_upstreams
        - name: FTLCONF_dns_listeningMode
          valueFrom:
            configMapKeyRef:
              name: pihole-env
              key: FTLCONF_dns_listeningMode
        ports:
        - name: web
          containerPort: 80
        - name : dns
          protocol : UDP
          containerPort: 53
        volumeMounts:
        - name: pihole-adlists
          mountPath: /etc/pihole/adlists.list
          subPath: adlists.list
        - name: pihole-regex
          mountPath: /etc/pihole/regex.list
          subPath: regex.list
      volumes:
        - name: pihole-adlists
          configMap:
            name: pihole-adlists
        - name: pihole-regex
          configMap:
            name: pihole-regex
---
kind: Service
apiVersion: v1
metadata:
  name: pihole-web-service
spec:
  selector:
    app: pihole
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    name : web
  type: LoadBalancer
---
kind: Service
apiVersion: v1
metadata:
  name: pihole-dns-service
spec:
  selector:
    app: pihole
  ports:
  - protocol: UDP
    port: 53
    targetPort: 53
    name : dns
  type: LoadBalancer