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 :
- Configuration du module complémentaire Istio Cluster en tant que contrôleur API Gateway
- Désactivation (et suppression) de l'extension de cluster Istio
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
kubectlau 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
- Etape 2 : création du fichier de configuration du module complémentaire Istio cluster
- Etape 3 : déploiement de l'extension de cluster Istio dans le cluster et vérification du déploiement
- Etape 4 : création d'une passerelle
- Etape 5 : déploiement d'un exemple d'application
- Etape 6 : création d'un élément HTTPRoute
- Etape 7 : 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 Istio en tant que contrôleur API de passerelle, vous devez installer les CRD.
-
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 -
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.
- 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.
-
Créez un fichier JSON (par exemple,
enableistio.json). -
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
enableIngressGatewayhé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
valuesur"true", l'extension de cluster Istio provisionne le déploiement et le serviceistio-ingressgatewayclassiques avec le plan de contrôle. - Si vous définissez
valuesur"false", seul le plan de contrôle (istiod) est installé. Vous pouvez ensuite créer des ressourcesGatewayqu'Istio provisionnera automatiquement si nécessaire.
- Si vous définissez
-
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.
-
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 -
Vérifier que le déploiement a réussi :
-
Entrez :
oci ce cluster list-addons --cluster-id <cluster-ocid> -
Vérifiez que l'état de cycle de vie de l'extension de cluster Istio est
ACTIVE.
-
-
Vérifiez que le plan de contrôle Istio s'exécute :
-
Entrez :
kubectl get pods -n istio-system -
Vérifiez que le pod
istiodest à l'étatRunning.
-
Etape 4 : création d'une passerelle
Créez la ressource Gateway.
- Créez un espace de noms (par exemple, test-gateway) en saisissant ce qui suit :
kubectl create namespace test-gateway -
Créez un fichier nommé
gateway.yamlavec 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: SameNotez la ligne
gatewayClassName: istio, qui indique au module complémentaire de cluster Istio de gérer cette passerelle. -
Créez le fichier
Gatewayen saisissant la commande suivante :kubectl apply -f gateway.yaml -
Obtenez l'adresse IP externe en saisissant :
kubectl get gateway -n test-gatewayLe 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 5 : déploiement d'un exemple d'application
Déployez un exemple d'application dans le nouvel espace de noms.
-
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.
-
Créez un fichier nommé
route.yamlavec 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 -
Créez le fichier
HTTPRouteen 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.
-
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}') -
Utilisez
curlpour envoyer une demande à l'adresse IP externe de la passerelle en saisissant ce qui suit :curl -i http://$GATEWAY_IP/get -
Confirmez que vous recevez une réponse
200 OKde 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.
-
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 -
(Facultatif) Enlevez les ressources d'API Gateway.
Le processus de suppression du module ne supprime pas automatiquement les ressources
GatewayouHTTPRouteque vous avez créées. Supprimez-les manuellement pour nettoyer les équilibreurs de charge associés en saisissant ce qui suit :kubectl delete -f gateway.yamlkubectl delete -f route.yaml -
(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