我对 Go 和 Kubernetes 库 k8s.io ( https://github.com/kubernetes/client-go ) 完全陌生,并试图弄清楚如何获得特定的秘密。
我有一种观察者,可以观察Secrets
. 我正在遍历特定命名空间中的 Secretlist。那行得通,我也可以通过while循环过滤它们。但我不知道如何在这个循环中应该可用的不同命名空间中获取和搜索 Secret 。
我需要在命名空间“my-namespace”中命名为 XXX 的秘密(我知道以下行不存在,它应该只概述我正在寻找的想法)我来自 Ruby,所以我搜索了这样的东西:
var myKubeSecret = kubernetes.V1().Secrets("my-namespace").Find("XXX")
像上面那样的功能存在吗?
这就是我所拥有的:这会在命名空间“默认”中观察我的所有秘密。哪个有效。该示例取自执行类似我正在搜索的代码的代码,我现在尝试修改。:
import (
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kubeinformers "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/clientcmd"
"sigs.k8s.io/yaml"
)
// a lot of code
// ....
// ...
// ..
// .
if data, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace"); err == nil {
fmt.Println("data",data)
}
// listen for new secrets
factory := kubeinformers.NewSharedInformerFactoryWithOptions(clientsetCore, 0, kubeinformers.WithNamespace(namespace()))
informer := factory.Core().V1().Secrets().Informer()
secrets := factory.Core().V1().Secrets().Lister()
var myKubeSecret string // will hold my secret
informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(new interface{}) {
// get the secret
var cpSecret = new.(*v1.Secret).DeepCopy()
if mySecret.GetName() == "argocd-credentials" {
var cpData = *&cpSecret.Data
for k, v := range cpData {
clusterIP = kubeConfig.Clusters[0].Cluster.Server
fmt.Println("cpData k:", k, "v:", v)
switch k {
case "authToken":
fmt.Println("authToken:", v)
// ### HERE SHOULD BE THE VALUE OF A
// ### SECRET NAMED XXX in ns my-namespace
myKubeSecret = // ### should a bearerToken string
}
}
}
}
}
我希望你能明白..
如果有的话,还请告诉我import
需要哪个库。