Gateway API: Gateway și GatewayClass în Kubernetes (kubectl)

Obiecte Kubernetes (manifeste YAML) Gateway API v1.0+ (gateway.networking.k8s.io/v1)

Punctul de intrare în cluster din Gateway API, succesorul lui Ingress: definește porturile, protocoalele și certificatele TLS.

Sintaxă comandă
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway

Ce face Gateway API: Gateway și GatewayClass

Gateway API este setul de resurse care preia rolul lui Ingress pentru traficul care intră în cluster. Rolurile sunt separate: GatewayClass spune ce implementare se folosește (de exemplu Envoy Gateway, Istio, Cilium, NGINX Gateway Fabric, Traefik), Gateway descrie punctul de intrare (porturi, protocoale, certificate), iar rutele (HTTPRoute) descriu unde merge fiecare cerere. Astfel echipa de infrastructură gestionează Gateway-ul, iar echipele de aplicații își scriu propriile rute.

Resursele nu sunt incluse în Kubernetes: instalezi întâi CRD-urile Gateway API (în octombrie 2026, ultima versiune stabilă este v1.6.3), apoi un controller care le implementează. Gateway API este recomandarea proiectului Kubernetes pentru configurații noi: Ingress rămâne disponibil, dar nu mai primește funcții noi, iar controllerul Ingress NGINX nu mai este întreținut din martie 2026.

Parametri

Parametru Descriere
spec.gatewayClassName Numele GatewayClass-ului (implementarea folosită).
spec.listeners[].port / protocol Portul și protocolul ascultate: HTTP, HTTPS, TLS, TCP, UDP.
listeners[].hostname Limitează listenerul la un nume de domeniu (acceptă *.exemplu.ro).
listeners[].tls.certificateRefs Secretul de tip TLS cu certificatul, pentru HTTPS.
listeners[].allowedRoutes.namespaces.from Din ce namespace-uri se pot atașa rute: Same (implicit), All sau Selector.
GatewayClass spec.controllerName Identificatorul controllerului care gestionează clasa.

Exemple

Exemplul 1: Instalarea CRD-urilor Gateway API

Canalul standard conține resursele stabile (GatewayClass, Gateway, HTTPRoute, GRPCRoute, ReferenceGrant). Controllerul se instalează separat, după documentația lui.

kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.3/standard-install.yaml

Ieșire în terminal

customresourcedefinition.apiextensions.k8s.io/gatewayclasses.gateway.networking.k8s.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/gateways.gateway.networking.k8s.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/grpcroutes.gateway.networking.k8s.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/httproutes.gateway.networking.k8s.io serverside-applied
customresourcedefinition.apiextensions.k8s.io/referencegrants.gateway.networking.k8s.io serverside-applied
...

Exemplul 2: Gateway cu HTTP și HTTPS pentru toate echipele

Clasa eg aparține lui Envoy Gateway. Certificatul este un Secret TLS din namespace-ul infra; rutele se pot atașa din orice namespace.

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: eg
spec:
  controllerName: gateway.envoyproxy.io/gatewayclass-controller
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: public
  namespace: infra
spec:
  gatewayClassName: eg
  listeners:
    - name: http
      protocol: HTTP
      port: 80
      allowedRoutes:
        namespaces:
          from: All
    - name: https
      protocol: HTTPS
      port: 443
      hostname: "*.exemplu.ro"
      tls:
        mode: Terminate
        certificateRefs:
          - kind: Secret
            name: wildcard-exemplu-ro
      allowedRoutes:
        namespaces:
          from: All

Exemplul 3: Verificarea stării

PROGRAMMED True înseamnă că implementarea a configurat punctul de intrare și i-a dat o adresă.

kubectl get gatewayclass
kubectl get gateway -n infra

Ieșire în terminal

NAME   CONTROLLER                                      ACCEPTED   AGE
eg     gateway.envoyproxy.io/gatewayclass-controller   True       5m
NAME     CLASS   ADDRESS        PROGRAMMED   AGE
public   eg      203.0.113.10   True         3m

Greșeli frecvente

  • Aplicarea unui Gateway fără un controller instalat: resursa este acceptată de API, dar rămâne fără adresă și cu PROGRAMMED Unknown, pentru că nimeni nu o implementează.
  • Lăsarea lui allowedRoutes la valoarea implicită (Same) când rutele stau în alte namespace-uri: rutele apar cu condiția Accepted: False și traficul nu ajunge la aplicație.

Comenzi înrudite

  • Gateway API: HTTPRoute: Regulile de rutare HTTP din Gateway API: după domeniu, cale sau antete, cerere trimisă către unul sau mai multe Service-uri.
  • Obiectul ServiceAccount: Identitatea cu care un Pod se autentifică la API-ul Kubernetes; primește drepturi prin RBAC și un token de scurtă durată.