Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Gérer les ressources Istio avec le SDK Java

Dernière mise à jour :Aug 31, 2026

En intégrant un client SDK spécifique à un langage dans votre application, vous pouvez gérer les ressources Istio directement depuis votre code. Cette rubrique utilise Java 11 et le SDK fabric8io/istio-client 6.0.0-RC1 pour illustrer la création et la gestion programmatique des ressources Istio.

Prérequis

Préparatifs

Installer les dépendances

Ajoutez la dépendance suivante au fichier de configuration Maven pom.xml.

<dependencies>
  <dependency>
    <groupId>io.fabric8</groupId>
    <artifactId>istio-client</artifactId>
    <version>6.0.0-RC1</version>
  </dependency>
</dependencies>

Configurer la connexion

  1. Connectez-vous à la console ASM.

  2. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

  3. Sur la page Mesh Management, repérez l'instance ASM à configurer. Cliquez sur le nom de l'instance ASM ou sur Manage dans la colonne Actions.

  4. Dans le volet de navigation de gauche de la page des détails de l'instance, cliquez sur Base Information, puis sur Connection à droite de la page.

  5. Dans le panneau Connection, copiez le contenu du fichier vers le chemin $HOME/.kube/config.

Remarque

Par défaut, la connexion utilise le fichier kubeconfig système, qui correspond à new DefaultIstioClient() dans les exemples de code. Pour utiliser un fichier kubeconfig spécifique, initialisez le client avec Config.fromKubeconfig, comme indiqué dans la section Créer une règle de passerelle.

Générer les fichiers de configuration

Enregistrez les fichiers virtualService.yaml et gateway.yaml que vous avez créés sur la page Gérer les ressources Istio par programmation dans le dossier de ressources statiques de votre projet.

Remarque

Pour les projets Maven, le dossier par défaut est src/main/resources.

Créer un service virtuel

Lorsque vous utilisez le client Java istio-client pour créer une ressource Istio, deux approches s'offrent à vous. Ces deux méthodes s'appliquent à tout type de ressource Istio.

  • Fichier YAML : chargez la définition de la ressource depuis un fichier .yaml. Privilégiez cette approche pour séparer les définitions de ressources de votre code ou pour réutiliser des manifests existants.

  • Chaînage de méthodes : construisez la ressource entièrement dans le code. Cette approche est recommandée lorsque vous souhaitez assembler la ressource par programmation. Les exemples suivants illustrent la création d'un service virtuel selon chaque méthode.

Méthode 1 : Créer un service virtuel à l'aide d'un fichier YAML

L'exemple suivant charge la définition de la ressource depuis virtualService.yaml et crée le service virtuel :

import java.io.FileReader;
import java.io.IOException;

import io.fabric8.istio.api.networking.v1beta1.VirtualService;
import io.fabric8.istio.client.DefaultIstioClient;
import io.fabric8.istio.client.IstioClient;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.utils.IOHelpers;

public class VirtualServiceExample {
    public static void main( String[] args ) {
        IstioClient istioClient = new DefaultIstioClient();
        final String NAMESPACE = "default"; // The namespace in which the resource is created.
        VirtualService virtualService = istioClient.v1beta1().virtualServices().load(
            VirtualServiceExample.class.getResourceAsStream("/virtualService.yaml")
            ).get();
        istioClient.v1beta1().virtualServices().inNamespace(NAMESPACE).resource(virtualService).create();
        printAllVirtualServices(istioClient);
        istioClient.close();
    }

