Skip to main content

Networking Overview

Purpose

Lumie's networking stack spans OCI load balancers, K3s addons, certificate automation, and per-application ingress manifests. This page is an overview document for how traffic enters the cluster, how service names resolve inside it, and which repo paths own each layer.

For cluster topology, see Cluster Overview. For the active ingress controller, see Traefik.

Source Paths

PathRole
lumie-infra/provision/terraform/nlb_0214.tfMain public HTTPS ingress NLB
lumie-infra/provision/terraform/nlb_teleport_0213.tfSeparate Teleport HTTPS ingress NLB
lumie-infra/platform/traefik-config/Patch for the k3s-bundled Traefik addon
lumie-infra/platform/coredns-config/CoreDNS workload shape override
lumie-infra/platform/cert-manager/cert-manager chart and Cloudflare token secret sync
lumie-infra/applications/cluster-bootstrap/manifests/cluster-issuer.yamlShared ACME issuers
lumie-infra/applications/lumie/**/ingress*.yamlProduct ingress rules and middleware attachments

Boundary Map

LayerActive ownerResponsibility
Public DNS and proxyCloudflare plus OCI public IPs from TerraformDomain resolution and public entry to Lumie
Layer-4 ingressOCI NLBs in TerraformForward TCP 443 to worker nodes or Teleport NodePort
Layer-7 ingressk3s-bundled Traefik plus repo patchesHost and path routing, TLS termination, Traefik middleware
Certificate automationcert-manager plus ClusterIssuer resourcesACME issuance and TLS secret management
Cluster DNSCoreDNS addon with repo-managed DaemonSetService discovery inside the cluster
Legacy edge artifactsbootstrap/kong/Retained repo-only Kong configuration, not part of the active path

Runtime Flow

Active Networking Model

The active runtime path is:

  1. Cloudflare resolves a public hostname to an OCI reserved public IP.
  2. The OCI NLB forwards TCP 443 to worker private IPs without terminating TLS.
  3. Traefik on the worker terminates TLS by SNI and evaluates Ingress objects with class traefik.
  4. Optional Traefik Middleware strips /api prefixes or performs redirects.
  5. The selected Kubernetes Service forwards traffic to pods.

For Teleport, the path is separate: Cloudflare points to a dedicated NLB that forwards TCP 443 to NodePort 30443, bypassing Traefik.

TLS And DNS Model

  • Standard Lumie domains use letsencrypt-prod or letsencrypt-staging.
  • White-label custom domains use letsencrypt-customdomain with Cloudflare DNS-01 so issuance works regardless of HTTP proxy state.
  • CoreDNS resolves *.svc.cluster.local names inside the cluster and forwards everything else to the node resolver.

The live cluster inspected on June 14, 2026 had all three cluster issuers ready: letsencrypt-prod, letsencrypt-staging, and letsencrypt-customdomain.

Operational Notes

  • The development cluster ingress intentionally serves only API paths on dev.lumie-infra.com; the frontend itself runs locally, so bare / returns 404.
  • Traefik timeout values were deliberately extended cluster-wide to support large Zot uploads through the ingress path.
  • CoreDNS is deployed as a DaemonSet rather than the k3s default Deployment so every node answers DNS locally.

Contract Drift

Networking has one major repo-versus-runtime drift:

  • lumie-infra/README.md still describes Kong as the ingress controller, but lumie-infra/AGENTS.md, product ingress manifests, Terraform comments, and the live cluster all show Traefik as the active ingress path. No live kong namespace or Argo CD kong application exists as of June 14, 2026.

Treat bootstrap/kong/ as legacy reference material, not the active edge.

Failure Modes

Failure pointImpact
OCI NLB reserved IP detachesPublic HTTPS becomes unreachable before traffic reaches the cluster
TLS secret missing or wrong issuerTraefik falls back to invalid cert behavior for that hostname
CoreDNS DaemonSet or ConfigMap driftIn-cluster name resolution becomes slow or broken
Middleware misconfigurationBackend services receive the wrong request path
Kong artifacts mistaken for active configOperators debug the wrong ingress stack

Verification

kubectl get applications -n argocd
kubectl get clusterissuers
kubectl get pods -n kube-system
rg -n "traefik|ClusterIssuer|ingressClassName|cert-manager.io/cluster-issuer|Middleware" \
lumie-infra/provision/terraform \
lumie-infra/platform \
lumie-infra/applications