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

问题描述

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

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

在这里,我认为首先需要做一些事情:

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

我的问题是怎么做?因为我以前从未这样做过,所以必须寻求帮助。

解决方法

这里是使用istio client-go创建istio虚拟服务的示例。在这里,我们使用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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...