    // Print all VirtualServices in the mesh.
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

La méthode printAllVirtualServices affiche tous les services virtuels du maillage. Vérifiez que le service virtuel que vous avez créé apparaît bien dans la sortie.

Méthode 2 : Créer un service virtuel par chaînage de méthodes

Le client istio-client prend en charge le chaînage de méthodes, ce qui permet de créer un service virtuel entièrement via le code.

import io.fabric8.istio.api.networking.v1beta1.VirtualServiceBuilder;
import io.fabric8.istio.client.DefaultIstioClient;
import io.fabric8.istio.client.IstioClient;

public class VirtualServiceChainingExample {
    public static void main(String[] args) {
        IstioClient istioClient = new DefaultIstioClient();
        final String NAMESPACE = "default";
        istioClient.v1beta1().virtualServices().inNamespace(NAMESPACE).resource(
            new VirtualServiceBuilder()
            .withNewMetadata()
            .withName("bookinfo")
            .endMetadata()
            .withNewSpec()
                .addToHosts("*")
                .addToGateways("bookinfo-gateway")
                .addNewHttp()
                    .addNewMatch().withNewUri().withNewStringMatchExactType("/productpage").endUri().endMatch()
                    .addNewMatch().withNewUri().withNewStringMatchPrefixType("/static").endUri().endMatch()
                    .addNewMatch().withNewUri().withNewStringMatchExactType("/login").endUri().endMatch()
                    .addNewMatch().withNewUri().withNewStringMatchExactType("/logout").endUri().endMatch()
                    .addNewMatch().withNewUri().withNewStringMatchPrefixType("/api/v1/products").endUri().endMatch()
                    .addNewRoute()
                        .withNewDestination()
                            .withHost("productpage")
                            .withNewPort()
                                .withNumber(9080)
                            .endPort()
                        .endDestination()
                    .endRoute()
                .endHttp()
            .endSpec()
            .build()
            ).create();
        printAllVirtualServices(istioClient);
        istioClient.close();
    }

    // Print all VirtualServices in the mesh.
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

La méthode printAllVirtualServices affiche tous les services virtuels du maillage. Assurez-vous que le service virtuel bookinfo figure bien dans la sortie.

Créer une règle de passerelle

Cet exemple établit une connexion à l'aide d'un fichier kubeconfig spécifique, comme décrit dans la section Configurer la connexion, et crée la règle de passerelle définie dans gateway.yaml au sein du namespace par défaut. La règle de passerelle est créée à partir d'un fichier YAML, tandis que la section Méthode 2 : Créer un service virtuel par chaînage de méthodes présente l'approche équivalente basée sur le chaînage de méthodes.

import java.io.FileReader;
import java.io.IOException;

import io.fabric8.istio.api.networking.v1beta1.Gateway;
import io.fabric8.istio.client.DefaultIstioClient;
import io.fabric8.istio.client.IstioClient;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.utils.IOHelpers;

public class GateWayExample {
    public static void main(String[] args) throws IOException {
        // Read the kubeconfig connection configuration file.
        String kubeconfigContents = null;
        FileReader reader = new FileReader("{path to kube config file}"); // Replace the content in {} with the actual path to the kubeconfig file.
        kubeconfigContents = IOHelpers.readFully(reader);
        Config config = Config.fromKubeconfig(null, kubeconfigContents, null);

        IstioClient istioClient = new DefaultIstioClient(config);
        final String NAMESPACE = "default"; // The namespace in which the resource is created.
        Gateway gateway = istioClient.v1beta1().gateways().load(
            GateWayExample.class.getResourceAsStream("/gateway.yaml")
        ).get();
        istioClient.v1beta1().gateways().inNamespace(NAMESPACE).resource(gateway).create();
        printAllGateways(istioClient);
        istioClient.close();
    }

    // Print all Gateways in the mesh.
    static void printAllGateways(IstioClient istioClient) {
        istioClient.v1beta1().gateways().list().getItems().forEach(System.out::println);
    }
}

La méthode printAllGateways affiche toutes les passerelles du maillage. Vérifiez que la règle de passerelle que vous avez créée apparaît bien dans la sortie.

Accéder à l'application Bookinfo

Une fois le service virtuel et la règle de passerelle créés, ouvrez http://{IP address of the ingress gateway service}/productpage dans votre navigateur pour visualiser l'application Bookinfo.