Utilisation d'Envoy Gateway pour implémenter l'API Kubernetes Gateway
Découvrez comment configurer Envoy Gateway pour prendre en charge l'API Kubernetes Gateway dans les clusters que vous créez à l'aide de Kubernetes Engine (OKE).
L'API de passerelle Kubernetes (API de passerelle) est la norme nouvelle génération pour la gestion du trafic entrant et réseau dans les clusters Kubernetes, qui succède à l'API entrante. Pour plus d'informations sur l'API Gateway, reportez-vous à API Gateway dans la documentation Kubernetes et à la documentation de l'API Gateway.
Envoy Gateway est une implémentation open source de l'API Gateway qui gère Envoy Proxy en tant que plan de données. Il fournit un moyen standard et conforme de gérer le trafic entrant sans s'appuyer sur des CRD propres au fournisseur.
En déployant Envoy Gateway, vous pouvez l'utiliser en tant que contrôleur sous-jacent pour gérer les ressources d'API de passerelle Gateway, HTTPRoute et autres.
Le déploiement d'Envoy Gateway inclut plusieurs composants qui fonctionnent ensemble :
- Les CRD d'API de passerelle étendent l'API Kubernetes avec de nouveaux types de ressource tels que
GatewayetHTTPRoute, ce qui permet une gestion déclarative du trafic entrant. - Le contrôleur Envoy Gateway fait office de plan de contrôle, surveille les ressources d'API Gateway et les convertit en configuration détaillée pour le plan de données.
- Les pods proxy Envoy forment le plan de données, gérant le trafic réseau conformément aux stratégies et aux routages définis par les ressources de passerelle.
- L'intégration d'OCI Network Load Balancer garantit que le trafic externe est correctement acheminé vers les applications via les noeuds de proxy Envoy.
Prérequis
Avant de configurer Envoy Gateway pour qu'il prenne en charge l'API Kubernetes Gateway :
- Vous devez disposer d'un accès
kubectlau cluster créé par Kubernetes Engine. - L'interface de ligne de commande Helm (version 3.0 ou ultérieure) doit être installée sur l'ordinateur à partir duquel vous accédez au cluster.
- Vous devez disposer des privilèges cluster-admin pour installer des définitions de ressources et des contrôleurs personnalisés.
Configuration d'Envoy Gateway en tant que contrôleur d'API Gateway
Etapes de haut niveau pour configurer la passerelle Envoy Gateway
A haut niveau, les étapes de configuration d'Envoy Gateway en tant que contrôleur d'API Gateway sont les suivantes :
- Etape 1 : Installation des CRD de l'API Gateway
- Etape 2 : installation d'Envoy Gateway
- Etape 3 : configuration de l'intégration d'OCI Network Load Balancer
- Etape 4 : création d'un élément GatewayClass
- Etape 5 : création d'une passerelle
- Etape 6 : déploiement d'un exemple d'application
- Etape 7 : création d'un élément HTTPRoute
- Etape 8 : vérification de la connectivité
Etape 1 : Installation des CRD de l'API Gateway
Les définitions de ressource personnalisées d'API Gateway (CRD) ne sont pas installées par défaut dans les clusters que vous créez à l'aide de Kubernetes Engine. Avant d'utiliser Envoy Gateway en tant que contrôleur d'API Gateway, vous devez installer les CRD.
-
Installez les CRD de canal standard (v1.2.0) en saisissant :
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml -
Vérifiez que le CRD est installé en saisissant la commande suivante :
kubectl get crd gateways.gateway.networking.k8s.io - Vérifiez que le CRD est répertorié dans la sortie.
Etape 2 : installation d'Envoy Gateway
Utilisez Helm pour installer le contrôleur Envoy Gateway.
-
Installez le graphique dans l'espace de noms
envoy-gateway-systemen saisissant la commande suivante :helm install eg oci://docker.io/envoyproxy/gateway-helm --version v1.6.3 -n envoy-gateway-system --create-namespace -
Attendez que le contrôleur de la passerelle Envoy Gateway soit prêt en saisissant :
kubectl wait --namespace envoy-gateway-system \ --for=condition=ready pod \ --selector=control-plane=envoy-gateway \ --timeout=90s
Etape 3 : configuration de l'intégration d'OCI Network Load Balancer
Créez une ressource personnalisée EnvoyProxy pour injecter les annotations OCI nécessaires dans le fichier Service créé par Envoy Gateway.
-
Créez un fichier nommé
oci-envoy-proxy.yamlavec le contenu suivant :apiVersion: gateway.envoyproxy.io/v1alpha1 kind: EnvoyProxy metadata: name: oci-flexible-proxy namespace: envoy-gateway-system spec: provider: type: Kubernetes kubernetes: envoyService: annotations: oci.oraclecloud.com/load-balancer-type: "nlb" -
Créez la ressource personnalisée
EnvoyProxyen saisissant la commande suivante :kubectl apply -f oci-envoy-proxy.yaml
Etape 4 : création d'un élément GatewayClass
Créez un élément GatewayClass qui indique au contrôleur d'utiliser l'élément EnvoyProxy que vous avez créé.
-
Créez un fichier nommé
oci-gateway-class.yamlavec le contenu suivant :apiVersion: gateway.networking.k8s.io/v1 kind: GatewayClass metadata: name: oci-gateway-class spec: controllerName: gateway.envoyproxy.io/gatewayclass-controller parametersRef: group: gateway.envoyproxy.io kind: EnvoyProxy name: oci-flexible-proxy namespace: envoy-gateway-system -
Créez le fichier
GatewayClassen saisissant la commande suivante :kubectl apply -f oci-gateway-class.yaml
Etape 5 : création d'une passerelle
Créez la ressource Gateway, qui déclenche la création de l'équilibreur de charge réseau OCI.
-
Créez un fichier nommé
my-gateway.yamlavec le contenu suivant :apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-envoy-gateway namespace: default spec: gatewayClassName: oci-gateway-class listeners: - name: http protocol: HTTP port: 80 allowedRoutes: namespaces: from: Same -
Créez le fichier
Gatewayen saisissant la commande suivante :kubectl apply -f my-gateway.yaml -
Obtenez l'adresse IP externe en saisissant :
kubectl get gateway my-envoy-gateway -n defaultLe provisionnement de l'équilibreur de charge par OCI peut prendre quelques minutes.
Attendez que la colonne
PROGRAMMEDcontienneTrueet qu'une adresse IP apparaisse dans la colonneADDRESS.
Etape 6 : déploiement d'un exemple d'application
Testez la passerelle en déployant un service echo simple.
-
Créez un fichier nommé
echo-app.yamlavec le contenu suivant :apiVersion: apps/v1 kind: Deployment metadata: name: echo-app namespace: default spec: replicas: 1 selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echo image: ealen/echo-server:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: echo-service namespace: default spec: selector: app: echo ports: - port: 80 targetPort: 80 -
Créez l'application échantillon en saisissant ce qui suit :
kubectl apply -f echo-app.yaml
Etape 7 : création d'un élément HTTPRoute
Créez un élément HTTPRoute pour diriger le trafic de Gateway vers l'application.
-
Créez un fichier nommé
echo-route.yamlavec le contenu suivant :apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: echo-route namespace: default spec: parentRefs: - name: my-envoy-gateway rules: - matches: - path: type: PathPrefix value: / backendRefs: - name: echo-service port: 80 -
Créez le fichier
HTTPRouteen saisissant la commande suivante :kubectl apply -f echo-route.yaml
Etape 8 : vérification de la connectivité
Vérifiez la connectivité en envoyant une demande à l'adresse IP externe de Gateway.
-
Récupérez l'adresse IP publique de la passerelle et enregistrez-la en tant que variable d'environnement en saisissant ce qui suit :
export GATEWAY_IP=$(kubectl get gateway my-envoy-gateway -o jsonpath='{.status.addresses[0].value}') -
Utilisez
curlpour envoyer une demande à l'adresse IP externe de la passerelle en saisissant ce qui suit :curl -i http://$GATEWAY_IP/ - Confirmez que vous recevez une réponse
200 OK, ainsi qu'un corps JSON qui affiche les détails de la demande (en-têtes, hôte, etc.).
(Facultatif) Nettoyage
Vous pouvez éventuellement supprimer les ressources que vous avez créées dans cette rubrique en saisissant la commande suivante :
kubectl delete -f echo-route.yaml
kubectl delete -f echo-app.yaml
kubectl delete -f my-gateway.yaml
kubectl delete -f oci-gateway-class.yaml
kubectl delete -f oci-envoy-proxy.yaml
helm uninstall eg -n envoy-gateway-system
Si vous n'avez plus besoin de l'API Gateway sur ce cluster, vous pouvez enlever les CRD en saisissant ce qui suit :
kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml