Go语言版本
准备工作
- 创建应用服务网格实例。
- 到云容器引擎控制台找到应用服务网格控制面部署所在的集群,创建命名空间demo。
- 获取网格控制面云容器引擎集群的kubeconfig信息,保存到本地文件中。
- 准备一个VirtualService资源,保存到vs.yaml文件中。
具体操作
使用go在default命名空间创建VirtualService资源并列举default命名空间下所有的VirtualService资源,代码示例:
package main
import (
"context"
"flag"
"gopkg.in/yaml.v2"
"istio.io/client-go/pkg/apis/networking/v1beta1"
"istio.io/client-go/pkg/clientset/versioned"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/clientcmd"
"log"
"os"
)
var (
ns = flag.String("namespace", "demo", "namespace to deploy")
vsFile = flag.String("vs", "vs.yaml", "virtual service yaml")
kubeConf = flag.String("kubeconfig", "", "kube config file")
)
func main() {
flag.Parse()
rc, err := clientcmd.BuildConfigFromFlags("", *kubeConf)
if err != nil {
panic(err)
}
clientset, err := versioned.NewForConfig(rc)
if err != nil {
panic(err)
}
bytes, err := os.ReadFile(*vsFile)
if err != nil {
panic(err)
}
vs := &v1beta1.VirtualService{}
err = yaml.Unmarshal(bytes, vs)
if err != nil {
panic(err)
}
log.Println(vs)
_, err = clientset.NetworkingV1beta1().VirtualServices(*ns).Create(context.TODO(), vs, v1.CreateOptions{})
if err != nil {
panic(err)
}
vsList, err := clientset.NetworkingV1beta1().VirtualServices(*ns).List(context.TODO(), v1.ListOptions{})
if err != nil {
panic(err)
}
for _, vsItem := range vsList.Items {
log.Println(vsItem)
}
}