有没有更好的工作流程来切换gcloud和kubectl的帐户?



我有几个gcloud帐户,因此有不同的kubernetes上下文。

我发现自己经常使用以下方法在这些之间切换:

$ gcloud config configurations activate ACCOUNT
$ kubectl config set-context CONTEXT

或者

$ gcloud config configurations activate ACCOUNT
$ kubectx CONTEXT

(有关 kubectx,请参见 https://github.com/ahmetb/kubectx(

这感觉就像很多打字。 此外,如果您切换gcloud帐户,它似乎也可以直观地切换上下文(每个k8s上下文映射到gcloud帐户(。

我很想看看其他人的工作流程。 还是有更有效的 还是传统的工作流程?


我需要同时切换帐户和上下文的原因是每个 gcloud 帐户都有一个单独的电子邮件地址。 因此,如果我不同时切换,我将收到此错误:

$ kubectl get pods          
Error from server (Forbidden): pods is forbidden: User 
"myemail@email.com" cannot list resource "pods" in API group "" in 
the namespace "default": Required "container.pods.list" permission.

也许有一种方法可以设置 gcloud 以允许每个帐户中的两个用户? 否则,我将不得不切换帐户和上下文。

我想最快的切换方法是在您的 ~/.bashrc 或 ~/.zshrc 文件中创建别名:

alias k8s.acct1="gcloud config configurations activate acct1; kubectx context1"
alias k8s.acct2="gcloud config configurations activate acct2; kubectx context2"

另一个非常好的选择是在每个控制台窗口中设置 KUBECONFIG 环境变量(您甚至可以构建别名快捷方式来为每个会话快速设置它(。

因此,在一个控制台窗口中运行:

export KUBECONFIG=~/acct1-kubeconfig

在另一个窗口中运行:

export KUBECONFIG=~/acct2-kubeconfig

然后假设你有一个OpenShift集群,你做同样的事情:

export KUBECONFIG=~/os-kubeconfig

然后,每个控制台会话都可以访问每个相应的账户和集群。

发生这种情况的原因是 kubectx 使用gcloud的配置助手来获取您帐户的访问令牌,然后将其保存到.kube/configgcloud将使用当前配置的帐户,因此最终会保存错误的访问令牌。

有一个解决方法,但它并不理想。如果您需要经常添加或删除集群,则尤其繁琐。

修改.kube/config以向文件中的每个cmd-args行添加适当的--account whatever@domain.com。例如:

- name: cluster-name-company-1
user:
auth-provider:
config:
access-token: ya29.xxx
cmd-args: config config-helper --format=json --account username@company1.com
cmd-path: /Users/username/google-cloud-sdk/bin/gcloud
expiry: "2020-05-10T15:49:33Z"
expiry-key: '{.credential.token_expiry}'
token-key: '{.credential.access_token}'
name: gcp
- name: cluster-name-company-2
user:
auth-provider:
config:
access-token: ya29.xxx
cmd-args: config config-helper --format=json --account username@company2.com
cmd-path: /Users/username/google-cloud-sdk/bin/gcloud
expiry: "2020-05-10T15:49:33Z"
expiry-key: '{.credential.token_expiry}'
token-key: '{.credential.access_token}'
name: gcp

最新更新