如何使用kubectl正确访问多个kubernetes集群



我有两个集群,配置文件存储在.kube中。我正在将KUBECONFIG导出为以下

export KUBECONFIG=/home/vagrant/.kube/config-cluster1:/home/vagrant/.kube/config-cluster2

检查上下文

kubectl config get-contexts
CURRENT   NAME        CLUSTER     AUTHINFO           NAMESPACE
*         cluster-1   cluster-1   kubernetes-admin   
          cluster-2   cluster-2   kubernetes-admin   

但是当我选择cluster-2作为我当前的上下文时,我会得到一个错误

kubectl config get-contexts
CURRENT   NAME        CLUSTER     AUTHINFO           NAMESPACE
*         cluster-1   cluster-1   kubernetes-admin   
          cluster-2   cluster-2   kubernetes-admin   
kubectl config use-context cluster-2
Switched to context "cluster-2".

kubectl get pods -A
error: You must be logged in to the server (Unauthorized)

如果我只导出cluster-2的配置并尝试运行kubectl,它可以正常工作。

我的问题是,我是正确地导出了配置文件,还是应该做更多的事情。

您需要将每个集群的AUTHINFO(配置文件中的context.user(与相应的凭据分开。

例如:

apiVersion: v1
clusters:
- cluster:
    server: https://192.168.10.190:6443
  name: cluster-1
- cluster:
    server: https://192.168.99.101:8443
  name: cluster-2
contexts:
- context:
    cluster: cluster-1
    user: kubernetes-admin-1
  name: cluster-1
- context:
    cluster: cluster-2
    user: kubernetes-admin-2
  name: cluster-2
kind: Config
preferences: {}
users:
- name: kubernetes-admin-1
  user:
    client-certificate: /home/user/.minikube/credential-for-cluster-1.crt
    client-key: /home/user/.minikube/credential-for-cluster-1.key
- name: kubernetes-admin-2
  user:
    client-certificate: /home/user/.minikube/credential-for-cluster-2.crt
    client-key: /home/user/.minikube/credential-for-cluster-2.key

您可以在以下文章中找到更多有用的提示:

在多个Kubernetes集群中使用不同的kubectl版本:

当您使用多个Kubernetes集群时搞砸上下文并在错误的集群中运行kubectl。超过Kubernetes对客户端(kubectl(和服务器(kubernetes master(,因此运行命令在正确的上下文中并不意味着运行正确的客户端版本。

要克服这一点:

  • 使用asdf管理多个kubectl版本
  • KUBECONFIG env var设置为在多个kubeconfig文件之间更改
  • 使用kube-ps1跟踪您当前的上下文/命名空间
  • 使用kubectxkubens在集群/命名空间之间快速更改
  • 使用别名将它们组合在一起

我还建议阅读以下内容:

  • Ahmet Alp Balkan掌握KUBECONFIG文件(谷歌工程师(
  • Henning Jacobs的Zalando如何管理140多个Kubernetes集群(Zalando Tech(

我写了一个脚本来轻松切换kubeconfig和namespace。希望它能帮助你。

. k-use -k <kubeconfig> -n <namespace>

https://github.com/kingonion/k-use

Eduardo Baitello的帖子已经非常棒了,但我仍然想添加一些可能有助于处理服务器kubeconfig的内容。

如果您在大型环境中工作,通常需要处理几个kubeconfig。

添加到.bashrc/.zshrc(etc(:

export KUBECONFIG="~/.kube/config:$(find ~/.kube/kubeconfig* -type f -maxdepth 1 | tr 'n' ':')" 

这将加载所有可以在~/.kube.With下找到的kubeconfigmaxdepth的增加也可以为子文件夹建立索引。它们在每个SHELL中都可用,并且可以由kubectl或kubectx访问,而无需从另一个kubeconfig进行新的导出。

或者,您可以调整以下别名:

alias kubeconfig-reload="export KUBECONFIG="~/.kube/config:$(find ~/.kube/kubeconfig* -type f -maxdepth 1 | tr 'n' ':')""

如果你有一个新的kubeconfig,这将重新加载它,而不必重新启动你的SHELL。

现在,您可以用";kubectl"-"kubectl配置获取上下文";并用";kubectl配置集上下文";或使用kubctx(https://github.com/ahmetb/kubectx)。kubectx还为您提供了使用kubens的优势,它允许您永久切换命名空间。

相关内容

  • 没有找到相关文章

最新更新