GAL Architektur-Dokumentation¶
Überblick¶
Gateway Abstraction Layer (GAL) ist ein provider-agnostisches Konfigurationssystem für API-Gateways. Es ermöglicht die Definition von Gateway-Konfigurationen in einem einheitlichen Format und deren Transformation für verschiedene Gateway-Provider.
System-Architektur¶
graph TB
subgraph "Benutzer-Interface"
CLI[CLI Tool<br/>gal-cli.py]
Docker[Docker Container]
end
subgraph "Core Layer"
Manager[Manager<br/>Orchestration]
Config[Config<br/>Datenmodelle]
end
subgraph "Provider Layer"
ProviderBase[Provider<br/>ABC]
Envoy[EnvoyProvider]
Kong[KongProvider]
APISIX[APISIXProvider]
Traefik[TraefikProvider]
end
subgraph "Transformation Layer"
TransEngine[Transformation Engine]
Generators[Field Generators<br/>UUID, Timestamp]
end
subgraph "Output"
EnvoyYAML[Envoy YAML]
KongYAML[Kong YAML]
APISIXJSON[APISIX JSON]
TraefikYAML[Traefik YAML]
end
CLI --> Manager
Docker --> CLI
Manager --> Config
Manager --> ProviderBase
ProviderBase -.implements.-> Envoy
ProviderBase -.implements.-> Kong
ProviderBase -.implements.-> APISIX
ProviderBase -.implements.-> Traefik
Envoy --> TransEngine
Kong --> TransEngine
APISIX --> TransEngine
Traefik --> TransEngine
TransEngine --> Generators
Envoy --> EnvoyYAML
Kong --> KongYAML
APISIX --> APISIXJSON
Traefik --> TraefikYAML
style Manager fill:#4CAF50
style Config fill:#2196F3
style ProviderBase fill:#FF9800
style TransEngine fill:#9C27B0
Komponentendiagramm¶
graph LR
subgraph "gal Package"
direction TB
ConfigModule[config.py<br/>─────────<br/>• GlobalConfig<br/>• Service<br/>• Route<br/>• Upstream<br/>• Transformation]
ManagerModule[manager.py<br/>─────────<br/>• Manager<br/>• register_provider<br/>• load_config<br/>• generate<br/>• deploy]
ProviderModule[provider.py<br/>─────────<br/>• Provider ABC<br/>• name<br/>• validate<br/>• generate]
subgraph "providers"
EnvoyModule[envoy.py<br/>EnvoyProvider]
KongModule[kong.py<br/>KongProvider]
APISIXModule[apisix.py<br/>APISIXProvider]
TraefikModule[traefik.py<br/>TraefikProvider]
end
end
ManagerModule --> ConfigModule
ManagerModule --> ProviderModule
ProviderModule --> EnvoyModule
ProviderModule --> KongModule
ProviderModule --> APISIXModule
ProviderModule --> TraefikModule
EnvoyModule --> ConfigModule
KongModule --> ConfigModule
APISIXModule --> ConfigModule
TraefikModule --> ConfigModule
Datenfluss¶
Konfigurationsgenerierung¶
sequenceDiagram
participant User
participant CLI
participant Manager
participant Config
participant Provider
participant Output
User->>CLI: gal-cli.py generate<br/>--config config.yaml
CLI->>Manager: load_config(filepath)
Manager->>Config: Config.from_yaml()
Config-->>Manager: Config object
CLI->>Manager: register_provider(EnvoyProvider)
Manager->>Manager: providers['envoy'] = provider
CLI->>Manager: generate(config)
Manager->>Provider: validate(config)
Provider-->>Manager: True/False
Manager->>Provider: generate(config)
Provider->>Provider: Transform to<br/>provider format
Provider-->>Manager: YAML/JSON string
Manager-->>CLI: Configuration output
CLI->>Output: Write to file/<br/>stdout
Output-->>User: Generated config
Transformations-Pipeline¶
graph TD
Start[Incoming Request] --> CheckTrans{Transformations<br/>enabled?}
CheckTrans -->|No| Route[Route to Service]
CheckTrans -->|Yes| Defaults[Apply Defaults]
Defaults --> Computed[Generate Computed Fields]
Computed --> Validate[Validate Required Fields]
Validate --> ValidationOK{Validation<br/>passed?}
ValidationOK -->|No| Error[Return Error]
ValidationOK -->|Yes| Metadata[Add Metadata]
Metadata --> Route
Route --> Service[Backend Service]
Modul-Details¶
1. Config Module (gal/config.py)¶
Verantwortlichkeit: Datenmodelle und Konfigurationsparser
Hauptklassen:
| Klasse | Beschreibung | Wichtige Methoden |
|---|---|---|
Config |
Root-Konfiguration | from_yaml(), get_service(), get_grpc_services(), get_rest_services() |
GlobalConfig |
Globale Gateway-Settings | - |
Service |
Service-Definition | - |
Route |
Routing-Regeln | - |
Upstream |
Backend-Endpunkt | - |
Transformation |
Transform-Regeln | - |
ComputedField |
Feldgeneratoren | - |
Validation |
Validierungsregeln | - |
Plugin |
Plugin-Konfiguration | - |
Abhängigkeiten: - PyYAML: YAML-Parsing - Pydantic: Datenvalidierung (dataclasses)
2. Manager Module (gal/manager.py)¶
Verantwortlichkeit: Orchestrierung und Provider-Management
Hauptklasse: Manager
Methoden:
| Methode | Parameter | Rückgabe | Beschreibung |
|---|---|---|---|
register_provider() |
Provider |
None | Registriert einen Provider |
load_config() |
filepath: str |
Config |
Lädt YAML-Konfiguration |
generate() |
Config |
str |
Generiert Provider-Config |
deploy() |
Config |
bool |
Deployment (optional) |
list_providers() |
- | List[str] |
Listet Provider auf |
Design Pattern: Registry Pattern für Provider-Management
3. Provider Module (gal/provider.py)¶
Verantwortlichkeit: Provider-Interface (Abstract Base Class)
ABC-Methoden:
class Provider(ABC):
@abstractmethod
def name(self) -> str:
"""Return provider name"""
@abstractmethod
def validate(self, config: Config) -> bool:
"""Validate configuration"""
@abstractmethod
def generate(self, config: Config) -> str:
"""Generate provider-specific configuration"""
def deploy(self, config: Config) -> bool:
"""Optional: Deploy configuration"""
4. Provider Implementations¶
EnvoyProvider¶
Output-Format: YAML Features: - Static resources configuration - HTTP connection manager - Lua filters für Transformationen - gRPC-Support mit HTTP/2 - Admin interface
Transformations: Lua inline code
KongProvider¶
Output-Format: YAML (Declarative Config v3.0) Features: - Declarative configuration - Request transformer plugin - Service und Route-Definitionen - gRPC protocol support
Transformations: Kong Plugins
APISIXProvider¶
Output-Format: JSON Features: - Routes, Services, Upstreams - Serverless pre-function plugin - Lua transformations - Round-robin load balancing
Transformations: Lua serverless functions
TraefikProvider¶
Output-Format: YAML Features: - HTTP routers und services - PathPrefix rules - LoadBalancer configuration - Middleware plugins
Transformations: Middleware plugins
Erweiterbarkeit¶
Neuen Provider hinzufügen¶
- Provider-Klasse erstellen:
# gal/providers/newprovider.py
from ..provider import Provider
from ..config import Config
class NewProvider(Provider):
def name(self) -> str:
return "newprovider"
def validate(self, config: Config) -> bool:
# Validation logic
return True
def generate(self, config: Config) -> str:
# Generation logic
return "configuration output"
- Provider exportieren:
# gal/providers/__init__.py
from .newprovider import NewProvider
__all__ = ['EnvoyProvider', 'KongProvider', 'APISIXProvider',
'TraefikProvider', 'NewProvider']
- Provider registrieren:
Neuen Generator hinzufügen¶
Für neue Computed Field Generatoren:
# In Provider generate() method
if cf.generator == "new_generator":
# Implementation
generated_value = generate_new_value()
Deployment-Architektur¶
graph TB
subgraph "Development"
Dev[Developer]
GAL[GAL CLI]
Config[config.yaml]
end
subgraph "CI/CD"
GHA[GitHub Actions]
Docker[Docker Build]
Tests[Tests]
end
subgraph "Deployment Targets"
K8s[Kubernetes<br/>Envoy Config]
Cloud[Cloud Gateway<br/>Kong/APISIX]
Edge[Edge Proxy<br/>Traefik]
end
Dev --> Config
Config --> GAL
GAL --> GHA
GHA --> Tests
Tests --> Docker
Docker --> K8s
Docker --> Cloud
Docker --> Edge
Sicherheitsarchitektur¶
Prinzipien¶
- Non-root Container: Docker läuft als non-root user
gal - Read-only Dependencies: Pip-Packages werden in Builder-Stage installiert
- Minimal Image: Multi-stage build reduziert Angriffsfläche
- No Secrets in Config: Environment Variables für Secrets
Security Best Practices¶
# Secrets als Environment Variables
plugins:
- name: auth
config:
secret: ${JWT_SECRET} # Nie direkt in YAML
# Über Environment bereitstellen
export JWT_SECRET="your-secret-key"
gal-cli.py generate -c config.yaml
Performance-Überlegungen¶
Optimierungen¶
- Lazy Loading: Provider werden nur bei Bedarf geladen
- Caching: Config-Parsing einmalig
- Minimal Dependencies: Nur notwendige Bibliotheken
- Parallel Generation:
generate-allkann parallelisiert werden
Benchmarks¶
| Operation | Durchschnitt | Peak Memory |
|---|---|---|
| Load Config | ~5ms | ~10MB |
| Generate Single | ~10-20ms | ~15MB |
| Generate All | ~50-80ms | ~30MB |
| Validation | ~3ms | ~8MB |