Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何访问第三方自定义资源定义?_Kubernetes_Istio_Operator Sdk - Fatal编程技术网

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

Kubernetes 如何访问第三方自定义资源定义?,kubernetes,istio,operator-sdk,Kubernetes,Istio,Operator Sdk,我正在开发Operator SDK。在我的操作员控制器中,我尝试创建一个Istio自定义资源——virtualservices。virtualservices的定义如下所示: kind: CustomResourceDefinition apiVersion: apiextensions.k8s.io/v1beta1 metadata: name: virtualservices.networking.istio.io 在这里,我认为有几件事必须首先做: 获取Istio API模块 在我的

我正在开发Operator SDK。在我的操作员控制器中,我尝试创建一个Istio自定义资源——virtualservices。virtualservices的定义如下所示:

kind: CustomResourceDefinition
apiVersion: apiextensions.k8s.io/v1beta1
metadata:
  name: virtualservices.networking.istio.io
在这里,我认为有几件事必须首先做:

  • 获取Istio API模块
  • 在我的控制器代码中,导入istio virtualservices包
  • 如何创建/更新virtualservice资源
  • 我的问题是怎么做?因为我以前从来没有这样做过,所以我必须寻求帮助如何做到这一点

    导入istio virtualservices包

    是的,您应该导入Istio包,每个CRD都是一个api,因此它附带了一个客户端,用于使用库以编程方式“创建”、“删除”、“更新”和“查看”

    如果您正在使用Golang,这是一个良好的开端:

    以及api客户端:

    下面是一个使用istio创建istio虚拟服务的示例。这里我们使用
    istio.io/api/networking/v1alpha3
    istio.io/client go/pkg/api/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{})
    }