GAL Konfigurationsreferenz¶
Übersicht¶
GAL verwendet YAML-Dateien zur Definition von Gateway-Konfigurationen. Diese Konfigurationen sind provider-agnostisch und können für jeden unterstützten Gateway-Provider (Envoy, Kong, APISIX, Traefik) generiert werden.
Konfigurationsschema¶
Root-Level-Struktur¶
version: string # Konfigurationsversion (erforderlich)
provider: string # Ziel-Provider (erforderlich)
global: object # Globale Gateway-Einstellungen (optional)
services: array # Liste der Services (erforderlich)
plugins: array # Liste der Plugins (optional)
Global Configuration¶
Globale Einstellungen, die auf das gesamte Gateway angewendet werden.
global:
host: string # Listen-Host (Standard: "0.0.0.0")
port: integer # Listen-Port (Standard: 10000)
admin_port: integer # Admin-Port (Standard: 9901)
timeout: string # Request-Timeout (Standard: "30s")
Beispiel:
Services¶
Liste der Backend-Services, die über das Gateway geroutet werden.
services:
- name: string # Service-Name (erforderlich, einzigartig)
type: string # Service-Typ: "grpc" oder "rest" (erforderlich)
protocol: string # Protokoll: "http", "http2", "grpc" (erforderlich)
upstream: object # Upstream-Konfiguration (erforderlich)
routes: array # Route-Definitionen (erforderlich)
transformation: object # Transformationsregeln (optional)
Upstream¶
Definiert den Backend-Service-Endpunkt.
upstream:
host: string # Hostname oder IP-Adresse (erforderlich)
port: integer # Port-Nummer (erforderlich)
Beispiel:
Routes¶
Definiert, wie Requests zum Service geroutet werden.
routes:
- path_prefix: string # URL-Path-Präfix (erforderlich)
methods: array # HTTP-Methoden (optional, nur für REST)
Beispiele:
# gRPC-Route
routes:
- path_prefix: /myapp.UserService
# REST-Route mit Methoden
routes:
- path_prefix: /api/products
methods: [GET, POST, PUT, DELETE]
# Mehrere Routes
routes:
- path_prefix: /api/v1/users
methods: [GET, POST]
- path_prefix: /api/v1/users/{id}
methods: [GET, PUT, DELETE]
Transformation¶
Definiert Payload-Transformationen, die auf Requests angewendet werden.
transformation:
enabled: boolean # Transformationen aktivieren (Standard: true)
defaults: object # Default-Werte für Felder
computed_fields: array # Berechnete/generierte Felder
metadata: object # Zusätzliche Metadaten
validation: object # Validierungsregeln
defaults:
Setzt Standard-Werte für fehlende Felder im Request-Body.
Beispiel:
computed_fields:
Generiert Felder automatisch basierend auf vordefinierten Generatoren.
computed_fields:
- field: string # Feldname (erforderlich)
generator: string # Generator-Typ (erforderlich)
prefix: string # Präfix für generierten Wert (optional)
suffix: string # Suffix für generierten Wert (optional)
expression: string # Custom-Expression (optional, derzeit nicht verwendet)
Verfügbare Generatoren:
| Generator | Beschreibung | Beispiel-Ausgabe |
|---|---|---|
uuid |
Generiert UUID v4 | 550e8400-e29b-41d4-a716-446655440000 |
timestamp |
Unix-Timestamp | 1698765432 |
random |
Zufallszahl | 42 |
Beispiel:
computed_fields:
- field: user_id
generator: uuid
prefix: "user_"
# Ergebnis: user_550e8400-e29b-41d4-a716-446655440000
- field: created_at
generator: timestamp
# Ergebnis: 1698765432
- field: order_id
generator: uuid
prefix: "order_"
suffix: "_v1"
# Ergebnis: order_550e8400-e29b-41d4-a716-446655440000_v1
metadata:
Fügt zusätzliche Metadaten zum Request hinzu.
Beispiel:
validation:
Definiert Validierungsregeln für Request-Payloads.
Beispiel:
Plugins¶
Gateway-Plugins für erweiterte Funktionalität.
plugins:
- name: string # Plugin-Name (erforderlich)
enabled: boolean # Plugin aktiviert (Standard: true)
config: object # Plugin-Konfiguration (optional)
Beispiel:
plugins:
- name: rate_limiting
enabled: true
config:
requests_per_second: 100
burst: 200
- name: cors
enabled: true
config:
origins: ["*"]
methods: [GET, POST, PUT, DELETE]
headers: [Content-Type, Authorization]
Vollständiges Beispiel¶
version: "1.0"
provider: envoy
global:
host: 0.0.0.0
port: 10000
admin_port: 9901
timeout: 30s
services:
# gRPC Service mit Transformationen
- name: user_service
type: grpc
protocol: http2
upstream:
host: user-service
port: 9090
routes:
- path_prefix: /myapp.UserService
transformation:
enabled: true
defaults:
role: "user"
age: 0
active: true
computed_fields:
- field: user_id
generator: uuid
prefix: "user_"
- field: created_at
generator: timestamp
metadata:
service: "user_service"
version: "1.0"
# REST Service mit Validierung
- name: payment_service
type: rest
protocol: http
upstream:
host: payment-service
port: 8081
routes:
- path_prefix: /api/payments
methods: [POST]
transformation:
enabled: true
defaults:
status: "pending"
currency: "USD"
provider: "stripe"
computed_fields:
- field: payment_id
generator: uuid
prefix: "pay_"
- field: timestamp
generator: timestamp
validation:
required_fields:
- order_id
- amount
- method
# REST Service ohne Transformationen
- name: health_check
type: rest
protocol: http
upstream:
host: health-service
port: 8082
routes:
- path_prefix: /health
methods: [GET]
plugins:
- name: rate_limiting
enabled: true
config:
requests_per_second: 100
burst: 200
- name: authentication
enabled: true
config:
jwt_secret: ${JWT_SECRET}
token_header: Authorization
Provider-spezifische Hinweise¶
Envoy¶
- gRPC-Services erhalten automatisch
http2_protocol_options - Transformationen werden als Lua-Filter implementiert
- Admin-Interface läuft auf konfiguriertem
admin_port
Kong¶
- Output ist Kong Declarative Configuration (v3.0)
- Transformationen nutzen
request-transformerPlugin - gRPC-Services verwenden
protocol: grpc
APISIX¶
- Output ist JSON-Format
- Transformationen werden als Lua-Serverless-Functions implementiert
- Automatische Upstream-Generierung mit Round-Robin Load Balancing
Traefik¶
- Routes verwenden PathPrefix-Regel
- Transformationen werden als Middleware-Plugins implementiert
- Services erhalten automatische LoadBalancer-Konfiguration
Validierung¶
Nutzen Sie den validate-Befehl, um Ihre Konfiguration zu prüfen:
Best Practices¶
1. Naming Conventions¶
- Verwenden Sie snake_case für Service-Namen
- Nutzen Sie aussagekräftige Namen, die die Funktion beschreiben
- Vermeiden Sie Sonderzeichen außer Unterstrichen
2. Transformationen¶
- Nutzen Sie Defaults für optionale Felder
- Computed Fields für eindeutige IDs und Timestamps
- Validation für kritische Business-Felder
transformation:
enabled: true
defaults:
status: "draft" # Optionales Feld mit sinnvollem Default
computed_fields:
- field: id
generator: uuid # Eindeutige ID garantiert
validation:
required_fields:
- customer_id # Kritisches Business-Feld
3. Environment Variables¶
Nutzen Sie Environment Variables für Secrets:
4. Service-Organisation¶
Gruppieren Sie Services logisch:
services:
# Authentication Services
- name: auth_service
...
- name: user_service
...
# Business Logic Services
- name: order_service
...
- name: payment_service
...
# Infrastructure Services
- name: health_check
...
Fehlerbehandlung¶
Häufige Fehler¶
Fehlende erforderliche Felder:
# Fehler: upstream fehlt
services:
- name: my_service
type: rest
protocol: http
# upstream: FEHLT!
routes:
- path_prefix: /api
Ungültiger Service-Typ:
Duplikat Service-Namen:
# Fehler: Service-Namen müssen eindeutig sein
services:
- name: user_service
...
- name: user_service # DUPLIKAT!
...