pihole.yaml 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. # Notes:
  2. # To reset web password:
  3. # docker exec -it pihole_container_name pihole -a -p
  4. # Other utils:
  5. # docker exec pihole_container_name pihole updateGravity
  6. # docker exec pihole_container_name pihole -w spclient.wg.spotify.com
  7. # docker exec pihole_container_name pihole -w spclient.wg.spotify.com
  8. apiVersion: v1
  9. kind: Service
  10. metadata:
  11. name: pihole-tcp
  12. labels:
  13. run: pihole
  14. annotations:
  15. metallb.universe.tf/allow-shared-ip: "pihole"
  16. spec:
  17. ports:
  18. - name: dns
  19. protocol: TCP
  20. port: 53
  21. targetPort: 53
  22. - name: http
  23. protocol: TCP
  24. port: 80
  25. targetPort: 80
  26. selector:
  27. run: pihole
  28. type: LoadBalancer
  29. loadBalancerIP: 10.42.42.239
  30. externalTrafficPolicy: Local
  31. ---
  32. apiVersion: v1
  33. kind: Service
  34. metadata:
  35. name: pihole-udp
  36. labels:
  37. run: pihole
  38. annotations:
  39. metallb.universe.tf/allow-shared-ip: "pihole"
  40. spec:
  41. ports:
  42. - name: dns
  43. protocol: UDP
  44. port: 53
  45. targetPort: 53
  46. selector:
  47. run: pihole
  48. type: LoadBalancer
  49. loadBalancerIP: 10.42.42.239
  50. externalTrafficPolicy: Local
  51. ---
  52. apiVersion: v1
  53. kind: PersistentVolume
  54. metadata:
  55. name: pihole
  56. spec:
  57. capacity:
  58. storage: 5Mi
  59. volumeMode: Filesystem
  60. accessModes:
  61. - ReadWriteMany
  62. persistentVolumeReclaimPolicy: Retain # Keep 4eva
  63. storageClassName: default
  64. mountOptions:
  65. - hard
  66. - nfsvers=3
  67. nfs:
  68. path: /mnt/DroboFS/Shares/Kubernetes/volumes/static/pihole
  69. server: 10.42.42.10
  70. claimRef:
  71. name: pihole
  72. namespace: default
  73. ---
  74. apiVersion: v1
  75. kind: PersistentVolumeClaim
  76. metadata:
  77. name: pihole
  78. annotations:
  79. nfs.io/storage-path: "pihole"
  80. spec:
  81. storageClassName: default
  82. accessModes:
  83. - ReadWriteMany
  84. resources:
  85. requests:
  86. storage: 5Mi
  87. status: {}
  88. ---
  89. apiVersion: v1
  90. kind: PersistentVolume
  91. metadata:
  92. name: pihole-dnsmasq
  93. spec:
  94. capacity:
  95. storage: 5Mi
  96. volumeMode: Filesystem
  97. accessModes:
  98. - ReadWriteMany
  99. persistentVolumeReclaimPolicy: Retain # Keep 4eva
  100. storageClassName: default
  101. mountOptions:
  102. - hard
  103. - nfsvers=3
  104. nfs:
  105. path: /mnt/DroboFS/Shares/Kubernetes/volumes/static/pihole-dnsmasq
  106. server: 10.42.42.10
  107. claimRef:
  108. name: pihole-dnsmasq
  109. namespace: default
  110. ---
  111. apiVersion: v1
  112. kind: PersistentVolumeClaim
  113. metadata:
  114. name: pihole-dnsmasq
  115. annotations:
  116. nfs.io/storage-path: "pihole-dnsmasq"
  117. spec:
  118. storageClassName: default
  119. accessModes:
  120. - ReadWriteMany
  121. resources:
  122. requests:
  123. storage: 5Mi
  124. status: {}
  125. ---
  126. apiVersion: apps/v1
  127. kind: Deployment
  128. metadata:
  129. name: pihole
  130. spec:
  131. replicas: 1
  132. selector:
  133. matchLabels:
  134. run: pihole
  135. strategy:
  136. type: Recreate
  137. template:
  138. metadata:
  139. labels:
  140. run: pihole
  141. spec:
  142. terminationGracePeriodSeconds: 30
  143. containers:
  144. - image: pihole/pihole:latest
  145. imagePullPolicy: "Always"
  146. name: pihole
  147. env:
  148. - name: TZ
  149. value: US/Michigan
  150. ports:
  151. - containerPort: 53
  152. protocol: UDP
  153. - containerPort: 53
  154. protocol: TCP
  155. - containerPort: 80
  156. protocol: TCP
  157. resources:
  158. limits:
  159. memory: "500Mi"
  160. cpu: "500m"
  161. requests:
  162. memory: "100Mi"
  163. cpu: "250m"
  164. volumeMounts:
  165. - mountPath: /etc/pihole/
  166. name: pihole
  167. - mountPath: /etc/dnsmasq.d/
  168. name: pihole-dnsmasq
  169. livenessProbe:
  170. exec:
  171. command:
  172. - host
  173. - google.com.
  174. - 127.0.0.1
  175. initialDelaySeconds: 300
  176. periodSeconds: 60
  177. restartPolicy: Always
  178. dnsConfig:
  179. nameservers:
  180. - 10.42.42.239
  181. - 10.42.42.1
  182. searches:
  183. - default.svc.cluster.local
  184. - svc.cluster.local
  185. - cluster.local
  186. options:
  187. - name: ndots
  188. value: "2"
  189. - name: edns0
  190. - name: trust-ad
  191. volumes:
  192. - name: pihole
  193. persistentVolumeClaim:
  194. claimName: pihole
  195. - name: pihole-dnsmasq
  196. persistentVolumeClaim:
  197. claimName: pihole-dnsmasq
  198. status: {}
  199. ---
  200. # Hosting
  201. apiVersion: networking.k8s.io/v1
  202. kind: Ingress
  203. metadata:
  204. name: pihole-management
  205. annotations:
  206. #nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
  207. #nginx.ingress.kubernetes.io/proxy-ssl-verify: "off"
  208. cert-manager.io/cluster-issuer: "letsencrypt-prod"
  209. spec:
  210. tls:
  211. - hosts:
  212. - pihole.monkeybox.org
  213. secretName: pihole-tls
  214. rules:
  215. - host: pihole.monkeybox.org
  216. http:
  217. paths:
  218. - path: /
  219. pathType: Prefix
  220. backend:
  221. service:
  222. name: pihole-tcp
  223. port:
  224. number: 80