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

j2cgzkjk  于 2023-03-29  发布在  Kubernetes
关注(0)|答案(3)|浏览(181)

我有两个群集,配置文件存储在.kube中。

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,它可以正常工作。
我的问题是我是否正确地导出了配置文件,或者我应该做更多的事情。

wkftcu5l

wkftcu5l1#

您需要将每个群集的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

您可以在以下文章中找到更多有用的提示:
Using different kubectl versions with multiple Kubernetes clusters
当您使用多个Kubernetes集群时,很容易混淆上下文并在错误的集群中运行kubectl。除此之外,Kubernetes对客户端(kubectl)和服务器(kubernetes master)之间的版本不匹配有限制,因此在正确的上下文中运行命令并不意味着运行正确的客户端版本。
为了克服这一点:

  • 使用asdf管理多个kubectl版本
  • KUBECONFIG环境变量设置为在多个kubeconfig文件之间更改
  • 使用kube-ps1跟踪当前上下文/名称空间
  • 使用kubectx and kubens在集群/名称空间之间快速切换
  • 使用别名将它们组合在一起

我还建议阅读以下内容:

xriantvc

xriantvc2#

我写了一个脚本,可以轻松切换kubeconfig和namespace。希望对你有帮助。

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

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

jgwigjjp

jgwigjjp3#

来自Eduardo Baitello的帖子已经非常棒了,但我仍然想添加一些可能有助于处理serveral kubeconfigs的东西。
如果你在大型环境中工作,你通常需要处理多个kubeconfig。
添加到.bashrc/.zshrc(etc):

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

这将加载所有可以在~/. kube下找到的kubeconfig。随着-maxdepth的增加,你也可以索引子文件夹。它们在每个SHELL中都可用,并且可以由kubectl或kubectx访问,而无需从另一个kubeconfig进行新的导出。
或者,您可以调整以下别名:

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

这将-如果你有一个新的kubeconfig -重新加载它,而不必重新启动你的SHELL。
现在,您可以使用“kubectl”-“kubectl config get-context”显示配置并使用“kubectl config set-context”切换它们,或者使用kubctx(https://github.com/ahmetb/kubectx)。kubectx还为您提供了使用kubens的优势,它允许您永久切换命名空间。

相关问题