通过client-go访问GKE集群之外的Kubernetes GKE集群?

ger*_*lus 4 kubernetes google-kubernetes-engine

  • 我在GKE上运行了多个kubernetes集群(比如clusterA和clusterB)
  • 我想从客户端访问那些群集之一中运行的应用程序中的两个群集(例如,从在clusterA上运行的应用程序访问clusterB)

我一般会从客户端转到kubernetes集群进行身份验证,我看到我有两个选择:

  • InCluster配置
  • 或从kube配置文件

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

我在这里有什么选择?看来我只是无法过关GOOGLE_APPLICATION_CREDENTIALS,希望客户去照顾自己。

所以我的想法是:

  • 创建专用的IAM服务帐户
  • 通过做创建令牌两个集群KUBE配置gcloud container clusters get-credentials clusterAgcloud container clusters get-credentials clusterB
  • 通过使用该KUBE配置文件的客户去BuildConfigFromFlags上clusteA在

这是正确的方法,还是有更简单的方法?我看到代币有有效期吗?

更新:

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

Ahm*_*gle 9

客户需要了解以下内容:

  1. 集群主机的IP地址
  2. 群集的CA证书

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

我建议您:

  1. 有一个kubeconfig文件,其中包含有关群集A和B的这些信息
  2. 使用GKE API检索群集A和B的这些信息(此处示例)(您将需要一个服务帐户来执行此操作,如下所述。)

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

然后,创建一个Cloud IAM服务帐户,并为其授予“容器开发人员”角色。下载其密钥。

现在,您有两个选择:

选项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
Run Code Online (Sandbox Code Playgroud)

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

现在,您的程序将在gcloud每次令牌过期时(每1小时)依靠二进制文件来检索令牌。

选项2:使用GOOGLE_APPLICATION_CREDENTIALS

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

希望这可以帮助。

PS别忘了import _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"在您的Go程序中。这将加载gcp auth插件!