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
kubectlconfigurada para acceder a su clúster. - La herramienta
cilium.
Conceptos Clave
Gateway API descompone la configuración de red en tres recursos principales:
- GatewayClass : Define el tipo de controlador (aquí,
io.cilium/gateway). - Gateway : Instancia un punto de entrada de red (balanceador de carga).
- HTTPRoute : Define las reglas de enrutamiento (rutas, encabezados) hacia los Servicios de Kubernetes.
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.