/ abyss / traefik.tf
traefik.tf
 1  resource "helm_release" "traefik" {
 2    name       = "traefik"
 3    namespace  = "kube-system"
 4    repository = "https://helm.traefik.io/traefik"
 5    chart      = "traefik"
 6    version    = "26.0.0"
 7  
 8    # todo: increase UDP buffer size for QUIC on Talos https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes
 9    values = [<<YAML
10      priorityClassName: system-cluster-critical
11  
12      # Listen on port 80 and 443 since we don't have load balancing
13      hostNetwork: true
14      deployment:
15        kind: DaemonSet
16      updateStrategy:
17        rollingUpdate:
18          maxUnavailable: 1
19          maxSurge: null
20      service:
21        enabled: false
22  
23      logs:
24        general:
25          level: INFO
26        access:
27          enabled: true
28  
29      # Enable Prometheus metrics
30      metrics:
31        prometheus:
32          # Create a dedicated metrics service for use with ServiceMonitor
33          service:
34            enabled: true
35          serviceMonitor:
36            enabled: true
37            interval: 5s
38  
39      # todo: expose this safely or use grafana
40      ingressRoute:
41        dashboard:
42          enabled: false
43  
44      # Allow Traefik to run as root so it can bind to port 80 and 443
45      securityContext:
46        capabilities:
47          drop:
48            - ALL
49          add:
50            - NET_BIND_SERVICE
51        runAsUser: 0
52        runAsGroup: 0
53        runAsNonRoot: false
54      ports:
55        # HTTPS
56        websecure:
57          port: 443
58          forwardedHeaders:
59            trustedIPs: [${join(", ", [for ip in var.node_ips : "'${ip}/32'"])}]
60            insecure: false
61          http3:
62            enabled: true
63        # Redirect all HTTP traffic to HTTPS
64        web:
65          port: 80
66          redirectTo:
67            port: websecure
68    YAML
69    ]
70  
71    depends_on = [helm_release.cilium, kubectl_manifest.coreos_crds]
72  }