Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Use SDK for Go to manage ASM resources

Dernière mise à jour :Aug 11, 2026

Alibaba Cloud Service Mesh (ASM) propose des packages SDK Go qui vous permettent de créer, interroger, lister et supprimer des ressources personnalisées Istio et ASM par programmation, sans passer par la console ou l'interface CLI. Les API de ressources Istio sont disponibles à partir d'ASM 1,17 ; les API de ressources personnalisées ASM nécessitent ASM 1,24 ou une version ultérieure.

Cette rubrique détaille l'installation du SDK, l'initialisation du client et les opérations courantes sur trois types de ressources : les ressources personnalisées à l'échelle du cluster, les ressources personnalisées à l'échelle du namespace et les ressources Istio standard.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une instance ASM en cours d'exécution (version 1,17 ou ultérieure). Les ressources personnalisées ASM telles que ASMSwimLaneGroup et ASMLocalRateLimiter requièrent la version 1,24 ou une version ultérieure.

  • Le fichier kubeconfig de l'instance ASM enregistré sur votre machine locale (voir Configurer une connexion ci-dessous).

Installer le SDK

Depuis la racine de votre projet Go, ajoutez les dépendances du SDK ASM :

go get github.com/aliyun/alibabacloud-servicemesh-go-client@release-1.24.1
go get github.com/aliyun/alibabacloud-servicemesh-api@release-1.24.1

La branche release-1.24.1 correspond à la version 1,24 d'ASM. Choisissez une version adaptée à celle de votre instance ASM actuelle depuis les dépôts suivants :

Remarque : Pour les instances ASM antérieures à la version 1,17, utilisez plutôt les packages officiels de la communauté Istio :

Récupérer l'exemple de code

  1. Clonez le dépôt contenant l'exemple de code :

    git clone https://github.com/AliyunContainerService/asm-labs.git
  2. Accédez au répertoire de démonstration du SDK :

    cd clients-demo/client-go

Configurer une connexion

Le SDK s'authentifie auprès de votre instance ASM via un fichier kubeconfig. Pour exporter la configuration de connexion :

  1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

  2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez ASM Instance > Base Information.

  3. À droite de la page, cliquez sur Connection et copiez le contenu de la configuration dans $HOME/.kube/config.

Exécuter l'exemple de code

go run main.go

Sortie attendue :

I0311 16:39:14.367128  650926 main.go:24] successfully create rest config
I0311 16:39:14.367296  650926 main.go:31] successfully create clientset
I0311 16:39:14.367301  650926 main.go:33] run cluster scope clients demo
I0311 16:39:14.496240  650926 main.go:60] successfully create asmswimlanegroup
I0311 16:39:14.547445  650926 main.go:67] successfully get asmswimlanegroup
I0311 16:39:14.655944  650926 main.go:74] successfully list asmswimlanegroups
I0311 16:39:14.724114  650926 main.go:81] successfully delete asmswimlanegroup
I0311 16:39:14.724124  650926 main.go:36] run namespaced scope clients demo
I0311 16:39:14.779630  650926 main.go:97] successfully create asmlocalratelimiter
I0311 16:39:14.826832  650926 main.go:104] successfully get asmlocalratelimiter
I0311 16:39:14.881993  650926 main.go:111] successfully list asmlocalratelimiters
I0311 16:39:14.947009  650926 main.go:118] successfully delete asmlocalratelimiter
I0311 16:39:14.947020  650926 main.go:39] run istio resource demo
I0311 16:39:15.002439  650926 main.go:134] successfully create virtualservice
I0311 16:39:15.052896  650926 main.go:141] successfully get virtualservice
I0311 16:39:16.258057  650926 main.go:148] successfully list virtualservices
I0311 16:39:16.323547  650926 main.go:155] successfully delete virtualservice

Comprendre l'exemple de code

Chaque section ci-dessous explique une partie du fichier main.go. L'exemple illustre les opérations de création, de récupération, de liste et de suppression pour trois types de ressources, en utilisant deux clientsets distincts.

Initialiser le client

Chargez le fichier kubeconfig et créez deux clientsets : l'un pour les ressources personnalisées ASM et l'autre pour les ressources Istio.

Charger le kubeconfig et construire la configuration REST :

kubeconfigPath := os.Getenv("HOME") + "/.kube/config"
cfg, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath)
if err != nil {
  klog.Errorf("failed to create rest config, err: %+v", err)
  os.Exit(1)
}
klog.Info("successfully create rest config")

Créer le clientset ASM pour les ressources personnalisées telles que ASMSwimLaneGroup et ASMLocalRateLimiter :

clientset, err := asmversionedclient.NewForConfig(cfg)
if err != nil {
  klog.Errorf("failed to create clientset, err: %+v", err)
  os.Exit(1)
}
klog.Info("successfully create asm clientset")

Créer le clientset Istio pour les ressources Istio standard telles que VirtualService :

istioclientset, err := istioversionedclient.NewForConfig(cfg)
if err != nil {
  klog.Errorf("failed to create istio clientset, err: %+v", err)
  os.Exit(1)
}
klog.Info("successfully create istio clientset")

Gérer les ressources à l'échelle du cluster

Les ressources à l'échelle du cluster existent globalement et ne sont pas liées à un namespace. Cet exemple crée, récupère, liste et supprime une ressource ASMSwimLaneGroup en utilisant clientset.IstioV1().ASMSwimLaneGroups() :

