19: Ingress — routing po ścieżkach
Ingress — routing po ścieżkach (path-based routing)
Cel zadania
Celem zadania jest nauka konfiguracji Ingress z routingiem opartym o ścieżki URL — kierowanie ruchu do różnych serwisów na podstawie ścieżki w adresie URL.
Teoria
Path-based routing — kiedy i po co?
- Mikroserwisy: Różne ścieżki URL kierują do różnych serwisów backendowych
- API Gateway pattern: Jeden punkt wejścia (domena), wiele serwisów pod spodem
- Separacja odpowiedzialności:
/app→ frontend,/admin→ panel administracyjny,/api→ backend - Oszczędność: Jeden Load Balancer i jedna domena zamiast wielu
Diagram: Path-based routing
graph TD
USER["Użytkownik"]
ING["Ingress<br/>host: paths-XX.example.com"]
USER -->|"HTTP request"| ING
ING -->|"/app/*"| SVC1["Service: echo-app"]
ING -->|"/admin/*"| SVC2["Service: echo-admin"]
SVC1 --> P1["Pod: echo-app 1"]
SVC1 --> P2["Pod: echo-app 2"]
SVC2 --> P3["Pod: echo-admin 1"]
SVC2 --> P4["Pod: echo-admin 2"]
style ING fill:#fff3e0,stroke:#f57c00
style SVC1 fill:#e3f2fd
style SVC2 fill:#e3f2fd
Zadanie: Path-based Routing
Utwórz plik paths-app.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-app
spec:
replicas: 2
selector:
matchLabels:
app: echo-app
template:
metadata:
labels:
app: echo-app
spec:
containers:
- image: ealen/echo-server:latest
name: echo-server
ports:
- containerPort: 80
env:
- name: PORT
value: "80"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-admin
spec:
replicas: 2
selector:
matchLabels:
app: echo-admin
template:
metadata:
labels:
app: echo-admin
spec:
containers:
- image: ealen/echo-server:latest
name: echo-server
ports:
- containerPort: 80
env:
- name: PORT
value: "80"
---
apiVersion: v1
kind: Service
metadata:
name: echo-app
spec:
ports:
- port: 80
targetPort: 80
selector:
app: echo-app
---
apiVersion: v1
kind: Service
metadata:
name: echo-admin
spec:
ports:
- port: 80
targetPort: 80
selector:
app: echo-admin
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echo-paths
spec:
ingressClassName: nginx
rules:
- host: paths-XX.acc.patoarchitekci.io
http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: echo-app
port:
number: 80
- path: /admin
pathType: Prefix
backend:
service:
name: echo-admin
port:
number: 80
Weryfikacja:
# Wdrożenie
kubectl apply -f paths-app.yaml
# Sprawdzenie endpointów
kubectl get endpoints echo-app
kubectl get endpoints echo-admin
# Test konfiguracji ścieżek
kubectl get ingress echo-paths
kubectl describe ingress echo-paths
Najczęstsze problemy
| Problem | Rozwiązanie |
|---|---|
| 404 Not Found | Sprawdź ścieżki w Ingress i działanie serwisu |
| Zły routing | Zweryfikuj kolejność reguł paths |
| Brak endpointów | Sprawdź selector i labels w Deployment/Service |
Dobre praktyki
- Path Routing
- Bardziej specyficzne ścieżki przed ogólnymi
- Używaj PathType: Prefix dla elastyczności
- Testuj wszystkie ścieżki po zmianach
- Organizacja
- Jeden Ingress per aplikacja
- Jasne nazewnictwo hostów i ścieżek
- Grupowanie powiązanych reguł
Podsumowanie
- Path-based routing pozwala kierować ruch do różnych serwisów na podstawie URL
- Kolejność ścieżek ma znaczenie — bardziej specyficzne powinny być pierwsze
- Każda ścieżka może prowadzić do innego serwisu backendowego