Utilisation d'Istio en tant qu'extension de cluster pour implémenter l'API Kubernetes Gateway

Découvrez comment installer, configurer et utiliser l'extension de cluster Istio pour implémenter l'API Kubernetes Gateway dans les clusters que vous avez créés à 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.

L'extension de cluster Istio est une extension gérée par Oracle pour Kubernetes Engine qui déploie et gère le plan de contrôle Istio dans un cluster. Il permet une prise en charge avancée du maillage de services et de l'API Gateway pour la gestion du trafic et des entrées.

En activant l'extension de cluster Istio, vous pouvez utiliser Istio en tant que contrôleur sous-jacent pour gérer les ressources d'API Gateway Gateway, HTTPRoute et autres.

L'utilisation d'Istio en tant qu'extension de cluster (extension de cluster Istio) simplifie la gestion du cycle de vie du plan de contrôle (istiod). Vous pouvez plus simplement :

  • Activez ou désactivez le plan de contrôle Istio.
  • Acceptez et désactivez les mises à jour de version automatiques par Oracle.
  • Gérer les personnalisations spécifiques aux modules complémentaires à l'aide d'arguments de configuration de paires clé/valeur approuvés.

Les sections suivantes décrivent comment utiliser l'extension de cluster Istio pour configurer la mise en réseau de l'API Gateway :

Prérequis

Avant de configurer l'extension de cluster Istio pour prendre en charge l'API Kubernetes Gateway :

  • Vous devez disposer d'un accès kubectl au cluster créé par Kubernetes Engine.
  • Vous devez disposer des privilèges cluster-admin pour installer des définitions de ressources et des contrôleurs personnalisés.

Configuration du module complémentaire Istio Cluster en tant que contrôleur API Gateway

Etapes de haut niveau pour configurer l'extension de cluster Istio en tant que contrôleur d'API Gateway

A haut niveau, les étapes de configuration de l'extension de cluster Istio pour servir de contrôleur d'API Gateway sont les suivantes :

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 Istio en tant que contrôleur API de passerelle, vous devez installer les CRD.

  1. Installez les CRD API Gateway standard (v1.2.0) en saisissant :

    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
    
  2. Vérifiez que le CRD est installé en saisissant la commande suivante :

    kubectl get crd gateways.gateway.networking.k8s.io
    
  3. Vérifiez que le CRD est répertorié dans la sortie.
  4. Vérifiez que la version de l'API de passerelle Kubernetes est compatible avec la version d'extension Istio prise en charge par Kubernetes Engine pour la version de Kubernetes exécutée sur le cluster (reportez-vous à Comparaisons - v1.2 dans la documentation de l'API de passerelle et à Versions prises en charge par l'extension de cluster).

Etape 2 : création du fichier de configuration du module complémentaire Istio cluster

Créez un fichier de configuration d'extension de cluster Istio à utiliser avec l'interface de ligne de commande OCI.

  1. Créez un fichier JSON (par exemple, enableistio.json).

  2. Ajoutez le contenu suivant pour activer le module complémentaire.

    Remarque : contrairement au cas d'utilisation standard de Service Mesh, vous n'avez pas strictement besoin de définir l'élément enableIngressGateway hérité car l'API Gateway peut provisionner dynamiquement l'infrastructure de passerelle. Cependant, sa définition fournit une restauration par défaut.

    {
        "addonName": "Istio",
        "configurations": [
            {
                "key": "enableIngressGateway",
                "value": "false"
            }
        ]
    }
    

    Notez les points suivants :

    • Si vous définissez value sur "true", l'extension de cluster Istio provisionne le déploiement et le service istio-ingressgateway classiques avec le plan de contrôle.
    • Si vous définissez value sur "false", seul le plan de contrôle (istiod) est installé. Vous pouvez ensuite créer des ressources Gateway qu'Istio provisionnera automatiquement si nécessaire.
  3. Enregistrez et fermez le fichier.

Etape 3 : déploiement de l'extension de cluster Istio dans le cluster et vérification du déploiement

