661 lines
18 KiB
Markdown
661 lines
18 KiB
Markdown
# Gateway Configuration Documentation
|
|
|
|
## Überblick
|
|
|
|
Dieses Dokument beschreibt alle zentralen Konfigurationseigenschaften für das API Gateway. Die Konfiguration erfolgt über die `application.yml` Datei und kann durch Umgebungsvariablen überschrieben werden.
|
|
|
|
## Table of Contents
|
|
|
|
- [Server Configuration](#server-configuration)
|
|
- [Spring Application](#spring-application)
|
|
- [Consul Service Discovery](#consul-service-discovery)
|
|
- [Spring Cloud Gateway](#spring-cloud-gateway)
|
|
- [Circuit Breaker (Resilience4j)](#circuit-breaker-resilience4j)
|
|
- [Management & Monitoring](#management--monitoring)
|
|
- [Security](#security)
|
|
- [Logging](#logging)
|
|
|
|
---
|
|
|
|
## Server Configuration
|
|
|
|
### server.port
|
|
- **Typ**: Integer
|
|
- **Default**: 8081
|
|
- **Environment Variable**: `GATEWAY_PORT`
|
|
- **Beschreibung**: Port, auf dem das Gateway läuft
|
|
|
|
### server.netty.connection-timeout
|
|
- **Typ**: Duration
|
|
- **Default**: 5s
|
|
- **Beschreibung**: Timeout für initiale TCP-Verbindungen
|
|
|
|
### server.netty.idle-timeout
|
|
- **Typ**: Duration
|
|
- **Default**: 15s
|
|
- **Beschreibung**: Timeout für inaktive Verbindungen
|
|
|
|
**Beispiel:**
|
|
```yaml
|
|
server:
|
|
port: 8081
|
|
netty:
|
|
connection-timeout: 5s
|
|
idle-timeout: 15s
|
|
```
|
|
|
|
---
|
|
|
|
## Spring Application
|
|
|
|
### spring.application.name
|
|
- **Typ**: String
|
|
- **Default**: api-gateway
|
|
- **Beschreibung**: Name der Anwendung, wird in Consul und Logs verwendet
|
|
|
|
### spring.profiles.active
|
|
- **Typ**: String
|
|
- **Default**: dev
|
|
- **Environment Variable**: `SPRING_PROFILES_ACTIVE`
|
|
- **Beschreibung**: Aktives Spring-Profil (dev, test, prod)
|
|
- **Mögliche Werte**: dev, test, staging, prod
|
|
|
|
### spring.security.user.name / password
|
|
- **Typ**: String
|
|
- **Default**: admin / admin
|
|
- **Environment Variables**: `GATEWAY_ADMIN_USER`, `GATEWAY_ADMIN_PASSWORD`
|
|
- **Beschreibung**: Basic Auth für administrative Endpunkte
|
|
- **⚠️ Wichtig**: In Produktion durch sichere Werte ersetzen!
|
|
|
|
**Beispiel:**
|
|
```yaml
|
|
spring:
|
|
application:
|
|
name: api-gateway
|
|
profiles:
|
|
active: ${SPRING_PROFILES_ACTIVE:dev}
|
|
security:
|
|
user:
|
|
name: ${GATEWAY_ADMIN_USER:admin}
|
|
password: ${GATEWAY_ADMIN_PASSWORD:admin}
|
|
```
|
|
|
|
---
|
|
|
|
## Consul Service Discovery
|
|
|
|
### spring.cloud.consul.host
|
|
- **Typ**: String
|
|
- **Default**: localhost
|
|
- **Environment Variable**: `CONSUL_HOST`
|
|
- **Beschreibung**: Hostname des Consul-Servers
|
|
|
|
### spring.cloud.consul.port
|
|
- **Typ**: Integer
|
|
- **Default**: 8500
|
|
- **Environment Variable**: `CONSUL_PORT`
|
|
- **Beschreibung**: Port des Consul-Servers
|
|
|
|
### spring.cloud.consul.enabled
|
|
- **Typ**: Boolean
|
|
- **Default**: true
|
|
- **Environment Variable**: `CONSUL_ENABLED`
|
|
- **Beschreibung**: Aktiviert/Deaktiviert Consul Integration
|
|
|
|
### spring.cloud.consul.discovery.enabled
|
|
- **Typ**: Boolean
|
|
- **Default**: true
|
|
- **Environment Variable**: `CONSUL_ENABLED`
|
|
- **Beschreibung**: Aktiviert Service Discovery
|
|
|
|
### spring.cloud.consul.discovery.register
|
|
- **Typ**: Boolean
|
|
- **Default**: true
|
|
- **Environment Variable**: `CONSUL_ENABLED`
|
|
- **Beschreibung**: Registriert das Gateway in Consul
|
|
|
|
### spring.cloud.consul.discovery.health-check-path
|
|
- **Typ**: String
|
|
- **Default**: /actuator/health
|
|
- **Beschreibung**: Pfad für Consul Health Checks
|
|
|
|
### spring.cloud.consul.discovery.health-check-interval
|
|
- **Typ**: Duration
|
|
- **Default**: 10s
|
|
- **Beschreibung**: Intervall für Health Checks
|
|
|
|
### spring.cloud.consul.discovery.instance-id
|
|
- **Typ**: String
|
|
- **Default**: ${spring.application.name}-${server.port}-${random.uuid}
|
|
- **Beschreibung**: Eindeutige Instanz-ID für Service Discovery
|
|
|
|
**Beispiel:**
|
|
```yaml
|
|
spring:
|
|
cloud:
|
|
consul:
|
|
host: ${CONSUL_HOST:localhost}
|
|
port: ${CONSUL_PORT:8500}
|
|
enabled: ${CONSUL_ENABLED:true}
|
|
discovery:
|
|
enabled: ${CONSUL_ENABLED:true}
|
|
register: ${CONSUL_ENABLED:true}
|
|
health-check-path: /actuator/health
|
|
health-check-interval: 10s
|
|
instance-id: ${spring.application.name}-${server.port}-${random.uuid}
|
|
```
|
|
|
|
---
|
|
|
|
## Spring Cloud Gateway
|
|
|
|
### Verbindungskonfiguration
|
|
|
|
#### spring.cloud.gateway.server.webflux.httpclient.connect-timeout
|
|
- **Typ**: Integer (Millisekunden)
|
|
- **Default**: 5000
|
|
- **Beschreibung**: Timeout für Backend-Verbindungen
|
|
|
|
#### spring.cloud.gateway.server.webflux.httpclient.response-timeout
|
|
- **Typ**: Duration
|
|
- **Default**: 30s
|
|
- **Beschreibung**: Timeout für Backend-Responses
|
|
|
|
#### spring.cloud.gateway.server.webflux.httpclient.pool.max-idle-time
|
|
- **Typ**: Duration
|
|
- **Default**: 15s
|
|
- **Beschreibung**: Max. Idle-Zeit für Verbindungen im Pool
|
|
|
|
#### spring.cloud.gateway.server.webflux.httpclient.pool.max-life-time
|
|
- **Typ**: Duration
|
|
- **Default**: 60s
|
|
- **Beschreibung**: Max. Lebensdauer einer Verbindung
|
|
|
|
**Beispiel:**
|
|
```yaml
|
|
spring:
|
|
cloud:
|
|
gateway:
|
|
server:
|
|
webflux:
|
|
httpclient:
|
|
connect-timeout: 5000
|
|
response-timeout: 30s
|
|
pool:
|
|
max-idle-time: 15s
|
|
max-life-time: 60s
|
|
```
|
|
|
|
### Default Filters
|
|
|
|
Diese Filter werden auf **alle** Routen angewendet:
|
|
|
|
1. **DedupeResponseHeader**: Entfernt doppelte CORS-Header
|
|
2. **CircuitBreaker**: Default Circuit Breaker mit Fallback
|
|
3. **Retry**: Automatische Wiederholung bei Fehlern
|
|
4. **Security Headers**: X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, etc.
|
|
5. **Cache-Control**: No-cache Header für alle Responses
|
|
|
|
**Beispiel:**
|
|
```yaml
|
|
spring:
|
|
cloud:
|
|
gateway:
|
|
default-filters:
|
|
- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
|
|
- name: CircuitBreaker
|
|
args:
|
|
name: defaultCircuitBreaker
|
|
fallbackUri: forward:/fallback
|
|
- name: Retry
|
|
args:
|
|
retries: 3
|
|
statuses: BAD_GATEWAY,GATEWAY_TIMEOUT
|
|
methods: GET,POST,PUT,DELETE
|
|
backoff:
|
|
firstBackoff: 50ms
|
|
maxBackoff: 500ms
|
|
factor: 2
|
|
```
|
|
|
|
### Routes
|
|
|
|
Das Gateway definiert folgende Service-Routen:
|
|
|
|
#### 1. Members Service Route
|
|
- **Path**: `/api/members/**`
|
|
- **Service**: members-service (via Consul)
|
|
- **Circuit Breaker**: membersCircuitBreaker
|
|
- **Fallback**: /fallback/members
|
|
|
|
#### 2. Horses Service Route
|
|
- **Path**: `/api/horses/**`
|
|
- **Service**: horses-service (via Consul)
|
|
- **Circuit Breaker**: horsesCircuitBreaker
|
|
- **Fallback**: /fallback/horses
|
|
|
|
#### 3. Events Service Route
|
|
- **Path**: `/api/events/**`
|
|
- **Service**: events-service (via Consul)
|
|
- **Circuit Breaker**: eventsCircuitBreaker
|
|
- **Fallback**: /fallback/events
|
|
|
|
#### 4. Masterdata Service Route
|
|
- **Path**: `/api/masterdata/**`
|
|
- **Service**: masterdata-service (via Consul)
|
|
- **Circuit Breaker**: masterdataCircuitBreaker
|
|
- **Fallback**: /fallback/masterdata
|
|
|
|
#### 5. Auth Service Route
|
|
- **Path**: `/api/auth/**`
|
|
- **Service**: auth-service (via Consul)
|
|
- **Circuit Breaker**: authCircuitBreaker
|
|
- **Fallback**: /fallback/auth
|
|
|
|
#### 6. Ping Service Route
|
|
- **Path**: `/api/ping/**`
|
|
- **Service**: ping-service (via Consul)
|
|
- **No Circuit Breaker**: Optional service
|
|
|
|
**Beispiel einer Route:**
|
|
```yaml
|
|
spring:
|
|
cloud:
|
|
gateway:
|
|
routes:
|
|
- id: members-service-route
|
|
uri: lb://members-service # lb = Load Balanced via Consul
|
|
predicates:
|
|
- Path=/api/members/**
|
|
filters:
|
|
- StripPrefix=1 # Entfernt /api vom Pfad
|
|
- name: CircuitBreaker
|
|
args:
|
|
name: membersCircuitBreaker
|
|
fallbackUri: forward:/fallback/members
|
|
```
|
|
|
|
---
|
|
|
|
## Circuit Breaker (Resilience4j)
|
|
|
|
### Default Konfiguration
|
|
|
|
#### resilience4j.circuitbreaker.configs.default.registerHealthIndicator
|
|
- **Typ**: Boolean
|
|
- **Default**: true
|
|
- **Beschreibung**: Registriert Circuit Breaker im Health Endpoint
|
|
|
|
#### resilience4j.circuitbreaker.configs.default.slidingWindowSize
|
|
- **Typ**: Integer
|
|
- **Default**: 100
|
|
- **Beschreibung**: Größe des Sliding Window für Fehlerrate-Berechnung
|
|
|
|
#### resilience4j.circuitbreaker.configs.default.minimumNumberOfCalls
|
|
- **Typ**: Integer
|
|
- **Default**: 20
|
|
- **Beschreibung**: Mindestanzahl an Calls bevor Circuit Breaker aktiviert wird
|
|
|
|
#### resilience4j.circuitbreaker.configs.default.permittedNumberOfCallsInHalfOpenState
|
|
- **Typ**: Integer
|
|
- **Default**: 3
|
|
- **Beschreibung**: Anzahl Test-Calls im Half-Open State
|
|
|
|
#### resilience4j.circuitbreaker.configs.default.waitDurationInOpenState
|
|
- **Typ**: Duration
|
|
- **Default**: 5s
|
|
- **Beschreibung**: Wartezeit bevor von Open zu Half-Open gewechselt wird
|
|
|
|
#### resilience4j.circuitbreaker.configs.default.failureRateThreshold
|
|
- **Typ**: Integer (Prozent)
|
|
- **Default**: 50
|
|
- **Beschreibung**: Fehlerrate-Schwelle für Circuit Breaker Aktivierung
|
|
|
|
### Service-spezifische Circuit Breaker
|
|
|
|
Jeder Service hat einen eigenen Circuit Breaker mit angepasster Konfiguration:
|
|
|
|
| Service | Sliding Window | Failure Threshold | Besonderheit |
|
|
|---------|---------------|-------------------|--------------|
|
|
| members-service | 50 | 50% | Standard |
|
|
| horses-service | 50 | 50% | Standard |
|
|
| events-service | 75 | 50% | Größeres Window |
|
|
| masterdata-service | 30 | 50% | Kleineres Window |
|
|
| auth-service | 20 | 30% | Sensitiverer Threshold |
|
|
|
|
**Beispiel:**
|
|
```yaml
|
|
resilience4j:
|
|
circuitbreaker:
|
|
instances:
|
|
authCircuitBreaker:
|
|
baseConfig: default
|
|
slidingWindowSize: 20
|
|
failureRateThreshold: 30 # Auth ist kritisch -> niedrigerer Threshold
|
|
```
|
|
|
|
---
|
|
|
|
## Management & Monitoring
|
|
|
|
### Exposed Endpoints
|
|
|
|
#### management.endpoints.web.exposure.include
|
|
- **Typ**: Comma-separated String
|
|
- **Default**: health,info,metrics,prometheus,gateway,circuitbreakers
|
|
- **Beschreibung**: Öffentlich verfügbare Actuator Endpoints
|
|
|
|
**Verfügbare Endpoints:**
|
|
- `/actuator/health` - Service Health Status
|
|
- `/actuator/info` - Service Informationen
|
|
- `/actuator/metrics` - Micrometer Metriken
|
|
- `/actuator/prometheus` - Prometheus Scrape Endpoint
|
|
- `/actuator/gateway` - Gateway Routes & Filters
|
|
- `/actuator/circuitbreakers` - Circuit Breaker Status
|
|
|
|
### Health Endpoint
|
|
|
|
#### management.endpoint.health.show-details
|
|
- **Typ**: String
|
|
- **Default**: always
|
|
- **Mögliche Werte**: never, when-authorized, always
|
|
- **Beschreibung**: Zeigt detaillierte Health-Informationen
|
|
|
|
#### management.endpoint.health.show-components
|
|
- **Typ**: Boolean
|
|
- **Default**: always
|
|
- **Beschreibung**: Zeigt Health-Komponenten
|
|
|
|
#### management.endpoint.health.probes.enabled
|
|
- **Typ**: Boolean
|
|
- **Default**: true
|
|
- **Beschreibung**: Aktiviert Kubernetes Liveness/Readiness Probes
|
|
|
|
### Metrics
|
|
|
|
#### management.metrics.tags
|
|
- **Beschreibung**: Globale Tags für alle Metriken
|
|
- **Standard Tags**:
|
|
- application: ${spring.application.name}
|
|
- environment: ${spring.profiles.active}
|
|
- instance: ${spring.cloud.consul.discovery.instance-id}
|
|
- service: gateway
|
|
- component: infrastructure
|
|
- gateway: api-gateway
|
|
|
|
#### management.metrics.distribution.percentiles-histogram.http.server.requests
|
|
- **Typ**: Boolean
|
|
- **Default**: true
|
|
- **Beschreibung**: Aktiviert Histogram für Request-Zeiten
|
|
|
|
#### management.metrics.distribution.percentiles.http.server.requests
|
|
- **Typ**: Array[Double]
|
|
- **Default**: [0.5, 0.90, 0.95, 0.99]
|
|
- **Beschreibung**: Percentile-Werte für Request-Zeiten
|
|
|
|
### Tracing
|
|
|
|
#### management.tracing.enabled
|
|
- **Typ**: Boolean
|
|
- **Default**: false
|
|
- **Environment Variable**: `TRACING_ENABLED`
|
|
- **Beschreibung**: Aktiviert Distributed Tracing
|
|
|
|
#### management.tracing.sampling.probability
|
|
- **Typ**: Double (0.0 - 1.0)
|
|
- **Default**: 1.0
|
|
- **Environment Variable**: `TRACING_SAMPLING_PROBABILITY`
|
|
- **Beschreibung**: Sampling-Rate für Traces (1.0 = 100%)
|
|
|
|
#### management.zipkin.tracing.endpoint
|
|
- **Typ**: URL
|
|
- **Default**: http://localhost:9411/api/v2/spans
|
|
- **Environment Variable**: `ZIPKIN_TRACING_ENDPOINT`
|
|
- **Beschreibung**: Zipkin Server URL
|
|
|
|
**Beispiel:**
|
|
```yaml
|
|
management:
|
|
endpoints:
|
|
web:
|
|
exposure:
|
|
include: health,info,metrics,prometheus,gateway,circuitbreakers
|
|
endpoint:
|
|
health:
|
|
show-details: always
|
|
probes:
|
|
enabled: true
|
|
tracing:
|
|
enabled: ${TRACING_ENABLED:false}
|
|
sampling:
|
|
probability: ${TRACING_SAMPLING_PROBABILITY:1.0}
|
|
zipkin:
|
|
tracing:
|
|
endpoint: ${ZIPKIN_TRACING_ENDPOINT:http://localhost:9411/api/v2/spans}
|
|
```
|
|
|
|
---
|
|
|
|
## Security
|
|
|
|
Die Security-Konfiguration erfolgt über Custom Properties unter `gateway.security`:
|
|
|
|
### gateway.security.publicPaths
|
|
- **Typ**: Array[String]
|
|
- **Default**: ["/", "/fallback/**", "/actuator/**", "/webjars/**", "/v3/api-docs/**", "/api/auth/**"]
|
|
- **Beschreibung**: Pfade, die ohne Authentifizierung zugänglich sind
|
|
|
|
### gateway.security.cors.allowedOriginPatterns
|
|
- **Typ**: Array[String]
|
|
- **Default**: ["http://localhost:[*]", "https://*.meldestelle.at"]
|
|
- **Beschreibung**: Erlaubte Origin-Patterns für CORS
|
|
|
|
### gateway.security.cors.allowedMethods
|
|
- **Typ**: Array[String]
|
|
- **Default**: ["GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"]
|
|
- **Beschreibung**: Erlaubte HTTP-Methoden
|
|
|
|
### gateway.security.cors.allowedHeaders
|
|
- **Typ**: Array[String]
|
|
- **Default**: ["*"]
|
|
- **Beschreibung**: Erlaubte Request-Headers
|
|
|
|
### gateway.security.cors.exposedHeaders
|
|
- **Typ**: Array[String]
|
|
- **Default**: ["X-Correlation-ID", "X-RateLimit-Limit", "X-RateLimit-Remaining"]
|
|
- **Beschreibung**: Headers die an Client exponiert werden
|
|
|
|
### gateway.security.cors.allowCredentials
|
|
- **Typ**: Boolean
|
|
- **Default**: true
|
|
- **Beschreibung**: Erlaubt Credentials (Cookies, Auth-Header)
|
|
|
|
### gateway.security.cors.maxAge
|
|
- **Typ**: Duration
|
|
- **Default**: 1h
|
|
- **Beschreibung**: Cache-Zeit für CORS Preflight-Requests
|
|
|
|
**Beispiel:**
|
|
```yaml
|
|
gateway:
|
|
security:
|
|
publicPaths:
|
|
- "/"
|
|
- "/actuator/**"
|
|
- "/api/auth/**"
|
|
cors:
|
|
allowedOriginPatterns:
|
|
- "http://localhost:[*]"
|
|
- "https://*.meldestelle.at"
|
|
allowedMethods:
|
|
- GET
|
|
- POST
|
|
- PUT
|
|
- DELETE
|
|
allowCredentials: true
|
|
maxAge: 1h
|
|
```
|
|
|
|
### JWT Configuration
|
|
|
|
#### spring.security.oauth2.resourceserver.jwt.jwk-set-uri
|
|
- **Typ**: URL
|
|
- **Environment Variable**: `KEYCLOAK_JWK_SET_URI`
|
|
- **Beschreibung**: Keycloak JWK Set URI für JWT-Validierung
|
|
- **Beispiel**: http://localhost:8180/realms/meldestelle/protocol/openid-connect/certs
|
|
|
|
---
|
|
|
|
## Logging
|
|
|
|
### logging.level
|
|
- **Beschreibung**: Log-Level für verschiedene Pakete
|
|
|
|
**Standard Log-Levels:**
|
|
- `org.springframework.cloud.gateway`: INFO
|
|
- `org.springframework.cloud.loadbalancer`: DEBUG
|
|
- `org.springframework.cloud.consul`: INFO
|
|
- `at.mocode.infrastructure.gateway`: DEBUG
|
|
- `io.github.resilience4j`: INFO
|
|
- `reactor.netty.http.client`: INFO
|
|
- `org.springframework.security`: WARN
|
|
- `org.springframework.web`: INFO
|
|
|
|
### logging.pattern.console
|
|
- **Beschreibung**: Console-Log-Pattern mit Farben und Correlation-ID
|
|
|
|
### logging.pattern.file
|
|
- **Beschreibung**: File-Log-Pattern ohne Farben
|
|
|
|
### logging.file.name
|
|
- **Typ**: String
|
|
- **Default**: infrastructure/gateway/logs/gateway.log
|
|
- **Beschreibung**: Log-Datei Pfad
|
|
|
|
### logging.logback.rollingpolicy
|
|
- **clean-history-on-start**: true
|
|
- **max-file-size**: 100MB
|
|
- **total-size-cap**: 1GB
|
|
- **max-history**: 30 (Tage)
|
|
|
|
**Beispiel:**
|
|
```yaml
|
|
logging:
|
|
level:
|
|
at.mocode.infrastructure.gateway: DEBUG
|
|
org.springframework.cloud.gateway: INFO
|
|
file:
|
|
name: infrastructure/gateway/logs/gateway.log
|
|
logback:
|
|
rollingpolicy:
|
|
max-file-size: 100MB
|
|
max-history: 30
|
|
```
|
|
|
|
---
|
|
|
|
## Umgebungsvariablen Übersicht
|
|
|
|
### Kritische Variablen für Produktion
|
|
|
|
| Variable | Beschreibung | Default |
|
|
|----------|--------------|---------|
|
|
| `GATEWAY_PORT` | Gateway Port | 8081 |
|
|
| `CONSUL_HOST` | Consul Server | localhost |
|
|
| `CONSUL_PORT` | Consul Port | 8500 |
|
|
| `CONSUL_ENABLED` | Consul Aktivieren | true |
|
|
| `GATEWAY_ADMIN_USER` | Admin Username | admin |
|
|
| `GATEWAY_ADMIN_PASSWORD` | Admin Password | admin |
|
|
| `KEYCLOAK_JWK_SET_URI` | Keycloak JWK URI | http://localhost:8180/... |
|
|
| `TRACING_ENABLED` | Tracing aktivieren | false |
|
|
| `ZIPKIN_TRACING_ENDPOINT` | Zipkin Server | http://localhost:9411/... |
|
|
| `SPRING_PROFILES_ACTIVE` | Spring Profil | dev |
|
|
|
|
---
|
|
|
|
## Profile-spezifische Konfiguration
|
|
|
|
Das Gateway unterstützt verschiedene Spring Profile:
|
|
|
|
### dev (Development)
|
|
- Detailliertes Logging
|
|
- Alle Monitoring-Endpunkte verfügbar
|
|
- Tracing optional
|
|
|
|
### test
|
|
- Reduziertes Logging
|
|
- Test-spezifische Timeouts
|
|
- In-Memory Services optional
|
|
|
|
### prod (Production)
|
|
- Production-ready Logging
|
|
- Sichere Credentials erforderlich
|
|
- Tracing empfohlen
|
|
- Rate Limiting aktiviert
|
|
|
|
**Beispiel für profile-spezifische Datei:**
|
|
```yaml
|
|
# application-prod.yml
|
|
spring:
|
|
security:
|
|
user:
|
|
name: ${GATEWAY_ADMIN_USER} # Muss gesetzt sein!
|
|
password: ${GATEWAY_ADMIN_PASSWORD} # Muss gesetzt sein!
|
|
|
|
management:
|
|
tracing:
|
|
enabled: true
|
|
sampling:
|
|
probability: 0.1 # 10% Sampling in Production
|
|
|
|
logging:
|
|
level:
|
|
at.mocode.infrastructure.gateway: INFO # Weniger Logs
|
|
```
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
1. **Umgebungsvariablen verwenden**: Nie Credentials in application.yml hardcoden
|
|
2. **Profile nutzen**: Separate Konfigurationen für dev/test/prod
|
|
3. **Health Checks aktivieren**: Für Consul und Kubernetes
|
|
4. **Tracing in Production**: Mindestens 10% Sampling
|
|
5. **Monitoring exportieren**: Prometheus-Endpunkt für Grafana
|
|
6. **Circuit Breaker tunen**: An Service-Charakteristiken anpassen
|
|
7. **CORS restriktiv**: Nur benötigte Origins erlauben
|
|
8. **Log Rotation**: Verhindert volle Festplatten
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Gateway startet nicht
|
|
- ✅ Prüfen: Consul erreichbar?
|
|
- ✅ Prüfen: Port 8081 frei?
|
|
- ✅ Prüfen: Keycloak erreichbar? (Optional)
|
|
|
|
### Service nicht erreichbar
|
|
- ✅ Prüfen: Service in Consul registriert?
|
|
- ✅ Prüfen: Circuit Breaker offen?
|
|
- ✅ Prüfen: Health Check erfolgreich?
|
|
|
|
### CORS-Fehler
|
|
- ✅ Prüfen: Origin in allowedOriginPatterns?
|
|
- ✅ Prüfen: Methode in allowedMethods?
|
|
- ✅ Prüfen: allowCredentials korrekt?
|
|
|
|
### Hohe Latenz
|
|
- ✅ Prüfen: response-timeout zu hoch?
|
|
- ✅ Prüfen: Backend-Services langsam?
|
|
- ✅ Prüfen: Connection Pool ausgeschöpft?
|
|
|
|
---
|
|
|
|
## Weitere Ressourcen
|
|
|
|
- [Gateway README](README-INFRA-GATEWAY.md)
|
|
- [Spring Cloud Gateway Dokumentation](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/)
|
|
- [Resilience4j Dokumentation](https://resilience4j.readme.io/)
|
|
- [Consul Dokumentation](https://www.consul.io/docs)
|