# Production Frontend Ingress Configuration # With caching, compression, and security headers --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: frontend-ingress namespace: vitrown-prod annotations: nginx.ingress.kubernetes.io/proxy-body-size: "50m" nginx.ingress.kubernetes.io/proxy-read-timeout: "60" nginx.ingress.kubernetes.io/proxy-send-timeout: "60" nginx.ingress.kubernetes.io/proxy-connect-timeout: "30" # Rate limiting - 50 requests per second per IP for frontend nginx.ingress.kubernetes.io/limit-rps: "50" # nginx.ingress.kubernetes.io/limit-connections: "30" # DISABLED nginx.ingress.kubernetes.io/limit-burst-multiplier: "5" # Enable keepalive nginx.ingress.kubernetes.io/upstream-keepalive-connections: "64" nginx.ingress.kubernetes.io/upstream-keepalive-timeout: "60" # Enable gzip compression nginx.ingress.kubernetes.io/enable-compression: "true" # SSL configuration nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" # Security and caching headers nginx.ingress.kubernetes.io/configuration-snippet: | # Cache static assets location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { add_header Cache-Control "public, max-age=31536000, immutable"; } nginx.ingress.kubernetes.io/server-snippet: | add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; spec: ingressClassName: nginx tls: - hosts: - vitrown.com - www.vitrown.com secretName: vitrown-tls rules: - host: vitrown.com http: paths: - path: / pathType: Prefix backend: service: name: frontend port: number: 3000 - host: www.vitrown.com http: paths: - path: / pathType: Prefix backend: service: name: frontend port: number: 3000