Comment utiliser Gateway API dans APISIX Ingress Controller

Yeqi Peng

November 11, 2022

Products

Qu'est-ce que l'API Gateway de Kubernetes

Gateway API est une autre spécification initiée par la communauté (gérée par sig-network) pour aider les utilisateurs à exposer des services en dehors du cluster Kubernetes, en plus des services natifs et de l'Ingress.

L'API Gateway prend en charge de nombreux protocoles réseau courants (par exemple, HTTP, TCP, UDP) ainsi que TLS. De plus, l'API Gateway inclut des ressources Gateway qui permettent de gérer le cycle de vie d'un proxy ou d'une passerelle via l'API Kubernetes.

Pourquoi avons-nous besoin de l'API Gateway

Comparé à Ingress, l'API Gateway représente le sur-ensemble fonctionnel d'Ingress, avec les améliorations suivantes :

  • Orienté rôle : Gateway est composé de ressources API qui modélisent les rôles organisationnels utilisant et configurant le réseau de services Kubernetes.
  • Expressif : Les ressources de l'API Gateway prennent en charge des fonctionnalités de base telles que la correspondance basée sur les en-têtes, la pondération du trafic et d'autres capacités qui n'étaient possibles dans Ingress qu'à travers des annotations personnalisées.
  • Extensible : L'API Gateway permet de lier des ressources personnalisées à différents niveaux de l'API, ce qui rend possible une personnalisation granulaire aux endroits appropriés de la structure de l'API.

En outre, la norme inclut des fonctionnalités telles que la portabilité, les passerelles partagées et les références inter-namespaces.

Comme le montre le diagramme, la conception orientée rôle permet le partage de l'infrastructure réseau au sein d'un cluster entre différentes équipes et le partage des politiques et contraintes définies par l'administrateur du cluster. Cela permet à différents types de rôles, tels que les fournisseurs d'infrastructure, les administrateurs de cluster et les développeurs d'applications, de se concentrer sur leur propre travail et non sur ce dont les autres rôles sont responsables.

api-mode.png

Différents rôles configurent différents niveaux de ressources de l'API Gateway, et les différents niveaux travaillent ensemble :

gateway-roles.png

État actuel de l'API Gateway

Actuellement, avec la sortie de l'API Gateway v0.5.0, certaines API principales importantes entrent en Beta pour la première fois, y compris GatewayClass, Gateway et HTTPRoute.

Comment utiliser l'API Gateway dans APISIX Ingress

Le support de l'API Gateway par APISIX Ingress Controller est en cours de développement et est au stade Alpha, et prend actuellement en charge des ressources comme HTTPRoute, TCPRoute.

Installer les CRD de l'API Gateway

Pour utiliser l'API Gateway, vous devez d'abord installer les CRD pour l'API Gateway, soit via une copie sous le dépôt APISIX Ingress Controller, soit via le dépôt officiel kubernetes-sigs/gateway-api. Une copie des CRD du dépôt APISIX Ingress Controller est utilisée ici comme exemple.

Exécutez la commande suivante pour installer les CRD pour l'API Gateway.

git pull git@github.com:apache/apisix-ingress-controller.git
cd apisix-ingress-controller

kubectl apply -f ./samples/deploy/gateway-api/

Installer APISIX Ingress Controller

Le support de l'API Gateway n'est pas activé par défaut dans APISIX Ingress Controller et peut être activé avec le paramètre -enable-gateway-api=true.

Lors de l'installation avec Helm, vous pouvez l'activer en configurant les valeurs.

Utilisez la commande suivante pour installer APISIX et 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

Notez le paramètre -set ingress-controller.config.kubernetes.enableGatewayAPI=true qui est utilisé pour activer le support de l'API Gateway.

Ces commandes créeront un environnement de test complet sous le namespace apisix-ingress, incluant APISIX, etcd et APISIX Ingress Controller.

Déployer la charge de test

Utilisez l'image kennethreitz/httpbin comme charge de test.

Utilisez la commande suivante pour déployer ces charges sous le namespace par défaut.

kubectl run httpbin --image kennethreitz/httpbin --port 80
kubectl expose pod httpbin --port 80

Configurer HTTPRoute

Actuellement, APISIX Ingress Controller prend en charge la version v1alpha2 de la ressource de l'API Gateway.

Pour les tests, utilisez la configuration HTTPRoute suivante et enregistrez-la dans le fichier 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: /

Utilisez la commande suivante pour déployer cette configuration HTTPRoute :

kubectl apply -f ./httproute.yaml

Validation

La validation peut être effectuée directement dans le Pod APISIX en exécutant la commande suivante :

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

Le résultat attendu est :

{
"origin": "127.0.0.1"
}

Cela indique que notre configuration a pris effet avec succès.

Comment APISIX Ingress prend en charge l'API Gateway

Actuellement, APISIX Ingress Controller ajoute le support de l'API Gateway et prend en charge des ressources telles que HTTPRoute, TCPRoute, etc.

Le support de Gateway et Gateway Class par APISIX Ingress Controller est en cours de développement actif, donc la configuration de ces ressources ne prendra pas effet pour le moment.

Résumé

Dans cet article, nous présentons l'API Gateway, une toute nouvelle spécification dans la communauté pour exposer des services en dehors d'un cluster, et décrivons comment l'utiliser dans APISIX Ingress Controller.

Le support complet de l'API Gateway dans APISIX Ingress Controller est en cours de développement actif.

Tags: