4

我有两个集群,配置文件存储在.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它工作正常。

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

4

1 回答 1

6

您需要使用各自的凭据分隔每个集群的AUTHINFOcontext.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对客户端( )和服务器(kubernetes master)之间的版本不匹配有限制kubectl,因此在正确的上下文中运行命令并不意味着运行正确的客户端版本。

为了克服这个:

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

我还推荐以下阅读:

于 2020-11-04T17:01:49.127 回答