Fix pihole for v6: pin digest, listeningMode=ALL, v6 password env, readiness probe
A fresh node pull of pihole:latest silently upgraded v5->v6 (Core v6.2.2). v6's default listeningMode=LOCAL drops DNS from non-attached subnets, which killed all cross-node svclb DNS the moment the pod rescheduled off its old node. v6 also ignores the WEBPASSWORD env. - image pinned by digest (Core v6.2.2) - FTLCONF_dns_listeningMode=ALL - admin password via FTLCONF_webserver_api_password <- pihole-admin secret - tcpSocket:53 readiness probe so rollout status waits for FTL Applied to the cluster via kubectl replace; DNS verified answering on all four node IPs, admin API auth verified. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
96e1825629
commit
fe72f1e85a
11
README.md
11
README.md
@ -85,7 +85,10 @@ to secrets and no delete verbs.
|
|||||||
## Known quirks (faithful to live state, fix at leisure)
|
## Known quirks (faithful to live state, fix at leisure)
|
||||||
|
|
||||||
- Most images are `:latest`/`:stable` — deploys are not reproducible until
|
- Most images are `:latest`/`:stable` — deploys are not reproducible until
|
||||||
pinned. vaultwarden is pinned (1.35.4).
|
pinned. vaultwarden is pinned (1.35.4); pihole is pinned by digest (Core
|
||||||
|
v6.2.2) after `:latest` silently jumped v5→v6 on a fresh node pull
|
||||||
|
(2026-07-26) and broke DNS for cross-node sources (v6 defaults to
|
||||||
|
`listeningMode=LOCAL`) — fixed via `FTLCONF_dns_listeningMode=ALL`.
|
||||||
- searxng keeps its helm-generated name suffix (`searxng-1723974683`) because
|
- searxng keeps its helm-generated name suffix (`searxng-1723974683`) because
|
||||||
deployment selectors are immutable; its helm release record still exists in
|
deployment selectors are immutable; its helm release record still exists in
|
||||||
the cluster — don't run `helm upgrade/uninstall` on it, this repo is the
|
the cluster — don't run `helm upgrade/uninstall` on it, this repo is the
|
||||||
@ -103,4 +106,8 @@ to secrets and no delete verbs.
|
|||||||
`rpi-master_undervoltage_CNI_corruption_incident-2026-07-25.md`.
|
`rpi-master_undervoltage_CNI_corruption_incident-2026-07-25.md`.
|
||||||
- 2026-07-26: initial import of manifests from live cluster; HA ingress
|
- 2026-07-26: initial import of manifests from live cluster; HA ingress
|
||||||
defaultBackend fixed; unifiedstreaming-svc LoadBalancer→ClusterIP;
|
defaultBackend fixed; unifiedstreaming-svc LoadBalancer→ClusterIP;
|
||||||
pihole/USP secrets moved to secretKeyRef (pending first apply).
|
pihole/USP secrets migrated to secretKeyRef in-cluster.
|
||||||
|
- 2026-07-26: pihole surprise v5→v6 upgrade via `:latest` on a fresh node
|
||||||
|
pull; image pinned by digest, `FTLCONF_dns_listeningMode=ALL` +
|
||||||
|
`FTLCONF_webserver_api_password` (v6 ignores WEBPASSWORD), readiness probe
|
||||||
|
on :53 added. Gitea Actions pipeline + deployer RBAC added.
|
||||||
|
|||||||
@ -1,7 +1,13 @@
|
|||||||
# DIVERGENCE from live state (intentional): the live deployment has WEBPASSWORD
|
# Pi-hole v6 (image pinned by digest = Core v6.2.2 — :latest bit us on
|
||||||
# as a plaintext env value. Here it comes from the `pihole-admin` secret —
|
# 2026-07-26 when a fresh node pull silently jumped v5→v6).
|
||||||
# create it (see secret.example.yaml) BEFORE applying this, or the pod will
|
# v6 notes:
|
||||||
# fail with CreateContainerConfigError.
|
# - FTLCONF_dns_listeningMode=ALL is REQUIRED in k8s: the v6 default (LOCAL)
|
||||||
|
# only answers queries from directly-attached subnets, which silently drops
|
||||||
|
# all cross-node svclb traffic.
|
||||||
|
# - v6 ignores the old WEBPASSWORD env; the admin password is
|
||||||
|
# FTLCONF_webserver_api_password, fed from the `pihole-admin` secret —
|
||||||
|
# create it (see secret.example.yaml) BEFORE applying.
|
||||||
|
# - Readiness probe on :53 so rollouts wait for FTL to actually serve DNS.
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@ -40,12 +46,14 @@ spec:
|
|||||||
- raspi
|
- raspi
|
||||||
containers:
|
containers:
|
||||||
- name: pihole
|
- name: pihole
|
||||||
image: pihole/pihole:latest
|
image: pihole/pihole@sha256:e28e239f55e648a9d32c8f065650acfe987ddebf1cd5f64f1c071e8716156ceb # Core v6.2.2
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
env:
|
env:
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: America/Los_Angeles
|
value: America/Los_Angeles
|
||||||
- name: WEBPASSWORD
|
- name: FTLCONF_dns_listeningMode
|
||||||
|
value: ALL
|
||||||
|
- name: FTLCONF_webserver_api_password
|
||||||
valueFrom:
|
valueFrom:
|
||||||
secretKeyRef:
|
secretKeyRef:
|
||||||
name: pihole-admin
|
name: pihole-admin
|
||||||
@ -72,6 +80,12 @@ spec:
|
|||||||
memory: 2Gi
|
memory: 2Gi
|
||||||
securityContext:
|
securityContext:
|
||||||
privileged: true
|
privileged: true
|
||||||
|
readinessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 53
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 10
|
||||||
|
failureThreshold: 3
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: gv-pihole
|
- name: gv-pihole
|
||||||
mountPath: /etc/pihole
|
mountPath: /etc/pihole
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user