--- # yaml-language-server: $schema=https://raw.githubusercontent.com/fluxcd-community/flux2-schemas/main/helmrelease-helm-v2beta1.json apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: ingress-nginx spec: interval: 30m chart: spec: chart: ingress-nginx version: 4.8.3 sourceRef: kind: HelmRepository name: ingress-nginx namespace: flux-system interval: 30m values: controller: replicaCount: 3 updateStrategy: type: RollingUpdate allowSnippetAnnotations: true enableAnnotationValidations: true service: enabled: true type: LoadBalancer annotations: load-balancer.hetzner.cloud/location: fsn1 load-balancer.hetzner.cloud/protocol: tcp load-balancer.hetzner.cloud/name: hsn-nginx load-balancer.hetzner.cloud/use-private-ip: true load-balancer.hetzner.cloud/uses-proxyprotocol: true publishService: enabled: true metrics: enabled: true serviceMonitor: enabled: true namespace: network namespaceSelector: any: true ingressClassResource: default: true config: block-user-agents: "GPTBot,~*GPTBot*,ChatGPT-User,~*ChatGPT-User*,Google-Extended,~*Google-Extended*,CCBot,~*CCBot*,Omgilibot,~*Omgilibot*,FacebookBot,~*FacebookBot*" # taken from https://github.com/superseriousbusiness/gotosocial/blob/main/internal/web/robots.go client-header-timeout: 120 client-body-buffer-size: "100M" client-body-timeout: 120 enable-brotli: "true" enable-ocsp: "true" enable-real-ip: "true" use-proxy-protocol: "true" hide-headers: Server,X-Powered-By 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" server-snippet: | resolver local=on ipv6=off; 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 extraVolumes: - name: crowdsec-bouncer-plugin emptyDir: {} extraInitContainers: - name: init-clone-crowdsec-bouncer image: crowdsecurity/lua-bouncer-plugin imagePullPolicy: IfNotPresent env: - name: API_URL value: "http://crowdsec-service.security.svc.cluster.local:8080" # crowdsec lapi service-name - name: API_KEY valueFrom: secretKeyRef: name: nginx-ingress-secrets key: nginx-ingress-bouncer-apikey - name: BOUNCER_CONFIG value: "/crowdsec/crowdsec-bouncer.conf" - name: BAN_TEMPLATE_PATH value: /etc/nginx/lua/plugins/crowdsec/templates/ban.html command: ['sh', '-c', "sh /docker_start.sh; mkdir -p /lua_plugins/crowdsec/; cp -R /crowdsec/* /lua_plugins/crowdsec/"] volumeMounts: - name: crowdsec-bouncer-plugin mountPath: /lua_plugins extraVolumeMounts: - name: crowdsec-bouncer-plugin mountPath: /etc/nginx/lua/plugins/crowdsec subPath: crowdsec defaultBackend: enabled: false