Saltar al contenido principal

Utilizar Cilium Gateway API

Introducción

La API Gateway es el nuevo estándar de Kubernetes para la gestión del tráfico entrante. Sustituye al recurso Ingress tradicional al ofrecer mayor flexibilidad, más funcionalidades (enrutamiento avanzado, balanceo de carga, etc.) y una mejor separación de responsabilidades.

En su clúster Managed Kubernetes Cloud Temple, Cilium se utiliza como CNI e implementa de forma nativa el soporte para Gateway API.

ℹ️[Versions supportées] Esta documentación se aplica a los clústeres que utilizan Cilium 1.8.4 o superior. Los CRDs de Gateway API en la versión 1.4 están preinstalados en su clúster.

Objetivos

Este tutorial le guiará para:

  • Comprender los recursos básicos de Gateway API (GatewayClass, Gateway, HTTPRoute).
  • Desplegar una aplicación de prueba.
  • Exponer esta aplicación a través de una Gateway Cilium.
  • Probar el acceso.

Prerrequisitos

  • Un clúster Managed Kubernetes Cloud Temple operativo.
  • La herramienta kubectl configurada para acceder a su clúster.
  • La herramienta cilium.

Conceptos Clave

Gateway API descompone la configuración de red en tres recursos principales:

  1. GatewayClass : Define el tipo de controlador (aquí, io.cilium/gateway).
  2. Gateway : Instancia un punto de entrada de red (balanceador de carga).
  3. HTTPRoute : Define las reglas de enrutamiento (rutas, encabezados) hacia los Servicios de Kubernetes.
Esquema GAPI

Paso 1: Verificar la versión y la GatewayClass

Puede verificar que su clúster utiliza una versión compatible de Cilium (1.8.4+) mediante los siguientes comandos:

cilium status
cilium config view | grep -w "enable-gateway-api"

Asegúrese luego de que la GatewayClass de Cilium esté disponible en su clúster:

kubectl get gatewayclass

Debería ver una salida similar a:

NAME CONTROLLER ACCEPTED AGE
cilium io.cilium/gateway True 2d

ℹ️Si no se lista ninguna GatewayClass, asegúrese de que la función Gateway API esté habilitada en su instalación de Cilium.

Paso 2: Desplegar una aplicación de demostración

Desplegaremos una aplicación simple que devuelve información sobre el pod (echo-server).

Cree un archivo apps.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-server
labels:
app: echo-server
spec:
replicas: 2
selector:
matchLabels:
app: echo-server
template:
metadata:
labels:
app: echo-server
spec:
containers:
- name: echo-server
image: ealen/echo-server:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: echo-service
labels:
app: echo-server
spec:
selector:
app: echo-server
ports:
- port: 80
targetPort: 80

Aplique la configuración:

kubectl apply -f apps.yaml

Paso 3 : Crear la Gateway

La Gateway solicitará la creación de un LoadBalancer para recibir el tráfico.

Cree un archivo gateway.yaml :

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: my-gateway
spec:
gatewayClassName: cilium
listeners:
- protocol: HTTP
port: 80
name: web-gw
allowedRoutes:
namespaces:
from: Same

Aplique la configuración :

kubectl apply -f gateway.yaml

Verifique que la Gateway haya obtenido una dirección IP (esto puede tardar unos instantes para que el LoadBalancer sea aprovisionado por la infraestructura Cloud Temple) :

kubectl get gateway my-gateway

Espere a que el campo PROGRAMMED sea True y que ADDRESS muestre una IP.

Paso 4 : Crear una HTTPRoute

Ahora que tenemos una "puerta de entrada" (Gateway), debemos dirigir el tráfico hacia nuestro servicio.

Cree un archivo httproute.yaml :

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: echo-route
spec:
parentRefs:
- name: my-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: echo-service
port: 80

Aplique la configuración :

kubectl apply -f httproute.yaml

Paso 5: Probar el acceso

Obtenga la dirección IP de su Gateway:

kubectl get gateway my-gateway -o jsonpath='{.status.addresses[0].value}'

Envíe una solicitud a esta IP para probar:

curl http://10.200.205.2

Debería recibir una respuesta JSON de la aplicación echo-server indicando los detalles del pod que respondió.

Funcionalidades avanzadas (Ejemplo: Canary Release)

Gateway API facilita enormemente los escenarios de despliegue avanzados, como Canary Release (distribución ponderada del tráfico).

Supongamos que tenemos una v2 de nuestra aplicación. Podemos distribuir el tráfico al 90% hacia v1 y al 10% hacia v2 simplemente ajustando los pesos en backendRefs :

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: echo-route-canary
spec:
parentRefs:
- name: my-gateway
rules:
- backendRefs:
- name: echo-service
port: 80
weight: 90
- name: echo-service-v2
port: 80
weight: 10

Conclusión

Ha implementado una infraestructura moderna de exposición de servicios con Cilium Gateway API. Este enfoque estandarizado, semánticamente más rico que los Ingress, se recomienda para aprovechar las capacidades avanzadas de la red de Kubernetes.