Para cualquier ejemplo, el cliente se conecta al clúster de kubernetes con el archivo kubeconfig, pero no quiero hacer eso. Creé una cuenta de servicio, ahora tengo un token de ServiceAccount, ¿cómo conectarme al clúster de kubernetes con este token fuera del clúster de kubernetes?
package main import ( "flag" "k8s.io/client-go/tools/clientcmd" "log" "k8s.io/client-go/kubernetes" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "fmt" ) var clientset *kubernetes.Clientset func main() { k8sconfig := flag.String("k8sconfig","./k8sconfig","kubernetes config file path") flag.Parse() config , err := clientcmd.BuildConfigFromFlags("",*k8sconfig) if err != nil { log.Println(err) } clientset , err = kubernetes.NewForConfig(config) if err != nil { log.Fatalln(err) } else { fmt.Println("connect k8s success") } pods,err := clientset.CoreV1().Pods("").List(metav1.ListOptions{}) if err != nil { log.Println(err.Error()) } }El cliente-go ya tiene autenticación incorporada tanto en la autenticación en el clúster (para usarse desde un pod con una cuenta de servicio) como fuera de la autenticación en el clúster (para usarse desde fuera del clúster, por ejemplo, para el desarrollo local)
El cliente-go tiene ejemplos de ambos:
El ejemplo en clúster es bastante corto:
// creates the in-cluster config config, err := rest.InClusterConfig() if err != nil { panic(err.Error()) } // creates the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } Debe importar "k8s.io/client-go/rest"