Ce face Gateway API: HTTPRoute
HTTPRoute se atașează la un Gateway prin parentRefs și spune ce se întâmplă cu cererile HTTP: pentru ce domenii (hostnames), ce căi sau antete se potrivesc (matches) și către ce Service-uri merg (backendRefs). Ruta stă de obicei în namespace-ul aplicației, lângă Service.
Lucruri pentru care la Ingress aveai nevoie de adnotări specifice fiecărui controller sunt aici câmpuri standard: împărțirea traficului pe procente (weight, util la lansări canary), redirecționarea HTTP spre HTTPS, rescrierea căii sau adăugarea de antete (filters).
Parametri
| Parametru | Descriere |
|---|---|
spec.parentRefs |
Gateway-ul (și opțional listenerul, prin sectionName) la care se atașează ruta. |
spec.hostnames |
Domeniile pentru care se aplică ruta. |
rules[].matches |
Condiții: path (PathPrefix, Exact), headers, queryParams, method. |
rules[].backendRefs |
Service-urile țintă, cu port și opțional weight. |
rules[].filters |
RequestRedirect, URLRewrite, RequestHeaderModifier etc. |
Exemple
Exemplul 1: Site și API pe același domeniu
Cererile care încep cu /api merg la API, restul la frontend. Ruta se atașează la listenerul https al Gateway-ului public.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: magazin
namespace: magazin
spec:
parentRefs:
- name: public
namespace: infra
sectionName: https
hostnames:
- magazin.exemplu.ro
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: magazin-api
port: 3000
- backendRefs:
- name: magazin-web
port: 80
Exemplul 2: Lansare canary: 10% din trafic pe versiunea nouă
Ponderile sunt relative: 90 și 10 înseamnă 90% și 10% din cereri.
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: magazin-api-v1
port: 3000
weight: 90
- name: magazin-api-v2
port: 3000
weight: 10
Exemplul 3: Redirecționare HTTP spre HTTPS și verificare
O rută separată pe listenerul http răspunde cu 301 către adresa HTTPS.
kubectl apply -f - <<'EOF'
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: magazin-redirect
namespace: magazin
spec:
parentRefs:
- name: public
namespace: infra
sectionName: http
hostnames: ["magazin.exemplu.ro"]
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
EOF
kubectl get httproute -n magazin
Ieșire în terminal
httproute.gateway.networking.k8s.io/magazin-redirect created
NAME HOSTNAMES AGE
magazin ["magazin.exemplu.ro"] 12m
magazin-redirect ["magazin.exemplu.ro"] 3s
Greșeli frecvente
- Trimiterea către un Service din alt namespace fără
ReferenceGrant: din motive de securitate, Gateway API refuză referințele între namespace-uri până când namespace-ul țintă le permite explicit. - Neverificarea stării rutei:
kubectl describe httproutearată înStatuscondițiileAcceptedșiResolvedRefs, care explică de ce o rută nu funcționează (Gateway inexistent, Service greșit, port lipsă).
Comenzi înrudite
Gateway API: Gateway și GatewayClass: Punctul de intrare în cluster din Gateway API, succesorul lui Ingress: definește porturile, protocoalele și certificatele TLS.Obiectul ReplicaSet: Menține în funcțiune un număr fix de Pod-uri identice; este creat și gestionat automat de Deployment.