Utilisation d'Istio en tant que module complémentaire de grappe pour mettre en oeuvre l'API du service de passerelle Kubernetes

Découvrez comment installer, configurer et utiliser le module complémentaire de grappe Istio pour mettre en oeuvre l'API de passerelle Kubernetes dans les grappes que vous avez créées à l'aide de Kubernetes Engine (OKE).

L'API de passerelle Kubernetes (API de passerelle) est la norme de nouvelle génération pour la gestion du trafic entrant et réseau dans les grappes Kubernetes, qui succède à l'API de trafic entrant. Pour plus d'informations sur l'API de passerelle, voir API de passerelle dans la documentation sur Kubernetes et la documentation sur l'API de passerelle.

Le module complémentaire de grappe 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 une grappe. Il permet la prise en charge avancée du maillage de services et de l'API de passerelle pour la gestion du trafic entrant et du trafic.

En activant le module complémentaire de grappe Istio, vous pouvez utiliser Istio comme contrôleur sous-jacent pour gérer Gateway, HTTPRoute et d'autres ressources d'API de passerelle.

L'utilisation d'Istio en tant que module complémentaire de grappe (le module complémentaire de grappe 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.
  • Utiliser et désactiver les mises à jour automatiques des versions par Oracle.
  • Gérer les personnalisations propres au module complémentaire à l'aide d'arguments de configuration de paire clé-valeur approuvés.

Ces sections décrivent comment utiliser le module complémentaire de grappe Istio pour configurer le réseau d'API de passerelle :

Préalables

Avant de configurer le module complémentaire de grappe Istio pour la prise en charge de l'API de passerelle Kubernetes :

  • Vous devez avoir un accès kubectl à la grappe créée par Kubernetes Engine.
  • Vous devez disposer de privilèges d'administrateur de grappe pour installer des définitions de ressource personnalisée (CRD) et des contrôleurs.

Configuration du module complémentaire de grappe Istio en tant que contrôleur d'API de passerelle

Étapes de haut niveau pour configurer le module complémentaire de grappe Istio en tant que contrôleur d'API de passerelle

À un niveau général, les étapes de configuration du module complémentaire de grappe Istio pour servir de contrôleur d'API Gateway sont les suivantes :

Étape 1 : Installer les CRD d'API de passerelle

Les définitions de ressources personnalisées d'API de passerelle ne sont pas installées par défaut dans les grappes que vous créez à l'aide de Kubernetes Engine. Avant d'utiliser Istio comme contrôleur d'API de passerelle, vous devez installer les CRD.

  1. Installez les CRD d'API de passerelle standard (v1.2.0) en entrant :

    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 entrant :

    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 du module complémentaire Istio prise en charge par Kubernetes Engine pour la version de Kubernetes exécutée sur la grappe (voir Comparaisons - v1.2 dans la documentation sur l'API de passerelle et Versions prises en charge du module complémentaire de grappe).

Étape 2 : Créer le fichier de configuration du module complémentaire de grappe Istio

Créez un fichier de configuration du module complémentaire de grappe 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.

    Note : Contrairement au cas d'utilisation standard du service de maillage de services, vous n'avez pas strictement besoin de définir enableIngressGateway existant, car l'API de passerelle peut provisionner dynamiquement l'infrastructure de passerelle. Toutefois, sa définition fournit un traitement de secours par défaut.

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

    Notez les points suivants :

    • Si vous réglez value à "true", le module complémentaire de grappe Istio provisionne le déploiement et le service istio-ingressgateway classiques à côté du plan de contrôle.
    • Si vous réglez value à "false", seul le plan de contrôle (istiod) est installé. Vous pouvez ensuite créer des ressources Gateway qu'Istio provisionnera automatiquement selon les besoins.
  3. Enregistrez le fichier et fermez-le.

Étape 3 : Déployer le module complémentaire de grappe Istio sur la grappe et vérifier que le déploiement a réussi

Déployez le module complémentaire de grappe Istio.

  1. Déployez le module complémentaire à l'aide de l'interface de ligne de commande OCI en entrant :

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

    1. Entrez :

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

  3. Vérifiez que le plan de contrôle Istio est en cours d'exécution :

    1. Entrez :

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

Étape 4 : Créer une passerelle

Créez la ressource Gateway.

  1. Créez un espace de noms (par exemple, test-gateway) en entrant :
    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 grappe Istio de gérer cette passerelle.

  3. Créez Gateway en entrant :

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

    kubectl get gateway -n test-gateway
    

    OCI peut prendre quelques minutes pour provisionner l'équilibreur de charge.

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

Étape 5 : déployer un exemple d'application

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

  1. Déployez un exemple d'application (par exemple, httpbin) en entrant :

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

Étape 6 : Créer un fichier HTTPRoute

Créez un 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 HTTPRoute en entrant :

    kubectl apply -f route.yaml
    

Étape 7 : Vérifier la connectivité

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

  1. Extrayez l'adresse IP publique de la passerelle et enregistrez-la en tant que variable d'environnement en entrant :

    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 entrant :

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

Désactivation (et retrait) du module complémentaire de grappe Istio

Ces instructions décrivent comment désactiver et supprimer le module complémentaire de cluster Istio.

  1. Désactivez et supprimez le module complémentaire à l'aide de l'interface de ligne de commande OCI en entrant :

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

    Le processus de suppression du module complémentaire 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 entrant :

    kubectl delete -f gateway.yaml
    kubectl delete -f route.yaml
  3. (Facultatif) Supprimez les CRD d'API de passerelle.

    Si vous n'avez plus besoin de l'API de passerelle sur cette grappe, vous pouvez supprimer les CRD en entrant :

    kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml