gpt4 book ai didi

kubernetes - 使用 client-go 访问 GKE 集群之外的 Kubernetes GKE 集群?

转载 作者:行者123 更新时间:2023-12-04 22:55:37 26 4
gpt4 key购买 nike

  • 我有多个在 GKE 上运行的 kubernetes 集群(假设是 clusterA 和 clusterB)
  • 我想在其中一个集群中运行的应用程序中从 client-go 访问这两个集群(例如,从在 clusterA 上运行的应用程序访问 clusterB)

  • 我一般从 client-go 使用 kubernetes 集群进行身份验证我看到我有两个选择:
  • 集群内配置
  • 或来自 kube 配置文件

  • 所以从clusterA访问clusterA很容易,但从clusterA访问clusterB却很容易。

    我在这里有哪些选择?看来我就是不能通过 GOOGLE_APPLICATION_CREDENTIALS并希望 client-go 能照顾好自己。

    所以我的想法:
  • 创建专用 IAM 服务帐户
  • 通过执行 gcloud container clusters get-credentials clusterA 为两个集群创建带有 token 的 kube 配置和 gcloud container clusters get-credentials clusterB
  • 通过 BuildConfigFromFlags 在 client-go 中使用该 kube 配置文件在集群A上

  • 这是正确的方法,还是有更简单的方法?我看到 token 有有效期?

    更新:

    看来我也可以用 CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True gcloud beta container clusters get-credentials clusterB --zone .这会将证书添加到我可以使用的 kube conf。但 AFAIK 这些证书不能被撤销

    最佳答案

    client-go 需要了解:

  • 集群master的IP地址
  • 集群的 CA 证书

  • (如果您使用 GKE,您可以在 $HOME/.kube/config 中看到这些信息,由 gcloud container clusters get-credentials 命令填充)。

    我建议您:
  • 有一个 kubeconfig 文件,其中包含集群 A 和 B 的这些信息
  • 使用 GKE API 检索集群 A 和 B ( example here ) 的这些信息(您需要一个服务帐户来执行此操作,如下所述。)

  • 一旦您可以创建 *rest.Config client-go 中的对象,client-go 将使用在 kubeconfig 文件(或您构造的内存中等效项)中指定的 auth 插件。在 gcp auth 插件,它知道如何检索 token 。

    然后, Create a Cloud IAM Service Account并赋予它“容器开发者”角色。下载它的 key 。

    现在,您有两个选择:

    选项 1:您的程序使用 gcloud
    gcloud auth activate-service-account --key-file=key.json
    KUBECONFIG=a.yaml gcloud container clusters get-credentials clusterA
    KUBECONFIG=b.yaml gcloud container clusters get-credentials clusterB

    然后创建 2 个不同的 *rest.Client对象,一个创建自 a.yaml ,另一个来自 b.yaml在你的程序中。

    现在你的程序将依赖于 gcloud每次 token 到期时(每 1 小时)检索 token 的二进制文件。

    选项 2:使用 GOOGLE_APPLICATION_CREDENTIALS
  • 不要将 gcloud 安装到您的程序环境中。
  • 将您的 key.json 设置为 GOOGLE_APPLICATION_CREDENTIALS 环境
    程序的变量。
  • 找出一种获取集群 IP/CA 的方法(如上所述),以便您可以
    构造两个不同的 *rest.Config集群 A 和 B 的对象。
  • 现在您的程序将使用指定的 key 文件来获取 access_token
    每次过期(每 1 小时)到 Google API。

  • 希望这可以帮助。

    附注不要忘记 import _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"在你的 Go 程序中。这将加载 gcp auth 插件!

    关于kubernetes - 使用 client-go 访问 GKE 集群之外的 Kubernetes GKE 集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48400966/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com