Aller au contenu principal

Déploiement OpenShift

La Plateforme STOA fonctionne sur Red Hat OpenShift (4.12+) avec quelques ajustements de configuration mineurs. Ce guide couvre les différences par rapport à Kubernetes standard.

Différences Clés avec Kubernetes

FonctionnalitéKubernetesOpenShift
IngressRessource IngressRessource Route (ou Ingress via HAProxy)
SécuritéPodSecurityStandardsSecurityContextConstraints (SCC)
RegistryN'importe quel (GHCR, ECR)Registry interne + pull secrets
TLScert-managerOpenShift intégré ou cert-manager
RéseauCalico/CiliumOVN-Kubernetes (par défaut)

Routes (À la Place d'Ingress)

Remplacez les Ingress Kubernetes par des Routes OpenShift :

apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: stoa-gateway
namespace: stoa-system
spec:
host: mcp.<VOTRE_DOMAINE>
to:
kind: Service
name: stoa-gateway
weight: 100
port:
targetPort: http
tls:
termination: edge
insecureEdgeTerminationPolicy: Redirect

Créez des routes pour chaque service :

ServiceHôtePort Cible
Gatewaymcp.<VOTRE_DOMAINE>http (8080)
APIapi.<VOTRE_DOMAINE>http (8000)
Consoleconsole.<VOTRE_DOMAINE>http (8080)
Portailportal.<VOTRE_DOMAINE>http (8080)
Keycloakauth.<VOTRE_DOMAINE>http (8080)

Surcharge Helm

Désactivez Ingress et utilisez des Routes à la place :

# values-openshift.yaml
stoaGateway:
ingress:
enabled: false

# Appliquez les routes séparément
# kubectl apply -f openshift/routes/

SecurityContextConstraints

Les conteneurs STOA s'exécutent sans droits root avec le SCC restricted-v2 (défaut OpenShift pour les nouveaux projets).

Vérifier la Compatibilité SCC

# Vérifier quel SCC est assigné
oc get pods -n stoa-system -o jsonpath='{range .items[*]}{.metadata.name}: {.metadata.annotations.openshift\.io/scc}{"\n"}{end}'

Tous les conteneurs STOA doivent s'exécuter sous restricted-v2. Si les pods ne se planifient pas :

# Accorder restricted-v2 explicitement (généralement non nécessaire)
oc adm policy add-scc-to-user restricted-v2 \
-z default -n stoa-system

Prérequis des Conteneurs

Les conteneurs STOA sont déjà compatibles avec restricted-v2 :

  • runAsNonRoot: true
  • allowPrivilegeEscalation: false
  • capabilities.drop: [ALL]
  • Pas de réseau hôte ni de mode privilégié

Configuration des Images

Si vous utilisez le registry interne OpenShift :

# Tagger et pousser vers le registry interne
oc registry login
docker tag ghcr.io/stoa-platform/stoa-gateway:latest \
image-registry.openshift-image-registry.svc:5000/stoa-system/stoa-gateway:latest
docker push image-registry.openshift-image-registry.svc:5000/stoa-system/stoa-gateway:latest

Ou configurez un pull secret pour GHCR :

oc create secret docker-registry ghcr-pull-secret \
--docker-server=ghcr.io \
--docker-username=<GITHUB_USER> \
--docker-password=<GITHUB_TOKEN> \
-n stoa-system

oc secrets link default ghcr-pull-secret --for=pull -n stoa-system

Compatibilité des Operators

STOA fonctionne avec ces Operators OpenShift :

OperatorObjectifNotes
Keycloak Operator (RHSSO)Gestion des identitésÀ utiliser à la place de Keycloak autonome
Prometheus OperatorMonitoringInclus dans le Monitoring OpenShift
Elasticsearch OperatorJournalisationPour remplacer OpenSearch
cert-manager OperatorCertificats TLSDisponible depuis OperatorHub

Utiliser le Monitoring OpenShift

OpenShift inclut une stack Prometheus intégrée. Activez le monitoring des workloads utilisateur :

# ConfigMap cluster-monitoring-config
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-monitoring-config
namespace: openshift-monitoring
data:
config.yaml: |
enableUserWorkload: true

Les ServiceMonitors de STOA seront automatiquement découverts par l'instance Prometheus des workloads utilisateur.

Installation sur OpenShift

# Créer le projet
oc new-project stoa-system

# Appliquer les CRDs
oc apply -f charts/stoa-platform/crds/

# Installer avec les valeurs spécifiques OpenShift
helm install stoa-platform ./charts/stoa-platform \
-n stoa-system \
-f values-openshift.yaml

# Créer les routes
oc apply -f openshift/routes/

Dépannage

ProblèmeCauseSolution
Pod CrashLoopBackOffViolation SCCVérifier oc describe pod pour les erreurs SCC
Route inaccessibleMauvaise terminaison TLSUtiliser edge pour les backends HTTPS derrière HTTP
Échec de récupération d'imagePas de pull secretCréer et lier ghcr-pull-secret
ServiceMonitor introuvableMonitoring workload utilisateur désactivéActiver dans cluster-monitoring-config
Politique réseau bloque le traficSyntaxe OVN-Kubernetes vs CalicoUtiliser networking.k8s.io/v1 (standard)

Voir Aussi