# Google Cloud Load Balancer Configuration
# This configuration uses GCP-native load balancing

apiVersion: v1
kind: Service
metadata:
  name: veza-backend-api-lb
  namespace: veza-production
  annotations:
    # Use GCP Load Balancer
    cloud.google.com/load-balancer-type: "Internal"  # or "External"
    cloud.google.com/backend-config: '{"default": "veza-backend-config"}'
    cloud.google.com/neg: '{"ingress": true}'
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: veza-backend-api
---
# BackendConfig for GCP Load Balancer
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: veza-backend-config
  namespace: veza-production
spec:
  # Health checks
  healthCheck:
    checkIntervalSec: 10
    timeoutSec: 5
    healthyThreshold: 2
    unhealthyThreshold: 3
    type: HTTP
    requestPath: /health
    port: 8080
  
  # Session affinity
  sessionAffinity:
    affinityType: "CLIENT_IP"
    affinityCookieTtlSec: 3600
  
  # Connection draining
  connectionDraining:
    drainingTimeoutSec: 60
  
  # Timeout
  timeoutSec: 60
  
  # IAP (Identity-Aware Proxy) - optional
  # iap:
  #   enabled: true
  #   oauthclientCredentials:
  #     secretName: iap-oauth-credentials
  
  # CDN - optional
  # cdn:
  #   enabled: true
  #   cachePolicy:
  #     includeHost: true
  #     includeProtocol: true
  #     includeQueryString: true
---
# FrontendConfig for SSL policies
apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: veza-frontend-config
  namespace: veza-production
spec:
  sslPolicy: "modern"
  redirectToHttps:
    enabled: true
    responseCodeName: "MOVED_PERMANENTLY_DEFAULT"
---
# Ingress for GCP Load Balancer
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: veza-ingress-gcp
  namespace: veza-production
  annotations:
    kubernetes.io/ingress.class: "gce"
    kubernetes.io/ingress.global-static-ip-name: "veza-static-ip"
    networking.gke.io/managed-certificates: "veza-ssl-cert"
    networking.gke.io/v1beta1.FrontendConfig: "veza-frontend-config"
spec:
  rules:
  - host: api.veza.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: veza-backend-api
            port:
              number: 8080
---
# ManagedCertificate for automatic SSL
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
  name: veza-ssl-cert
  namespace: veza-production
spec:
  domains:
  - api.veza.com
  - app.veza.com

