18: Ingress — podstawy
Ingress w Kubernetes: podstawy
Cel zadania
Celem zadania jest zrozumienie czym jest Ingress w Kubernetes i jak skonfigurować podstawowy routing HTTP dla pojedynczego serwisu.
Teoria
Ingress w Kubernetes
# Podstawowa struktura Ingress
apiVersion: networking.k8s.io/v1 # Używamy najnowszej wersji API
kind: Ingress
metadata:
name: example-ingress # Nazwa zasobu Ingress
spec:
ingressClassName: nginx # Określa który kontroler powinien obsługiwać ten Ingress
rules: # Lista reguł routingu
- host: app.example.com # Domena dla której stosujemy reguły (opcjonalne)
http: # Definicja reguł HTTP
paths: # Lista ścieżek URL
- path: /api # Ścieżka URL
pathType: Prefix # Typ dopasowania ścieżki (Prefix, Exact)
backend: # Definicja backendu
service: # Serwis do którego kierujemy ruch
name: api-service # Nazwa serwisu
port: # Port serwisu
number: 80 # Numer portu
Kluczowe elementy:
- IngressClassName:
spec: ingressClassName: nginx # Zamiast annotacji używamy pola ingressClassName- Określa który kontroler Ingress powinien obsłużyć tę regułę
- Zastępuje starszą annotację
kubernetes.io/ingress.class - Musi być zdefiniowany w klastrze odpowiedni IngressClass
- Rules (Reguły):
```yaml
rules:
- host: app.example.com # Domena (opcjonalna) http: # Sekcja reguł HTTP paths: # Lista ścieżek ```
- Definiują jak kierować ruch
- Mogą być oparte o hosty i/lub ścieżki
- Reguły są sprawdzane w kolejności
- PathType:
pathType: Prefix # lub ExactPrefix: Dopasowuje ścieżkę i wszystkie podścieżki (np. /api dopasuje /api/v1, /api/docs)Exact: Dopasowuje dokładnie podaną ścieżkę
- Backend:
backend: service: name: my-service # Nazwa serwisu Kubernetes port: number: 80 # Port serwisu- Określa serwis docelowy
- Musi istnieć w tym samym namespace co Ingress
Jak działa Ingress?
graph LR
INET["Internet<br/>(użytkownik)"]
IC["Ingress Controller<br/>(nginx)"]
ING["Ingress Rules<br/>host: app.example.com<br/>path: /"]
SVC["Service<br/>(ClusterIP)"]
subgraph PODS["Pody"]
P1["Pod 1"]
P2["Pod 2"]
P3["Pod 3"]
end
INET -->|"HTTP request"| IC
IC -->|"sprawdza reguły"| ING
ING -->|"dopasowany backend"| SVC
SVC -->|"load balancing"| P1
SVC -->|"load balancing"| P2
SVC -->|"load balancing"| P3
style IC fill:#e3f2fd,stroke:#1976d2
style ING fill:#fff3e0,stroke:#f57c00
style PODS fill:#e8f5e9
Proces przetwarzania żądania:
- Żądanie trafia do Ingress Controller
- Sprawdzane są reguły (host i path)
- Ruch jest kierowany do odpowiedniego Service
- Service przekazuje ruch do Podów
Kluczowe komponenty:
IngressClass: Określa który kontroler obsługuje regułyRules: Definicje routingu (host + path)Backend: Serwis docelowyPathType: Sposób dopasowania ścieżki (Prefix/Exact)
Zadanie: Podstawowy Ingress
Utwórz plik basic-app.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-basic
spec:
replicas: 3
selector:
matchLabels:
app: echo-basic
template:
metadata:
labels:
app: echo-basic
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-basic
spec:
ports:
- port: 80
targetPort: 80
selector:
app: echo-basic
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echo-basic
spec:
ingressClassName: nginx
rules:
- host: basic-XX.acc.patoarchitekci.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: echo-basic
port:
number: 80
Weryfikacja:
# Wdrożenie konfiguracji
kubectl apply -f basic-app.yaml
# Sprawdzenie statusu
kubectl get deployment echo-basic
kubectl get service echo-basic
kubectl get ingress echo-basic
# Test poprawności konfiguracji
kubectl get ingress echo-basic
Najczęstsze problemy
| Problem | Rozwiązanie |
|---|---|
| 404 Not Found | Sprawdź ścieżki w Ingress i działanie serwisu |
| Host nie działa | Sprawdź DNS i nazwę hosta w regułach |
| Ingress bez adresu | Sprawdź czy Ingress Controller jest zainstalowany |
Podsumowanie
- Ingress to warstwa routingu HTTP w Kubernetes
- IngressClassName określa który kontroler obsługuje reguły
- Reguły definiują routing na podstawie hosta i ścieżki
- W następnych ćwiczeniach poznasz path-based routing i URL rewriting