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.1Di 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
Salin repositori kode asm-labs ke komputer lokal Anda.
git clone https://github.com/AliyunContainerService/asm-labs.gitPergi ke direktori tempat kode contoh disimpan.
cd clients-demo/client-go
Konfigurasikan koneksi
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Pada halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih .
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.goOutput 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 virtualservicePenjelasan 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")
}