https://linuxacademy.com/guide/11630-internal-port-forwarding-on-linux-using-the-firewall/提到
curl http://metadata/computeMetadata/v1/instance/attributes/cluster-name -H "Metadata-Flavor: Google"
(来自集群内)或
kubectl run curl --rm --restart=Never -it --image=appropriate/curl -- -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster-name
(从集群外部),可用于检索集群名称。可行。
是否可以使用k8s client-go
库以编程方式执行相同的操作?也许使用RESTClient()?我已经尝试过,但是一直得到the server could not find the requested resource
。
更新
我想做的是从运行在本地计算机或k8s群集中的应用程序中获取cluster-name
。 k8s client-go
允许通过How to get Kubernetes cluster name from K8s API或in cluster身份验证来初始化clientset
。
上面提到的两个命令是可以实现的。我想知道client-go
库中是否有一种方法可以实现相同的目的,而不必根据服务从何处运行kubectl
或curl
。
答案 0 :(得分:1)
您要查找的数据(集群名称)在GCP级别可用。名称本身是GKE内的资源,而不是Kubernetes。这意味着无法使用client-go获得此特定信息。 因此,为了获取此数据,可以使用旨在与GCP进行交互的Google Cloud Client Libraries for Go。
作为起点,您可以查阅此document。
首先,您必须下载container
软件包:
➜ go get google.golang.org/api/container/v1
在启动代码之前,您将经过身份验证以获取数据: Google非常good document如何实现这一目标。
基本上,您有generate个ServiceAccount
密钥,并将其传递到GOOGLE_APPLICATION_CREDENTIALS
环境中:
➜ export GOOGLE_APPLICATION_CREDENTIALS=sakey.json
关于所需的信息,您可以在this example之后获取群集信息(包括名称)。
完成此操作后,您可以像这样启动应用程序:
➜ go run main.go -project <google_project_name> -zone us-central1-a
结果将是有关集群的信息:
Cluster "tom" (RUNNING) master_version: v1.14.10-gke.17 -> Pool "default-pool" (RUNNING) machineType=n1-standard-2 node_version=v1.14.10-gke.17 autoscaling=false%
另外,值得一提的是,如果您运行以下命令:
curl http://metadata/computeMetadata/v1/instance/attributes/cluster-name -H "Metadata-Flavor: Google"
您还正在与GCP API进行交互,并且只要它在GCE机器/ GKE群集中运行,就可以未经身份验证。这提供了自动身份验证。
您可以在Google的Storing and retrieving instance metadata文档下阅读有关此内容的更多信息。
最后,使用Cloud Client Libraries进行此操作的一大优势是,它可以在部署的Pod中外部(只要经过身份验证)或内部Pod中启动。
让我知道是否有帮助。
答案 1 :(得分:0)
如果您在GKE中运行,则可以通过实例属性获取集群名称:https://pkg.go.dev/cloud.google.com/go/compute/metadata#InstanceAttributeValue
更具体地说,以下应该为您提供群集名称:
metadata.InstanceAttributeValue("cluster-name")
Thomas共享的example列出了项目中的所有集群,如果您只想查询托管您的Pod的GKE集群的名称,这可能不会很有帮助。