全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Gunakan SDK untuk Go untuk mengelola sumber daya ASM

更新时间:Jun 28, 2025

ASM menyediakan SDK dan definisi API untuk sumber daya Istio mulai dari versi 1.17, serta mendukung konfigurasi Resource kustom ASM mulai dari versi 1.24. Topik ini menjelaskan cara menggunakan ASM SDK untuk Go dalam mengelola sumber daya ASM.

Impor ASM SDK untuk Go ke dalam proyek Anda

Jalankan perintah berikut di direktori root proyek untuk mengimpor ASM SDK untuk Go ke dalam proyek Anda:

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

Di mana release-1.24.1 adalah cabang repositori yang sesuai dengan versi 1.24. Anda dapat memilih versi berdasarkan versi ASM saat ini:

Jika versi instance ASM Anda lebih awal dari 1.17, peroleh dependensi dari repositori komunitas Istio:

Persiapan

Kode contoh berikut menunjukkan cara menggunakan SDK untuk Go dalam mengelola sumber daya ASM.

Memperoleh kode

  1. Salin repositori kode asm-labs ke komputer lokal Anda.

    git clone https://github.com/AliyunContainerService/asm-labs.git
  2. Pergi ke direktori tempat kode contoh disimpan.

    cd clients-demo/client-go

Konfigurasikan koneksi

  1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih ASM Instance > Base Information.

  3. Di sisi kanan halaman, klik Connection dan salin konten konfigurasi ke jalur $HOME/.kube/config.

Jalankan kode contoh

Jalankan kode contoh SDK untuk Go.

go run main.go

Output yang Diharapkan:

I0311 16:39:14.367128  650926 main.go:24] berhasil membuat rest config
I0311 16:39:14.367296  650926 main.go:31] berhasil membuat clientset
I0311 16:39:14.367301  650926 main.go:33] menjalankan demo klien cakupan kluster
I0311 16:39:14.496240  650926 main.go:60] berhasil membuat asmswimlanegroup
I0311 16:39:14.547445  650926 main.go:67] berhasil mendapatkan asmswimlanegroup
I0311 16:39:14.655944  650926 main.go:74] berhasil mencantumkan asmswimlanegroups
I0311 16:39:14.724114  650926 main.go:81] berhasil menghapus asmswimlanegroup
I0311 16:39:14.724124  650926 main.go:36] menjalankan demo klien cakupan namespace
I0311 16:39:14.779630  650926 main.go:97] berhasil membuat asmlocalratelimiter
I0311 16:39:14.826832  650926 main.go:104] berhasil mendapatkan asmlocalratelimiter
I0311 16:39:14.881993  650926 main.go:111] berhasil mencantumkan asmlocalratelimiters
I0311 16:39:14.947009  650926 main.go:118] berhasil menghapus asmlocalratelimiter
I0311 16:39:14.947020  650926 main.go:39] menjalankan demo sumber daya istio
I0311 16:39:15.002439  650926 main.go:134] berhasil membuat virtualservice
I0311 16:39:15.052896  650926 main.go:141] berhasil mendapatkan virtualservice
I0311 16:39:16.258057  650926 main.go:148] berhasil mencantumkan virtualservices
I0311 16:39:16.323547  650926 main.go:155] berhasil menghapus virtualservice

Penjelasan kode

Berikut ini menjelaskan kode main.go.

Baca file Kubeconfig dan inisialisasi clientset

Baca konfigurasi ke dalam file kubeconfig lingkungan saat ini. Jalur default untuk menyimpan konfigurasi adalah ${HOME}/.kube/config.

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

Inisialisasi clientset untuk sumber daya ASM.

clientset, err := asmversionedclient.NewForConfig(cfg)
if err != nil {
  klog.Errorf("gagal membuat clientset, err: %+v", err)
  os.Exit(1)
}
klog.Info("berhasil membuat asm clientset")

Inisialisasi clientset untuk sumber daya Istio.

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

Kelola sumber daya tingkat kluster

Buat, kueri, dan hapus sumber daya tingkat kluster ASMSwimLaneGroup.

