我一般从 client-go 使用 kubernetes 集群进行身份验证我看到我有两个选择:
所以从clusterA访问clusterA很容易,但从clusterA访问clusterB却很容易。
我在这里有哪些选择?似乎我只是无法通过
GOOGLE_APPLICATION_CREDENTIALS
并希望 client-go 能够照顾好自己。所以我的想法:
gcloud container clusters get-credentials clusterA
和 gcloud container clusters get-credentials clusterB
BuildConfigFromFlags
在 client-go 中使用该 kube 配置文件这是正确的方法,还是有更简单的方法?我看到 token 有有效期?
更新:
看来我也可以使用
CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True gcloud beta container clusters get-credentials clusterB --zone
。这会将证书添加到我可以使用的 kube conf。但 AFAIK 这些证书不能被撤销 最佳答案
client-go 需要了解:
(如果您使用 GKE,您可以在
$HOME/.kube/config
中看到这些信息,由 gcloud container clusters get-credentials
命令填充)。我建议您:
一旦您可以在 client-go 中创建
*rest.Config
对象,client-go 将使用在 kubeconfig 文件(或您构造的内存中等效项)中指定的 auth 插件。在 gcp
auth 插件中,它知道如何检索 token 。然后,Create a Cloud IAM Service Account 并赋予它“Container Developer”角色。下载它的 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
程序的变量。
为集群 A 和 B 构造两个不同的
*rest.Config
对象。 每次过期(每 1 小时)到 Google API。
希望这可以帮助。
附言不要忘记在 Go 程序中使用
import _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
。这将加载 gcp auth 插件!关于kubernetes - 使用 client-go 访问 GKE 集群之外的 Kubernetes GKE 集群?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48400966/