Skip to content

Wave 0 — Foundation

namespaces

Pre-creates platform namespaces with Pod Security Admission labels.

Namespace PSS
argocd, cert-manager, external-dns, step-issuer, cnpg-system warn + audit restricted
metallb-system, nginx-ingress, longhorn, nfs-provisioner, monitoring enforce privileged

Talos will refuse MetalLB speakers and Longhorn pods without privileged enforce.

Validation

kubectl get ns --show-labels | grep pod-security shows the privileged namespaces. Do not expect MetalLB or Longhorn to start if metallb-system / longhorn are not enforce=privileged.

metallb

MetalLB Helm chart plus IPAddressPool / L2Advertisement manifests in the same Application (three Argo sources). The chart is the speaker; values/metallb/manifests/ is your LAN. This lab uses Layer 2, not BGP. Why that split: Application sources.

Must change: values/metallb/manifests/pool-apps.yaml and pool-ingress.yaml. Use the reserved VIP blocks from addressing (10.0.0.30 ingress, 10.0.0.50-99 apps). Never overlap .11.19 (CP nodes), .20 (Kubernetes API VIP), or .21.29 (workers).

Validation

Do not install ingress (wave 3) until this is true:

kubectl -n metallb-system get pods   # controller + speaker Running
kubectl get ipaddresspool,l2advertisement -A
# pools ingress + apps, addresses are *your* LAN, not leftover 10.0.0.30 if that is not yours

Speakers not Ready → no EXTERNAL-IP later. Wrong pool CIDR → collision or empty VIP.