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 リソースを管理する方法を示しています。
コードを取得する
asm-labs コードリポジトリをローカルコンピュータにコピーします。
git clone https://github.com/AliyunContainerService/asm-labs.git
サンプルコードが保存されているディレクトリに移動します。
cd clients-demo/client-go
接続を構成する
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
ページの右側にある [接続] をクリックし、構成の内容を
$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)