func runClusterScopeDemo(clientset *asmversionedclient.Clientset) {
	// Deserialize the YAML definition into an ASMSwimLaneGroup object
	asmswimlanegroup := &asmv1.ASMSwimLaneGroup{}
	err := yaml.Unmarshal([]byte(swimlanegroupYaml), &asmswimlanegroup)
	if err != nil {
		klog.Errorf("failed to unmarshal yaml bytes, err: %+v", err)
		os.Exit(1)
	}

	// Create the resource in the cluster
	_, err = clientset.IstioV1().ASMSwimLaneGroups().Create(context.TODO(), asmswimlanegroup, metav1.CreateOptions{})
	if err != nil {
		klog.Errorf("failed to create asmswimlanegroup, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully create asmswimlanegroup")

	// Get the resource by name
	_, err = clientset.IstioV1().ASMSwimLaneGroups().Get(context.TODO(), asmswimlanegroup.Name, metav1.GetOptions{})
	if err != nil {
		klog.Errorf("failed to get asmswimlanegroup, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully get asmswimlanegroup")

	// List all ASMSwimLaneGroup resources
	_, err = clientset.IstioV1().ASMSwimLaneGroups().List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		klog.Errorf("failed to list asmswimlanegroups, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully list asmswimlanegroups")

	// Delete the resource by name
	err = clientset.IstioV1().ASMSwimLaneGroups().Delete(context.TODO(), asmswimlanegroup.Name, metav1.DeleteOptions{})
	if err != nil {
		klog.Errorf("failed to delete asmswimlanegroup, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully delete asmswimlanegroup")
}

Gérer les ressources à l'échelle du namespace

Les ressources à l'échelle du namespace nécessitent un paramètre de namespace dans chaque appel d'API. Cet exemple crée, récupère, liste et supprime une ressource ASMLocalRateLimiter en utilisant clientset.IstioV1().ASMLocalRateLimiters(namespace) :

func runNamespacedScopeDemo(clientset *asmversionedclient.Clientset) {
	// Deserialize the YAML definition into an ASMLocalRateLimiter object
	asmlocalratelimiter := &asmv1.ASMLocalRateLimiter{}
	err := yaml.Unmarshal([]byte(localratelimiterYaml), &asmlocalratelimiter)
	if err != nil {
		klog.Errorf("failed to unmarshal yaml bytes, err: %+v", err)
		os.Exit(1)
	}

	// Create the resource in the specified namespace
	_, err = clientset.IstioV1().ASMLocalRateLimiters(asmlocalratelimiter.Namespace).Create(context.TODO(), asmlocalratelimiter, metav1.CreateOptions{})
	if err != nil {
		klog.Errorf("failed to create asmlocalratelimiter, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully create asmlocalratelimiter")

	// Get the resource by name within the namespace
	_, err = clientset.IstioV1().ASMLocalRateLimiters(asmlocalratelimiter.Namespace).Get(context.TODO(), asmlocalratelimiter.Name, metav1.GetOptions{})
	if err != nil {
		klog.Errorf("failed to get asmlocalratelimiter, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully get asmlocalratelimiter")

	// List all ASMLocalRateLimiter resources in the namespace
	_, err = clientset.IstioV1().ASMLocalRateLimiters(asmlocalratelimiter.Namespace).List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		klog.Errorf("failed to list asmlocalratelimiters, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully list asmlocalratelimiters")

	// Delete the resource by name
	err = clientset.IstioV1().ASMLocalRateLimiters(asmlocalratelimiter.Namespace).Delete(context.TODO(), asmlocalratelimiter.Name, metav1.DeleteOptions{})
	if err != nil {
		klog.Errorf("failed to delete asmlocalratelimiter, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully delete asmlocalratelimiter")
}

Gérer les ressources Istio

Les ressources Istio standard telles que VirtualService utilisent un clientset distinct, initialisé avec istioversionedclient.NewForConfig. Cet exemple crée, récupère, liste et supprime une ressource VirtualService en utilisant clientset.NetworkingV1().VirtualServices(namespace) :

func runIstioResourceDemo(clientset *istioversionedclient.Clientset) {
	// Deserialize the YAML definition into a VirtualService object
	vs := &networkingv1.VirtualService{}
	err := yaml.Unmarshal([]byte(virtualserviceYaml), &vs)
	if err != nil {
		klog.Errorf("failed to unmarshal yaml bytes, err: %+v", err)
		os.Exit(1)
	}

	// Create the VirtualService in the specified namespace
	_, err = clientset.NetworkingV1().VirtualServices(vs.Namespace).Create(context.TODO(), vs, metav1.CreateOptions{})
	if err != nil {
		klog.Errorf("failed to create virtualservice, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully create virtualservice")

	// Get the VirtualService by name
	_, err = clientset.NetworkingV1().VirtualServices(vs.Namespace).Get(context.TODO(), vs.Name, metav1.GetOptions{})
	if err != nil {
		klog.Errorf("failed to get virtualservice, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully get virtualservice")

	// List all VirtualServices in the namespace
	_, err = clientset.NetworkingV1().VirtualServices(vs.Namespace).List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		klog.Errorf("failed to list virtualservices, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully list virtualservices")

	// Delete the VirtualService by name
	err = clientset.NetworkingV1().VirtualServices(vs.Namespace).Delete(context.TODO(), vs.Name, metav1.DeleteOptions{})
	if err != nil {
		klog.Errorf("failed to delete virtualservice, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("successfully delete virtualservice")
}

Comparaison des types de ressources

Aspect À l'échelle du cluster À l'échelle du namespace Ressources Istio
Exemple ASMSwimLaneGroup ASMLocalRateLimiter VirtualService
Clientset asmversionedclient asmversionedclient istioversionedclient
Groupe d'API IstioV1() IstioV1() NetworkingV1()
Paramètre de namespace Non requis Requis Requis
Version minimale d'ASM 1,24 1,24 1,17