Déployez l'extension de cluster Istio.

  1. Déployez le module à l'aide de l'interface de ligne de commande OCI en saisissant la commande suivante :

    oci ce cluster install-addon --addon-name Istio --cluster-id <cluster-ocid> --from-json file://enableistio.json
    
  2. Vérifier que le déploiement a réussi :

    1. Entrez :

      oci ce cluster list-addons --cluster-id <cluster-ocid>
      
    2. Vérifiez que l'état de cycle de vie de l'extension de cluster Istio est ACTIVE.

  3. Vérifiez que le plan de contrôle Istio s'exécute :

    1. Entrez :

      kubectl get pods -n istio-system
      
    2. Vérifiez que le pod istiod est à l'état Running.

Etape 4 : création d'une passerelle

Créez la ressource Gateway.

  1. Créez un espace de noms (par exemple, test-gateway) en saisissant ce qui suit :
    kubectl create namespace test-gateway
  2. Créez un fichier nommé gateway.yaml avec le contenu suivant.

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: test-gateway
      annotations:
        # OCI specific annotation for Network Load Balancer (Layer 4)
        oci.oraclecloud.com/load-balancer-type: "nlb"
    spec:
      gatewayClassName: istio
      listeners:
      - name: http
        port: 80
        protocol: HTTP
        allowedRoutes:
          namespaces:
            from: Same
    

    Notez la ligne gatewayClassName: istio, qui indique au module complémentaire de cluster Istio de gérer cette passerelle.

  3. Créez le fichier Gateway en saisissant la commande suivante :

    kubectl apply -f gateway.yaml
    
  4. Obtenez l'adresse IP externe en saisissant :

    kubectl get gateway -n test-gateway
    

    Le provisionnement de l'équilibreur de charge par OCI peut prendre quelques minutes.

    Attendez que la colonne PROGRAMMED contienne True et qu'une adresse IP apparaisse dans la colonne ADDRESS.

Etape 5 : déploiement d'un exemple d'application

Déployez un exemple d'application dans le nouvel espace de noms.

  1. Déployez une application échantillon (par exemple, httpbin) en saisissant ce qui suit :

    
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/httpbin/httpbin.yaml -n test-gateway
    

Etape 6 : création d'un élément HTTPRoute

Créez un élément HTTPRoute pour diriger le trafic de Gateway vers le service httpbin.

  1. Créez un fichier nommé route.yaml avec le contenu suivant :

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: httpbin-route
      namespace: test-gateway
    spec:
      parentRefs:
      - name: my-gateway
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /get
        backendRefs:
        - name: httpbin
          port: 8000
    
  2. Créez le fichier HTTPRoute en saisissant la commande suivante :

    kubectl apply -f route.yaml
    

Etape 7 : vérification de la connectivité

Vérifiez la connectivité en envoyant une demande à l'adresse IP externe de Gateway.

  1. 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-gateway -n test-gateway -o jsonpath='{.status.addresses[0].value}')
  2. Utilisez curl pour envoyer une demande à l'adresse IP externe de la passerelle en saisissant ce qui suit :

    curl -i http://$GATEWAY_IP/get
    
    
    
  3. Confirmez que vous recevez une réponse 200 OK de l'application httpbin.

Désactivation (et suppression) de l'extension de cluster Istio

Ces instructions décrivent comment désactiver et supprimer l'extension de cluster Istio.

  1. Désactivez et enlevez l'extension à l'aide de l'interface de ligne de commande OCI en saisissant la commande suivante :

    oci ce cluster disable-addon --addon-name Istio --cluster-id <cluster-ocid> --is-remove-existing-add-on true
    
  2. (Facultatif) Enlevez les ressources d'API Gateway.

    Le processus de suppression du module ne supprime pas automatiquement les ressources Gateway ou HTTPRoute que vous avez créées. Supprimez-les manuellement pour nettoyer les équilibreurs de charge associés en saisissant ce qui suit :

    kubectl delete -f gateway.yaml
    kubectl delete -f route.yaml
  3. (Facultatif) Suppression des CRD d'API Gateway.

    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