宣佈 Istio client-go

取得對 Istio 資源的程式化存取權限。

2019 年 11 月 14 日 | 作者:Neeraj Poddar - Aspen Mesh

我們很高興宣佈 Istio client go 儲存庫的初始版本,這讓開發人員能夠在 Kubernetes 環境中取得對 Istio API 的程式化存取權限。此儲存庫中產生的 Kubernetes informer 和客戶端集合,使開發人員可以輕鬆地為所有 Istio 自定義資源定義 (CRD) 建立控制器並執行建立、讀取、更新和刪除 (CRUD) 操作。

這是許多 Istio 使用者強烈要求的功能,從 Aspen MeshKnative 專案產生的客戶端的功能請求中可以明顯看出。如果您目前正在使用上述客戶端之一,您可以輕鬆切換到使用 Istio client go,如下所示:

import (
  ...
  - versionedclient "github.com/aspenmesh/istio-client-go/pkg/client/clientset/versioned"
  + versionedclient "istio.io/client-go/pkg/clientset/versioned"
)

由於產生的客戶端集合在功能上是等效的,因此只需切換導入的客戶端程式庫就足以使用新產生的程式庫。

如何使用 client-go

Istio client go 儲存庫遵循與 Istio API 儲存庫相同的分支策略,因為客戶端儲存庫依賴於 API 定義。如果您想使用穩定的客戶端集合,您可以使用 client go 儲存庫中的發布分支或標記版本。使用客戶端集合與使用 Kubernetes client go 非常相似,以下是一個使用客戶端列出傳遞命名空間中所有 Istio 虛擬服務的快速範例:

package main

import (
  "log"
  "os"

  metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  "k8s.io/client-go/tools/clientcmd"

  versionedclient "istio.io/client-go/pkg/clientset/versioned"
)

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)
  }
  // Print all VirtualServices
  vsList, err := ic.NetworkingV1alpha3().VirtualServices(namespace).List(metav1.ListOptions{})
  if err != nil {
    log.Fatalf("Failed to get VirtualService in %s namespace: %s", namespace, err)
  }
  for i := range vsList.Items {
    vs := vsList.Items[i]
    log.Printf("Index: %d VirtualService Hosts: %+v\n", i, vs.Spec.GetHosts())
  }
}

您可以在這裡找到更深入的範例。

為產生 Istio client-go 而建立的實用工具

如果您想知道為什麼花了這麼長時間或為什麼難以產生這個客戶端集合,那麼本節就是為您準備的。在 Istio 中,我們使用 protobuf 規格來編寫 API,然後使用 protobuf 工具鏈將其轉換為 Go 定義。如果您嘗試從 protobuf 產生的 API 產生 Kubernetes 客戶端集合,您可能會面臨三個主要挑戰:

我希望新發佈的客戶端程式庫能夠讓使用者為 Istio API 建立更多整合和控制器,並且開發人員可以使用上述工具從 Proto API 產生 Kubernetes 客戶端集合。

分享此文章