我在GKE集群中有一个容器,我希望它能够与另一个GKE集群的Kubernetes API通信,以列出那里的一些资源。
如果在单独的容器中运行以下命令为我代理连接,则效果良好:
gcloud container clusters get-credentials MY_CLUSTER --region MY_REGION --project MY_PROJECT; kubectl --context MY_CONTEXT proxy --port=8001 --v=10
但是这需要我运行一个单独的容器,由于gcloud cli
的大小超过1GB。
理想情况下,我希望直接从我的主容器与另一个GKE集群进行通信。但是我不知道如何找出IP地址并设置连接所需的身份验证。
我看到了一些问题:
- 如何使用Kubernetes API服务器上的Java客户端库对GKE集群进行身份验证
- 是否有与"gcloud容器集群get-credential"等同的golang sdk
但是如果可能的话,我仍然不清楚这是否/如何与Java库一起工作。
理想情况下我会这样写。
var info = gkeClient.GetClusterInformation(...);
var auth = gkeClient.getAuthentication(info);
...
// using the io.fabric8.kubernetes.client.ConfigBuilder / DefaultKubernetesClient
var config = new ConfigBuilder().withMasterUrl(inf.url())
.withNamespace(null)
// certificate or other autentication mechanishm
.build();
return new DefaultKubernetesClient(config);
这有意义吗,这样的事情可能发生吗?
在不使用gcloud cli的情况下,有多种方法可以连接到您的集群,因为您试图从云中的另一个集群访问集群,因此可以使用工作负载身份验证机制。工作负载标识是在Google Kubernetes Engine (GKE)上运行的工作负载以安全和可管理的方式访问Google Cloud服务的推荐方式。更多信息请参考本官方文件。在这里,他们详细介绍了一步一步地配置工作负载标识的过程,并提供了代码库的参考链接。
这是根据google官方文档中提供的信息起草的。