如何访问第三方自定义资源定义



我正在开发Opersator SDK。在我的操作员控制器中,我尝试创建一个Istio自定义资源——虚拟服务。虚拟服务的定义如下:

kind: CustomResourceDefinition
apiVersion: apiextensions.k8s.io/v1beta1
metadata:
name: virtualservices.networking.istio.io

在这里,我认为有几件事必须首先做:

  1. 获取Istio API模块
  2. 在我的控制器代码中,导入istio-virtualservices包
  3. 如何创建/更新虚拟服务资源

我的问题是如何做到这一点?因为我以前从来没有这样做过,所以不得不寻求帮助如何做到这一点。

下面是一个使用istio-client go创建istio-virtual服务的示例。这里我们使用istio.io/api/networking/v1alpha3istio.io/client-go/pkg/apis/networking/v1alpha3来创建VirtualService自定义资源规范。然后使用istio.io/client-go/pkg/clientset/versioned将该规范实际发送到kubernetes API服务器。

package main
import (
"context"
"log"
"os"
v1alpha3Spec "istio.io/api/networking/v1alpha3"
"istio.io/client-go/pkg/apis/networking/v1alpha3"
versionedclient "istio.io/client-go/pkg/clientset/versioned"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/clientcmd"
)
func main() {
kubeconfig := os.Getenv("KUBECONFIG")
namespace := os.Getenv("NAMESPACE")
if len(kubeconfig) == 0 || len(namespace) == 0 {
log.Fatalf("Environment variables KUBECONFIG and NAMESPACE need to be set")
}
restConfig, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
log.Fatalf("Failed to create k8s rest client: %s", err)
}
ic, err := versionedclient.NewForConfig(restConfig)
if err != nil {
log.Fatalf("Failed to create istio client: %s", err)
}
var host []string
host[0] = "abc.com"
virtualServiceCrd := &v1alpha3.VirtualService{
TypeMeta: metav1.TypeMeta{
APIVersion: "networking.istio.io/v1alpha3",
Kind:       "Virtualservice",
},
ObjectMeta: metav1.ObjectMeta{
Name: "default",
},
Spec: v1alpha3Spec.VirtualService{
Hosts: host,
},
}
ic.NetworkingV1alpha3().VirtualServices(namespace).Create(context.TODO(), virtualServiceCrd, metav1.CreateOptions{})
}

导入istio-virtualservices包

是的,您应该导入Istio包,并且每个CRD都是一个api,因此它附带了一个";创建"删除"更新";以及";观看";以编程方式使用库。

如果您正在使用Golang,这是一个良好的开端:https://github.com/istio/client-go

以及api客户端:https://github.com/istio/client-go/tree/master/pkg

相关内容

最新更新