Cómo usar Gateway API en APISIX Ingress Controller
Yeqi Peng
November 11, 2022
¿Qué es Kubernetes Gateway API?
Gateway API es otra especificación iniciada por la comunidad (gestionada por sig-network) para ayudar a los usuarios a exponer servicios en Kubernetes fuera del clúster, además de los servicios nativos y Ingress.
Gateway API admite muchos protocolos de red comunes (por ejemplo, HTTP, TCP, UDP) así como TLS. Además, Gateway API incluye recursos de Gateway que hacen posible gestionar el ciclo de vida de un proxy o gateway a través de la API de Kubernetes.
¿Por qué se necesita Gateway API?
En comparación con Ingress, Gateway API representa el superconjunto funcional de Ingress, con las siguientes mejoras:
- Orientado a roles: Gateway está compuesto por recursos de API que modelan roles organizativos que utilizan y configuran la red de servicios de Kubernetes.
- Expresivo: Los recursos de Gateway API admiten funcionalidades principales como coincidencia basada en encabezados, ponderación de tráfico y otras capacidades que solo eran posibles en Ingress mediante anotaciones personalizadas.
- Extensible: Gateway API permite que los recursos personalizados se vinculen en varios niveles de la API, lo que hace posible una personalización granular en los lugares adecuados dentro de la estructura de la API.
Además, el estándar incluye características como portabilidad, gateways compartidos y referencias entre namespaces.
Como se muestra en el diagrama, el diseño orientado a roles permite compartir la infraestructura de red dentro de un clúster entre diferentes equipos y compartir las políticas y restricciones establecidas por el administrador del clúster. Esto permite que diferentes tipos de roles, como proveedores de infraestructura, administradores de clústeres y desarrolladores de aplicaciones, se centren en su propio trabajo y no en lo que otros roles son responsables.
Diferentes roles configuran diferentes niveles de recursos de Gateway API, y los diferentes niveles trabajan juntos:
Estado actual de Gateway API
Actualmente, con el lanzamiento de Gateway API v0.5.0, algunas API principales importantes entran en Beta por primera vez, incluyendo GatewayClass, Gateway y HTTPRoute.
Cómo usar Gateway API en APISIX Ingress
El soporte para APISIX Ingress Controller de Gateway API está en desarrollo y se encuentra en la etapa Alpha, y actualmente admite recursos como HTTPRoute, TCPRoute.
Instalar CRD de Gateway API
Para usar Gateway API, primero necesitas instalar el CRD para Gateway API, ya sea a través de una copia en el repositorio de APISIX Ingress Controller o el repositorio oficial kubernetes-sigs/gateway-api. Aquí se utiliza una copia del CRD del repositorio de APISIX Ingress Controller como ejemplo.
Ejecuta el siguiente comando para instalar el CRD para Gateway API.
git pull git@github.com:apache/apisix-ingress-controller.git
cd apisix-ingress-controller
kubectl apply -f ./samples/deploy/gateway-api/
Instalar APISIX Ingress Controller
El soporte para Gateway API no está habilitado por defecto en APISIX Ingress Controller y se puede habilitar con el parámetro -enable-gateway-api=true
.
Al instalar con Helm, puedes habilitarlo configurando valores.
Usa el siguiente comando para instalar APISIX y APISIX Ingress Controller.
helm repo add apisix https://charts.apiseven.com
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
kubectl create ns apisix-ingress
helm install apisix apisix/apisix --namespace apisix-ingress \
--set gateway.type=NodePort \
--set ingress-controller.enabled=true \
--set ingress-controller.config.apisix.serviceNamespace=apisix-ingress \
--set ingress-controller.config.kubernetes.enableGatewayAPI=true
Nota el parámetro -set ingress-controller.config.kubernetes.enableGatewayAPI=true
que se utiliza para habilitar el soporte de Gateway API.
Estos comandos crearán un entorno de prueba completo bajo el namespace apisix-ingress
, incluyendo APISIX, etcd y APISIX Ingress Controller.
Desplegar carga de prueba
Usa la imagen kennethreitz/httpbin
como carga de prueba.
Usa el siguiente comando para desplegar estas cargas bajo el namespace predeterminado.
kubectl run httpbin --image kennethreitz/httpbin --port 80
kubectl expose pod httpbin --port 80
Configurar HTTPRoute
Actualmente, APISIX Ingress Controller admite la versión v1alpha2
del recurso de Gateway API.
Para pruebas, usa la siguiente configuración de HTTPRoute y guárdala en el archivo httproute.yaml
:
# httproute.yaml
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:
name: basic-http-route
spec:
hostnames:
- local.httpbin.org
rules:
- backendRefs:
- name: httpbin
port: 80
matches:
- path:
type: PathPrefix
value: /
Usa el siguiente comando para desplegar esta configuración de HTTPRoute:
kubectl apply -f ./httproute.yaml
Validación
La validación se puede realizar directamente en el Pod de APISIX ejecutando el siguiente comando:
kubectl -n apisix-ingress exec -it $(kubectl -n apisix-ingress get Pods -l "app.kubernetes.io/name=apisix" -o name) -c apisix -- curl -H "Host: local.httpbin.org" localhost:9080/ip
El resultado esperado es:
{
"origin": "127.0.0.1"
}
Esto indica que nuestra configuración ha entrado en vigor correctamente.
¿Cómo APISIX Ingress admite Gateway API?
Actualmente, APISIX Ingress Controller está agregando soporte para Gateway API y admite recursos como HTTPRoute, TCPRoute, etc.
El soporte de APISIX Ingress Controller para Gateway y Gateway Class está en desarrollo activo, por lo que la configuración de estos recursos no tendrá efecto por ahora.
Resumen
En este artículo, presentamos Gateway API, una nueva especificación en la comunidad para exponer servicios fuera de un clúster, y describimos cómo usarla en APISIX Ingress Controller.
El soporte completo para Gateway API en APISIX Ingress Controller está en desarrollo activo.