---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: ingress-nginx
spec:
  interval: 30m
  chart:
    spec:
      chart: ingress-nginx
      version: 4.7.1
      sourceRef:
        kind: HelmRepository
        name: ingress-nginx
        namespace: flux-system
      interval: 30m
  values:
    controller:
      replicaCount: 3

      hostPort:
        enabled: true
        ports:
          http: 81
          https: 444

      updateStrategy:
        type: Recreate

      service:
        enabled: true
        type: LoadBalancer
        annotations:
          external-dns.alpha.kubernetes.io/hostname: "ingress.valinor.social"
          io.cilium/lb-ipam-ips: "10.2.42.1"
        externalTrafficPolicy: Local

      publishService:
        enabled: true

      metrics:
        enabled: true
        serviceMonitor:
          enabled: true
          namespace: network
          namespaceSelector:
            any: true

      ingressClassResource:
        default: true

      config:
        client-header-timeout: 120
        client-body-buffer-size: "100M"
        client-body-timeout: 120
        enable-brotli: "true"
        enable-real-ip: "true"
        use-proxy-protocol: "true"
        hsts-max-age: "31449600"
        keep-alive: 120
        keep-alive-requests: 10000
        proxy-body-size: 0
        proxy-buffer-size: "16k"
        ssl-protocols: "TLSv1.3 TLSv1.2"
        use-forwarded-headers: "true"
        # plugins: "crowdsec"
        # lua-shared-dicts: "crowdsec_cache: 50m"

      extraArgs:
        default-ssl-certificate: "network/valinor-social-tls"

      topologySpreadConstraints:
        - maxSkew: 2
          topologyKey: kubernetes.io/hostname
          whenUnsatisfiable: DoNotSchedule
          labelSelector:
            matchLabels:
              app.kubernetes.io/instance: ingress-nginx
              app.kubernetes.io/component: controller
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: app.kubernetes.io/component
                    operator: In
                    values:
                      - controller
                  - key: app.kubernetes.io/instance
                    operator: In
                    values:
                      - ingress-nginx
              topologyKey: kubernetes.io/hostname

      resources:
        requests:
          cpu: 23m
          memory: 381M

    defaultBackend:
      enabled: false