func runClusterScopeDemo(clientset *asmversionedclient.Clientset) {
	asmswimlanegroup := &asmv1.ASMSwimLaneGroup{}
	err := yaml.Unmarshal([]byte(swimlanegroupYaml), &asmswimlanegroup)
	if err != nil {
		klog.Errorf("gagal membongkar byte yaml, err: %+v", err)
		os.Exit(1)
	}

	_, err = clientset.IstioV1().ASMSwimLaneGroups().Create(context.TODO(), asmswimlanegroup, metav1.CreateOptions{})
	if err != nil {
		klog.Errorf("gagal membuat asmswimlanegroup, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil membuat asmswimlanegroup")

	_, err = clientset.IstioV1().ASMSwimLaneGroups().Get(context.TODO(), asmswimlanegroup.Name, metav1.GetOptions{})
	if err != nil {
		klog.Errorf("gagal mendapatkan asmswimlanegroup, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil mendapatkan asmswimlanegroup")

	_, err = clientset.IstioV1().ASMSwimLaneGroups().List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		klog.Errorf("gagal mencantumkan asmswimlanegroups, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil mencantumkan asmswimlanegroups")

	err = clientset.IstioV1().ASMSwimLaneGroups().Delete(context.TODO(), asmswimlanegroup.Name, metav1.DeleteOptions{})
	if err != nil {
		klog.Errorf("gagal menghapus asmswimlanegroup, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil menghapus asmswimlanegroup")
}

Kelola sumber daya tingkat namespace

Buat, kueri, dan hapus sumber daya tingkat namespace ASMLocalRateLimiter.

func runNamespacedScopeDemo(clientset *asmversionedclient.Clientset) {
	asmlocalratelimiter := &asmv1.ASMLocalRateLimiter{}
	err := yaml.Unmarshal([]byte(localratelimiterYaml), &asmlocalratelimiter)
	if err != nil {
		klog.Errorf("gagal membongkar byte yaml, err: %+v", err)
		os.Exit(1)
	}

	_, err = clientset.IstioV1().ASMLocalRateLimiters(asmlocalratelimiter.Namespace).Create(context.TODO(), asmlocalratelimiter, metav1.CreateOptions{})
	if err != nil {
		klog.Errorf("gagal membuat asmlocalratelimiter, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil membuat asmlocalratelimiter")

	_, err = clientset.IstioV1().ASMLocalRateLimiters(asmlocalratelimiter.Namespace).Get(context.TODO(), asmlocalratelimiter.Name, metav1.GetOptions{})
	if err != nil {
		klog.Errorf("gagal mendapatkan asmlocalratelimiter, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil mendapatkan asmlocalratelimiter")

	_, err = clientset.IstioV1().ASMLocalRateLimiters(asmlocalratelimiter.Namespace).List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		klog.Errorf("gagal mencantumkan asmlocalratelimiters, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil mencantumkan asmlocalratelimiters")

	err = clientset.IstioV1().ASMLocalRateLimiters(asmlocalratelimiter.Namespace).Delete(context.TODO(), asmlocalratelimiter.Name, metav1.DeleteOptions{})
	if err != nil {
		klog.Errorf("gagal menghapus asmlocalratelimiter, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil menghapus asmlocalratelimiter")
}

Kelola sumber daya Istio

Buat, kueri, dan hapus sumber daya tingkat namespace VirtualService.

func runIstioResourceDemo(clientset *istioversionedclient.Clientset) {
	vs := &networkingv1.VirtualService{}
	err := yaml.Unmarshal([]byte(virtualserviceYaml), &vs)
	if err != nil {
		klog.Errorf("gagal membongkar byte yaml, err: %+v", err)
		os.Exit(1)
	}

	_, err = clientset.NetworkingV1().VirtualServices(vs.Namespace).Create(context.TODO(), vs, metav1.CreateOptions{})
	if err != nil {
		klog.Errorf("gagal membuat virtualservice, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil membuat virtualservice")

	_, err = clientset.NetworkingV1().VirtualServices(vs.Namespace).Get(context.TODO(), vs.Name, metav1.GetOptions{})
	if err != nil {
		klog.Errorf("gagal mendapatkan virtualservice, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil mendapatkan virtualservice")

	_, err = clientset.NetworkingV1().VirtualServices(vs.Namespace).List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		klog.Errorf("gagal mencantumkan virtualservices, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil mencantumkan virtualservices")

	err = clientset.NetworkingV1().VirtualServices(vs.Namespace).Delete(context.TODO(), vs.Name, metav1.DeleteOptions{})
	if err != nil {
		klog.Errorf("gagal menghapus virtualservice, err: %+v", err)
		os.Exit(1)
	}
	klog.Info("berhasil menghapus virtualservice")
}