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

时间:2018-01-23 11:46:37

标签: kubernetes google-kubernetes-engine

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

我一般用于从客户端使用kubernetes集群进行身份验证 - 我发现我有两个选择:

  • InCluster config
  • 或来自kube配置文件

因此很容易从clusterA访问clusterA,但不能从clusterA访问clusterB。

我有什么选择?似乎我无法通过GOOGLE_APPLICATION_CREDENTIALS并希望client-go能够自行处理。

所以我的想法:

  • 创建专用的IAM服务帐户
  • 通过执行gcloud container clusters get-credentials clusterAgcloud container clusters get-credentials clusterB
  • 为两个群集创建包含令牌的kube配置
  • 通过clusterA
  • 上的BuildConfigFromFlags在客户端中使用该kube配置文件

这是正确的方法,还是有更简单的方法?我看到令牌有一个到期日期?

更新

似乎我也可以使用CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True gcloud beta container clusters get-credentials clusterB --zone。哪个会为我可以使用的kube conf添加证书。但是AFAIK那些证书不能被撤销

1 个答案:

答案 0 :(得分:6)

client-go需要了解:

  1. 群集主服务器的IP地址
  2. 群集的CA证书
  3. (如果你正在使用GKE,你可以在$HOME/.kube/config中看到这些信息,填充gcloud container clusters get-credentials命令。

    我建议您:

    1. 拥有一个包含群集A&的这些信息的kubeconfig文件。乙
    2. 使用GKE API检索群集A&的这些信息。 B(example here)(您需要一个服务帐户来执行此操作,如下所述。)
    3. 一旦你可以在client-go中创建一个*rest.Config对象,client-go将使用在kubeconfig文件中指定的auth插件(或者你构造的内存中的等价物)。在gcp auth插件中,它知道如何检索令牌。

      然后,Create a Cloud IAM Service Account并赋予它“Container Developer”角色。下载密钥。

      现在,您有两种选择:

      选项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二进制文件来在每次令牌到期时(每1小时)检索一次令牌。

      选项2:使用GOOGLE_APPLICATION_CREDENTIALS

      1. 不要将gcloud安装到您的程序环境中。
      2. 将您的key.json设置为GOOGLE_APPLICATION_CREDENTIALS环境 你的程序的变量。
      3. 找出一种获取集群IP / CA的方法(如上所述),以便您可以 为群集A和群体构建两个不同的*rest.Config个对象。乙
      4. 现在您的程序将使用指定的密钥文件来获取access_token 每次到期时(每1小时)到Google API。
      5. 希望这有帮助。

        P.S。不要忘记你的Go计划中的import _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"。这会加载gcp auth插件!