我的kubernetes集群中有一个秘密,其中包含另一个集群的kubecconfig。我希望能够连接到集群在我的Go代码。
我只找到了通过kubecconfig FILE创建客户端的方法,而不是使用kubecconfig字符串。
这是我到目前为止的代码:
// Read secret
kubeconfigSecret := &corev1.Secret{}
err := apiReader.Get(context.Background(), client.ObjectKey{Namespace: namespace, Name: name}, kubeconfigSecret)
if err != nil {
// error handling
}
kubeconfigBytes, ok := kubeconfigSecret.Data["kubeconfig"]
if !ok {
// error handling
}
kubeconfigString := string(kubeconfigBytes)
有几种方法可以达到这个目的,例如:
content := `a kubeconfig string`
tmpfile, err := os.CreateTemp("", "kubeconfig")
if err != nil {
...
}
defer os.Remove(tmpfile.Name())
if err := os.WriteFile(tmpfile.Name(), []byte(content), 0666); err != nil {
...
}
config, err := clientcmd.BuildConfigFromFlags("", tmpfile.Name())
if err != nil {
...
}
clientset,err := kubernetes.NewForConfig(config)
另一种方法是使用clientcmd.RESTConfigFromKubeConfig
:
content := `a kubeconfig string`
config, err := clientcmd.RESTConfigFromKubeConfig([]byte(content))
if err != nil {
...
}
clientset, err := kubernetes.NewForConfig(config)