Deploiement du Proxy

Guide de deploiement du proxy Data Residency sur Kubernetes et OpenShift

Ce guide vous accompagne dans le deploiement du proxy Data Residency sur votre infrastructure Kubernetes ou OpenShift.

Prerequis#

  • Cluster Kubernetes 1.25+ ou OpenShift 4.10+
  • Helm 3.x installe
  • Base PostgreSQL 14+ accessible depuis le cluster
  • Certificat SSL valide (ou cert-manager configure)
  • Acces au registre ghcr.io/siovos

Architecture du proxy#

Votre Cluster KubernetesIngress(HTTPS)Proxy(Pod)PostgreSQL(interne)Siovos Archi

Installation avec Helm#

1. Ajouter le repo Helm#

helm repo add siovos https://charts.siovos.com
helm repo update

2. Creer le namespace#

kubectl create namespace siovos-archi

3. Configurer les secrets#

Creez un fichier secrets.yaml :

apiVersion: v1
kind: Secret
metadata:
  name: siovos-proxy-secrets
  namespace: siovos-archi
type: Opaque
stringData:
  DATABASE_URL: "postgresql://user:password@postgres-host:5432/siovos_archi"
  JWT_PUBLIC_KEY: |
    -----BEGIN PUBLIC KEY-----
    [Copiez la cle depuis Siovos Archi > Data Residency]
    -----END PUBLIC KEY-----

Appliquez le secret :

kubectl apply -f secrets.yaml

4. Creer le fichier values#

Creez values.yaml :

replicaCount: 2

image:
  repository: ghcr.io/siovos/siovos-archi-data-proxy
  tag: "1.0.0"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 3000

ingress:
  enabled: true
  className: nginx  # ou "openshift-default" pour OpenShift
  hosts:
    - host: proxy.votre-domaine.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: proxy-tls
      hosts:
        - proxy.votre-domaine.com

resources:
  requests:
    cpu: 100m
    memory: 256Mi
  limits:
    cpu: 500m
    memory: 512Mi

existingSecret: siovos-proxy-secrets

# Health checks
livenessProbe:
  httpGet:
    path: /health
    port: 3000
  initialDelaySeconds: 10
  periodSeconds: 30

readinessProbe:
  httpGet:
    path: /health
    port: 3000
  initialDelaySeconds: 5
  periodSeconds: 10

5. Installer le chart#

helm install siovos-proxy siovos/siovos-archi-data-proxy \
  --namespace siovos-archi \
  --values values.yaml

6. Verifier le deploiement#

kubectl get pods -n siovos-archi
kubectl logs -n siovos-archi -l app=siovos-proxy

Configuration OpenShift#

Pour OpenShift, ajoutez ces configurations specifiques :

# values-openshift.yaml
ingress:
  enabled: true
  className: openshift-default
  annotations:
    route.openshift.io/termination: edge

securityContext:
  runAsNonRoot: true
  seccompProfile:
    type: RuntimeDefault

containerSecurityContext:
  allowPrivilegeEscalation: false
  capabilities:
    drop:
      - ALL

Installez avec :

helm install siovos-proxy siovos/siovos-archi-data-proxy \
  --namespace siovos-archi \
  --values values.yaml \
  --values values-openshift.yaml

Variables d'environnement#

VariableDescriptionRequis
DATABASE_URLURL de connexion PostgreSQLOui
JWT_PUBLIC_KEYCle publique RS256 pour valider les tokensOui
PORTPort d'ecoute (defaut: 3000)Non
NODE_ENVEnvironnement (production)Non
LOG_LEVELNiveau de logs (info, debug, error)Non

Initialisation de la base de donnees#

Le proxy initialise automatiquement le schema au demarrage. Assurez-vous que l'utilisateur PostgreSQL a les droits de creation de tables.

Pour une initialisation manuelle :

# Depuis un pod avec acces a la base
kubectl exec -it -n siovos-archi deploy/siovos-proxy -- npx prisma migrate deploy

Certificat SSL#

Avec cert-manager#

# certificate.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: proxy-tls
  namespace: siovos-archi
spec:
  secretName: proxy-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
    - proxy.votre-domaine.com

Certificat auto-signe (developpement)#

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout tls.key -out tls.crt \
  -subj "/CN=proxy.votre-domaine.com"

kubectl create secret tls proxy-tls \
  --key tls.key --cert tls.crt \
  -n siovos-archi

Haute disponibilite#

Pour une configuration haute disponibilite :

replicaCount: 3

podDisruptionBudget:
  enabled: true
  minAvailable: 2

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: siovos-proxy
          topologyKey: kubernetes.io/hostname

Monitoring#

Le proxy expose des metriques Prometheus sur /metrics :

# ServiceMonitor pour Prometheus Operator
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: siovos-proxy
  namespace: siovos-archi
spec:
  selector:
    matchLabels:
      app: siovos-proxy
  endpoints:
    - port: http
      path: /metrics
      interval: 30s

Depannage#

Le proxy ne demarre pas#

# Verifier les logs
kubectl logs -n siovos-archi -l app=siovos-proxy --tail=100

# Verifier la connexion a la base
kubectl exec -it -n siovos-archi deploy/siovos-proxy -- \
  npx prisma db pull

Erreur de validation JWT#

Verifiez que la cle publique dans le secret correspond exactement a celle affichee dans Siovos Archi > Data Residency.

Timeout de connexion#

  1. Verifiez que le firewall autorise le trafic depuis Siovos (IPs : 34.149.x.x, 35.190.x.x)
  2. Verifiez que l'Ingress expose bien le service sur HTTPS
  3. Testez avec curl depuis l'exterieur : curl https://proxy.votre-domaine.com/health

Mise a jour#

helm repo update
helm upgrade siovos-proxy siovos/siovos-archi-data-proxy \
  --namespace siovos-archi \
  --values values.yaml

Desinstallation#

helm uninstall siovos-proxy -n siovos-archi
kubectl delete namespace siovos-archi

La desinstallation ne supprime pas les donnees PostgreSQL. Sauvegardez ou supprimez manuellement la base si necessaire.

Support#

Pour toute question technique :