Как получить доступ к стороннему пользовательскому определению ресурса?

Я работаю над Opersator-SDK. В своем операторском контроллере я пытаюсь создать пользовательский ресурс Istio - виртуальные сервисы. Определение виртуальных сервисов выглядит следующим образом:

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

Здесь я думаю, что сначала нужно сделать несколько вещей:

  1. Получить модуль Istio API
  2. В моем коде контроллера импортируйте пакет виртуальных сервисов istio
  3. Как создать / обновить ресурс виртуального сервиса

У меня вопрос, как их делать? Потому что я никогда не делал этого раньше, поэтому мне нужно попросить помощи, как это сделать.


person Joe    schedule 14.09.2020    source источник


Ответы (2)


Вот пример создания виртуальной службы istio с использованием istio client-go. Здесь мы используем istio.io/api/networking/v1alpha3 и istio.io/client-go/pkg/apis/networking/v1alpha3 для создания VirtualService настраиваемой спецификации ресурса. После этого использование istio.io/client-go/pkg/clientset/versioned для фактической отправки этой спецификации на сервер API Kubernetes.

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{})
}
person Arghya Sadhu    schedule 14.09.2020

импорт пакета виртуальных сервисов istio

Да, вам следует импортировать пакет Istio, и каждый CRD является api, поэтому он поставляется с клиентом для создания, удаления, обновления и просмотра программным способом с использованием библиотеки.

Если вы используете Golang, это хорошее начало: https://github.com/istio/client-go

И клиент api: https://github.com/istio/client-go/tree/master/pkg

person Jonas    schedule 14.09.2020