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

  1. Path Routing
    • Bardziej specyficzne ścieżki przed ogólnymi
    • Używaj PathType: Prefix dla elastyczności
    • Testuj wszystkie ścieżki po zmianach
  2. 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

results matching ""

    No results matching ""