Skip to main content

Migration from Kong OSS / Enterprise

This guide covers migration from Kong Gateway (OSS or Enterprise) to STOA Platform, leveraging Kong's declarative configuration model for a smooth transition.

What You Have​

Typical Kong stack:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ CURRENT STATE β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Kong Gateway (OSS or Enterprise) β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ Services β”‚ β”‚ Routes β”‚ β”‚ Plugins β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ & Upst. β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Kong Manager / Konnect (optional) β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ Dev β”‚ β”‚ Analyticsβ”‚ β”‚ Runtime β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ Portal β”‚ β”‚ β”‚ β”‚ Groups β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ Common migration drivers: β”‚
β”‚ β€’ Seeking unified MCP + REST gateway β”‚
β”‚ β€’ European data sovereignty requirements β”‚
β”‚ β€’ Multi-tenant isolation at the Kubernetes namespace level β”‚
β”‚ β€’ GitOps-first configuration management β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

What STOA Provides​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ WITH STOA β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ STOA Control Plane (Cloud) β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ Portal β”‚ β”‚ Console β”‚ β”‚ API β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ Catalog β”‚ β”‚ Admin β”‚ β”‚ Metrics β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β”‚ orchestrates β”‚
β”‚ β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ STOA Gateway (Rust, high-performance) β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ MCP β”‚ β”‚ REST β”‚ β”‚ Rate β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ Protocol β”‚ β”‚ Proxy β”‚ β”‚ Limiting β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ Benefits: β”‚
β”‚ β€’ Native MCP support for AI agents β”‚
β”‚ β€’ Namespace-level tenant isolation β”‚
β”‚ β€’ GitOps-first (ArgoCD) configuration β”‚
β”‚ β€’ European hosting with data residency controls β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Configuration Mapping​

Kong's declarative model maps naturally to STOA concepts:

Kong ConceptSTOA EquivalentNotes
ServiceAPI DefinitionBackend upstream configuration
RouteAPI RoutePath + method matching
PluginSTOA PolicyRate limiting, auth, transforms
ConsumerConsumer / SubscriptionAPI access management
Consumer GroupTenantMulti-tenant isolation
UpstreamBackend URLHealth checks included
CertificateTLS CertificateManaged via Keycloak/cert-manager
Workspace (Enterprise)Tenant NamespaceK8s namespace isolation

Plugin Mapping​

Kong PluginSTOA Equivalent
rate-limitingNative rate limiting (per-consumer quotas)
key-authAPI Key via Keycloak
jwtOIDC/JWT via Keycloak
oauth2OAuth 2.0 via Keycloak
corsCORS policy
request-transformerResponse transformation (ADR-032)
aclRBAC policies
prometheusNative Prometheus metrics
opentelemetryOpenTelemetry integration
ip-restrictionNetwork policy (K8s-level)

Migration Path​

Phase 1: Export & Import (1 week)​

Goal: Register existing Kong APIs in STOA catalog.

  1. Export Kong Configuration

    # Kong DB-less mode β€” already declarative
    kong config db_export kong-config.yaml

    # Or via Admin API
    curl -s http://kong-admin:8001/ | jq '.' > kong-dump.json

    # Export specific services
    curl -s http://kong-admin:8001/services | jq '.data[]' > kong-services.json
  2. Map to STOA Format

    # Use STOA CLI to import Kong config
    stoa api import --file kong-config.yaml --format kong
  3. Verify in STOA Console

    • Confirm all APIs appear in the catalog
    • Check route mappings and upstream URLs
    • Verify policy translations

Phase 2: Identity Integration (1 week)​

Goal: Connect STOA Keycloak to Kong's consumer authentication.

Kong consumers using key-auth or jwt can be federated:

# keycloak-kong-migration.yaml
kind: IdentityProviderConfig
metadata:
name: kong-consumer-migration
spec:
provider: oidc
config:
# If Kong uses an external IdP
issuerUri: https://your-idp/oauth
clientId: stoa-federation
scopes: openid,profile

# For key-auth consumers: bulk import to Keycloak
consumerImport:
source: kong-consumers.json
mapping:
username: custom_id
groups: acls

Phase 3: Parallel Running (1-2 weeks)​

Goal: Run STOA alongside Kong with shadow traffic.

Since Kong and STOA can coexist behind a load balancer:

# traffic-split at ingress level
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-canary
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "10"
spec:
rules:
- host: api.example.com
http:
paths:
- path: /
backend:
service:
name: stoa-gateway
port:
number: 8080

Increase the canary weight from 10% to 50% to 100% as confidence grows.

Phase 4: Cutover​

Goal: Full production traffic through STOA.

  1. Set canary weight to 100%
  2. Monitor error rates and latency for 48 hours
  3. Remove Kong ingress rules
  4. Decommission Kong pods (keep config in Git for rollback)

Migration Complexity​

Estimated complexity: Low to Medium Estimated timeline: 2-4 weeks

Kong's declarative configuration model and standard plugin ecosystem map well to STOA's GitOps approach. Custom Kong plugins require individual assessment.

Complexity Factors​

FactorLowMediumHigh
Number of APIs< 2020-100> 100
Custom pluginsNone1-3> 3
Consumer count< 100100-1000> 1000
DB-less modeYesβ€”No (requires export)
Enterprise featuresNot usedWorkspacesVitals, Dev Portal

Rollback Procedure​

At any phase, revert to Kong routing:

# Immediate rollback β€” revert ingress canary
kubectl annotate ingress api-canary \
nginx.ingress.kubernetes.io/canary-weight="0" --overwrite

# Verify Kong is handling all traffic
curl -s http://kong-admin:8001/status

Next Steps​


Feature comparisons are based on publicly available documentation as of 2026-02. Product capabilities change frequently. We encourage readers to verify current features directly with each vendor. All trademarks belong to their respective owners. See trademarks.


Need migration assistance? Contact us for professional services.