すべてのプロダクト
Search
ドキュメントセンター

:Go 用 SDK を使用して ASM リソースを管理する

最終更新日:Apr 18, 2025

ASM は、バージョン 1.17 以降、Istio リソース用の SDK と API 定義を提供し、バージョン 1.24 以降、ASM カスタムリソースの構成をサポートしています。このトピックでは、Go 用 ASM SDK を使用して ASM リソースを管理する方法について説明します。

Go 用 ASM SDK をプロジェクトにインポートする

プロジェクトのルートディレクトリで次のコマンドを実行して、Go 用 ASM SDK をプロジェクトにインポートします。

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

release-1.24.1 はリポジトリのブランチで、バージョン 1.24 に対応しています。現在の ASM バージョンに基づいてバージョンを選択できます。

ASM インスタンスのバージョンが 1.17 より前の場合は、Istio コミュニティリポジトリから依存関係を取得します。

準備

次のサンプルコードは、Go 用 SDK を使用して ASM リソースを管理する方法を示しています。

コードを取得する

  1. asm-labs コードリポジトリをローカルコンピュータにコピーします。

    git clone https://github.com/AliyunContainerService/asm-labs.git
  2. サンプルコードが保存されているディレクトリに移動します。

    cd clients-demo/client-go

接続を構成する

  1. ASM コンソール にログインします。左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[ASM インスタンス] > [基本情報] を選択します。

  3. ページの右側にある [接続] をクリックし、構成の内容を $HOME/.kube/config パスにコピーします。

サンプルコードを実行する

Go 用 SDK のサンプルコードを実行します。

go run main.go

期待される出力:

I0311 16:39:14.367128  650926 main.go:24] successfully create rest config  // rest 構成の作成に成功しました
I0311 16:39:14.367296  650926 main.go:31] successfully create clientset // 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 // asmswimlanegroup の作成に成功しました
I0311 16:39:14.547445  650926 main.go:67] successfully get asmswimlanegroup // asmswimlanegroup の取得に成功しました
I0311 16:39:14.655944  650926 main.go:74] successfully list asmswimlanegroups // asmswimlanegroups の一覧表示に成功しました
I0311 16:39:14.724114  650926 main.go:81] successfully delete asmswimlanegroup // 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 // asmlocalratelimiter の作成に成功しました
I0311 16:39:14.826832  650926 main.go:104] successfully get asmlocalratelimiter // asmlocalratelimiter の取得に成功しました
I0311 16:39:14.881993  650926 main.go:111] successfully list asmlocalratelimiters // asmlocalratelimiters の一覧表示に成功しました
I0311 16:39:14.947009  650926 main.go:118] successfully delete asmlocalratelimiter // asmlocalratelimiter の削除に成功しました
I0311 16:39:14.947020  650926 main.go:39] run istio resource demo // istio リソースのデモを実行します
I0311 16:39:15.002439  650926 main.go:134] successfully create virtualservice // virtualservice の作成に成功しました
I0311 16:39:15.052896  650926 main.go:141] successfully get virtualservice // virtualservice の取得に成功しました
I0311 16:39:16.258057  650926 main.go:148] successfully list virtualservices // virtualservices の一覧表示に成功しました
I0311 16:39:16.323547  650926 main.go:155] successfully delete virtualservice // virtualservice の削除に成功しました

コードの説明

main.go コードについて説明します。

Kubeconfig ファイルを読み取り、clientset を初期化する

現在の環境の kubeconfig ファイルに構成を読み取ります。構成を保存するデフォルトパスは ${HOME}/.kube/config です。

kubeconfigPath := os.Getenv("HOME") + "/.kube/config"
cfg, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath)
if err != nil {
  klog.Errorf("failed to create rest config, err: %+v", err) // rest 構成の作成に失敗しました
  os.Exit(1)
}
klog.Info("successfully create rest config") // rest 構成の作成に成功しました

ASM リソースの clientset を初期化します。

clientset, err := asmversionedclient.NewForConfig(cfg)
if err != nil {
  klog.Errorf("failed to create clientset, err: %+v", err) // clientset の作成に失敗しました
  os.Exit(1)
}
klog.Info("successfully create asm clientset") // asm clientset の作成に成功しました

Istio リソースの clientset を初期化します。

istioclientset, err := istioversionedclient.NewForConfig(cfg)
if err != nil {
  klog.Errorf("failed to create istio clientset, err: %+v", err) // istio clientset の作成に失敗しました
  os.Exit(1)
}
klog.Info("successfully create istio clientset") // istio clientset の作成に成功しました

クラスタレベルのリソースを管理する

クラスタレベルのリソース ASMSwimLaneGroup を作成、クエリ、および削除します。

// ... (Code remains in English as per instruction 12)

名前空間レベルのリソースを管理する

名前空間レベルのリソース ASMLocalRateLimiter を作成、クエリ、および削除します。

// ... (Code remains in English as per instruction 12)

Istio リソースを管理する

名前空間レベルのリソース VirtualService を作成、クエリ、および削除します。

// ... (Code remains in English as per instruction 12)