我有几个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/config
。gcloud
将使用当前配置的帐户,因此最终会保存错误的访问令牌。
有一个解决方法,但它并不理想。如果您需要经常添加或删除集群,则尤其繁琐。
修改.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