Usar Cilium Gateway API
Introducción
La API Gateway es la nueva norma de Kubernetes para la gestión del tráfico entrante. Sustituye al recurso Ingress tradicional, ofreciendo mayor flexibilidad, 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 la API Gateway.
:::info[Versiones compatibles ] Esta documentación se aplica a los clústeres que utilizan Cilium 1.8.4 o superior. Los CRDs de la API Gateway en versión 1.4 están preinstalados en su clúster. :::
Objetivos
Este tutorial le guiará a:
- Comprender los recursos básicos de la API Gateway (GatewayClass, Gateway, HTTPRoute).
- Desplegar una aplicación de prueba.
- Exponer esta aplicación a través de una Gateway de Cilium.
- Probar el acceso.
Requisitos
- Un clúster de Kubernetes gestionado de 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, cabeceras) 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 la siguiente:
NAME CONTROLLER ACCEPTED AGE
cilium io.cilium/gateway True 2d
:::info[Nota ] 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 sencilla 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 (cela peut prendre quelques instants pour que le LoadBalancer soit provisionné par l'infrastructure 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 que indique los detalles del pod que respondió.
Características avanzadas (Ejemplo: Canary Release)
La API Gateway facilita significativamente los escenarios de despliegue avanzados, como el 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
Conclusion
Ha implementado una infraestructura moderna de exposición de servicios con Cilium Gateway API. Este enfoque estandarizado, más rico semánticamente que los Ingress, se recomienda para aprovechar las capacidades avanzadas de la red de Kubernetes.