gpt4 book ai didi

azure - K8S 提供 kubeconfig 作为字节数组 genericclioptions

转载 作者:行者123 更新时间:2023-12-02 05:56:08 25 4
gpt4 key购买 nike

有什么方法可以将 kubeconfig 的 bytearray 传递给 k8s 客户端的 &genericclioptions 吗?

https://pkg.go.dev/k8s.io/cli-runtime/pkg/genericclioptions

目前,genericclioptionsits 默认情况下从文件的 env/path 获取它,但我需要将其显式传递为 bytearray 作为参数,而不是引用文件或环境,有办法做到吗?

我尝试了以下方法,但不起作用:

package main

import (
"bytes"
"github.com/spf13/pflag"
"k8s.io/cli-runtime/pkg/genericclioptions"
)

func main() {
kubeconfigData := []byte("my_kubeconfig")

// create a new flag set and bind the kubeconfig flag
flags := pflag.NewFlagSet("default", pflag.ExitOnError)
kubeconfigFlag := flags.String("kubeconfig", "", "absolute path to the kubeconfig file")
flags.Parse([]string{})

// set the kubeconfig flag to the data in the byte array
*kubeconfigFlag = "-"
configOverrides := &genericclioptions.ConfigOverrides{ClusterDefaults: genericclioptions.NewClusterDefaults()}
configLoader := genericclioptions.NewConfigFlags(false).WithOverrideFlags(configOverrides)
configLoader.KubeConfig = bytes.NewBuffer(kubeconfigData)

// ...
}

有什么想法吗?

第二个TRY我还尝试了以下版本,但出现错误:加载配置文件时出错,有什么想法吗?

func main() {
// read the kubeconfig file into a byte array
kubeconfig, err := ioutil.ReadFile("./kubeconfig--pln.yaml")
if err != nil {
panic(err)
}

// create a ConfigFlags object with the kubeconfig byte array
flags := genericclioptions.NewConfigFlags(false)
*flags.KubeConfig = string(kubeconfig)
dc, err := flags.ToDiscoveryClient()
if err != nil {
fmt.Println(err)
}
fmt.Println(dc)

res, err := dc.ServerPreferredNamespacedResources()
if err != nil {
fmt.Println(res)
}

// use the flags object to create a clientset or other Kubernetes API object
// ...
}

最佳答案

您发布的代码试图将 kubeconfig 标志设置为字符串值“-”而不是字节数组。要将 kubeconfig 作为字节数组传递,您需要将 ConfigLoader 的 KubeConfig 字段设置为从字节数组创建的 bytes.Buffer。

这是代码的更新版本:

package main

import (
"bytes"
"github.com/spf13/pflag"
"k8s.io/cli-runtime/pkg/genericclioptions"
)

func main() {
kubeconfigData := []byte("my_kubeconfig")

configOverrides := &genericclioptions.ConfigOverrides{ClusterDefaults: genericclioptions.NewClusterDefaults()}
configLoader := genericclioptions.NewConfigFlags(false).WithOverrideFlags(configOverrides)
configLoader.KubeConfig = bytes.NewBuffer(kubeconfigData)

// ...
}

尝试一次上面的代码,你也可以按照这些link1 Link2 Link3 Link4

关于azure - K8S 提供 kubeconfig 作为字节数组 genericclioptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75684722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com