Aller au contenu principal

Orchestration Multi-Gateway

Le Plan de Contrôle STOA orchestre plusieurs gateways API grâce à un pattern Adaptateur unifié. Enregistrez n'importe quel gateway supporté, et le Plan de Contrôle gère la synchronisation des APIs, l'application des politiques et le provisionnement des consommateurs sur tous ces gateways.

Architecture

Gateways Supportés

GatewayTypeStockageAPI AdminStatut Adaptateur
STOARust, axumEn mémoireREST (/admin/*)Support complet
KongLua, OpenRestyYAML DB-lessREST (:8001)Support complet
GraviteeJavaMongoDB + ESREST (:8083)Support complet
webMethodsJavaElasticsearchREST (:5555)Support complet (16/16 méthodes)

Interface Adaptateur

Chaque adaptateur de gateway implémente 16 méthodes abstraites organisées en 5 catégories :

Cycle de Vie (3 méthodes)

MéthodeObjectifRetourne
health_check()Vérifier la connectivité du gatewayAdapterResult
connect()Initialiser la connexion/sessionNone
disconnect()Libérer les ressourcesNone

Gestion des APIs (3 méthodes)

MéthodeObjectifRetourne
sync_api(api_spec, tenant_id)Créer ou mettre à jour une route APIAdapterResult
delete_api(api_id)Supprimer une route APIAdapterResult
list_apis()Lister toutes les APIs géréeslist[dict]

Gestion des Politiques (3 méthodes)

MéthodeObjectifRetourne
upsert_policy(policy_spec)Créer ou mettre à jour une politique (limite de débit, CORS)AdapterResult
delete_policy(policy_id)Supprimer une politiqueAdapterResult
list_policies()Lister toutes les politiques géréeslist[dict]

Gestion des Consommateurs (3 méthodes)

MéthodeObjectifRetourne
provision_application(app_spec)Enregistrer un consommateur avec ses credentialsAdapterResult
deprovision_application(app_id)Supprimer un consommateurAdapterResult
list_applications()Lister tous les consommateurs géréslist[dict]

Étendu (4 méthodes, spécifiques au gateway)

MéthodeObjectifSupporté Par
upsert_auth_server(auth_spec)Configurer un fournisseur OIDCwebMethods
upsert_strategy(strategy_spec)Définir la stratégie d'authwebMethods
upsert_scope(scope_spec)Définir les scopes OAuthwebMethods
upsert_alias(alias_spec)Configurer un alias d'endpointwebMethods
apply_config(config_spec)Appliquer la configuration complètewebMethods
export_archive()Exporter une sauvegarde du gatewaywebMethods

Les méthodes non supportées retournent AdapterResult(success=False, error="Not supported by <gateway>").

AdapterResult

Toutes les méthodes d'adaptateur retournent un résultat standardisé :

@dataclass
class AdapterResult:
success: bool
resource_id: str | None = None
data: dict | None = None
error: str | None = None

Enregistrement des Gateways

Enregistrez les gateways via l'API du Plan de Contrôle ou via CRD :

Via l'API

Configure your environment

The examples below use environment variables. Set them for your STOA instance:

export STOA_API_URL="https://api.gostoa.dev"       # Replace with your domain
export STOA_AUTH_URL="https://auth.gostoa.dev" # Keycloak OIDC provider
export STOA_GATEWAY_URL="https://mcp.gostoa.dev" # MCP Gateway endpoint

Self-hosted? Replace gostoa.dev with your domain.

curl -X POST "${STOA_API_URL}/v1/gateways" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"name": "kong-production",
"display_name": "Kong Production (GRA)",
"gateway_type": "kong",
"base_url": "http://kong-admin:8001",
"environment": "prod",
"capabilities": ["rest", "rate_limiting"]
}'

Via CRD

apiVersion: gostoa.dev/v1alpha1
kind: GatewayInstance
metadata:
name: kong-production
namespace: stoa-system
spec:
displayName: Kong Production (GRA)
gatewayType: kong
environment: prod
baseUrl: http://kong-admin:8001
capabilities: [rest, rate_limiting]

Types de Gateways

Valeurs valides pour gateway_type :

TypeDescription
stoaSTOA Gateway (générique)
stoa_edge_mcpSTOA en mode edge-mcp
stoa_sidecarSTOA en mode sidecar
stoa_proxySTOA en mode proxy
stoa_shadowSTOA en mode shadow
kongKong (DB-less)
graviteeGravitee APIM v4
webmethodsSoftware AG webMethods
apigeeGoogle Apigee
aws_apigatewayAWS API Gateway

Détails par Gateway

STOA Gateway (Rust)

AspectDétail
API AdminPOST /admin/apis, POST /admin/policies, GET /admin/health
AuthToken Bearer (admin_api_token)
StockageEn mémoire (le Plan de Contrôle est la source de vérité)
Idempotencesync_api et upsert_policy sont tous deux des upserts
Comportement cléTout l'état est perdu au redémarrage ; l'API CP re-synchronise automatiquement
# Contrôle de santé
curl "${STOA_GATEWAY_URL}/admin/health" \
-H "Authorization: Bearer ${ADMIN_TOKEN}"

Kong (DB-less)

AspectDétail
API AdminGET /services, GET /plugins, POST /config
AuthEn-tête Kong-Admin-Token
StockageYAML déclaratif via POST /config (rechargement atomique)
Pattern d'étatLire l'état actuel → fusionner les modifications → POST de la configuration complète
Version de config_format_version: "3.0" requis

Le mode DB-less de Kong rend l'API Admin en lecture seule pour les écritures individuelles. Toutes les mutations suivent le pattern lire-fusionner-poster :

1. GET /services + /plugins + /consumers → état actuel
2. Fusionner le changement souhaité (upsert par nom/tag)
3. POST /config avec le payload déclaratif complet → rechargement atomique

Gravitee (APIM v4)

AspectDétail
API Management/management/v2/environments/DEFAULT/apis
AuthAuth Basic (configurable)
StockageMongoDB + Elasticsearch (CRUD complet)
Cycle de vie APICREATED → PUBLISHED → STARTED → DEPLOYED
PlansLimitation de débit via des Plans avec flows (pas des politiques autonomes)

Les APIs Gravitee nécessitent des transitions de cycle de vie explicites :

1. POST /apis (créer, définition V4)
2. POST /apis/{id}/_start (démarrer)
3. POST /apis/{id}/deployments (déployer)

webMethods (Software AG)

AspectDétail
API Admin/rest/apigateway/*
AuthAuth Basic (Administrator:manage)
StockageElasticsearch (interne)
Ensemble de fonctionnalités16/16 méthodes complètes (adaptateur le plus complet)
Import OpenAPISeulement 3.0.x supporté (pas 3.1.0)

webMethods est l'adaptateur le plus complet, supportant l'intégration OIDC, les alias d'endpoints, la gestion de configuration et la sauvegarde/export complète.

Flux de Synchronisation

Lorsque vous créez ou mettez à jour une API dans le Plan de Contrôle, elle se synchronise avec tous les gateways liés :

Pour les configurations multi-gateway, le Plan de Contrôle se synchronise avec chaque gateway lié :

Ajouter un Nouvel Adaptateur de Gateway

  1. Copiez control-plane-api/src/adapters/template/ vers adapters/<new_gateway>/
  2. Implémentez les 16 méthodes abstraites dans adapter.py
  3. Créez les fonctions de traduction de spec dans mappers.py
  4. Enregistrez dans adapters/registry.py
  5. Ajoutez le type à la migration de base de données gateway_type_enum
  6. Écrivez des tests (~30+ tests unitaires avec appels HTTP mockés)

Règles du Contrat Adaptateur

  • Toutes les méthodes doivent être idempotentes (appeler deux fois produit le même résultat)
  • Retourner AdapterResult(success=False, error="...") pour les échecs ; ne jamais lever d'exceptions
  • Utiliser httpx.AsyncClient pour les appels HTTP (async, pool de connexions)
  • Journaliser les avertissements pour les échecs non critiques (par exemple plan non souscriptible)

Dépannage

ProblèmeCauseSolution
sync_api retourne 404Gateway non enregistréEnregistrez d'abord via l'API ou CRD
Le rechargement de config Kong échoueService invalide dans le payloadTout ou rien : un mauvais service casse le rechargement
L'API Gravitee n'est pas accessibleAPI non démarrée/déployéeExécutez le cycle de vie complet : créer → plan → publier → déployer → démarrer
L'import webMethods échoueSpec OpenAPI 3.1.0Convertir en 3.0.3 : sed 's/3.1.0/3.0.3/'
L'adaptateur retourne "Not supported"Méthode étendue sur non-webMethodsAttendu ; seul webMethods supporte les 16 méthodes

Voir Aussi