Как правильно получить доступ к нескольким кластерам Kubernetes с помощью kubectl

У меня два кластера, и файлы конфигурации хранятся в .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   

Но когда я выбираю кластер-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)

Если я экспортирую только конфигурацию для кластера-2 и попробую запустить kubectl, все будет нормально.

Мой вопрос в том, правильно ли я экспортирую файлы конфигурации или мне нужно сделать что-то еще.


person Shash    schedule 27.10.2020    source источник
comment
вы видите cluster-2 в get-contexts, так что это должно откуда-то появиться. Либо вы загружаете оба файла, либо у вас есть сведения об обоих кластерах в одном файле. У меня есть вопрос, есть ли у вас в .kube/config-cluster1 случайный раздел, который конфликтует с .kube/config-cluster2   -  person Paul Becotte    schedule 04.11.2020
comment
если возможно, прикрепите к этому вопросу оба файла kubeconfig. нам просто нужно сшить их в один файл. который отличается от того, что вы делаете (export KUBECONFIG = / home / vagrant / .kube / config-cluster1: /home/vagrant/.kube/config-cluster2)   -  person confused genius    schedule 07.11.2020


Ответы (1)


Вам необходимо разделить 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

Вы можете найти больше полезных советов в следующей статье:

Использование разных версий kubectl с несколькими кластерами Kubernetes :

Когда вы работаете с несколькими кластерами Kubernetes, легко ошибиться с контекстами и запустить kubectl в неправильном кластере. Помимо этого, в Kubernetes есть ограничения на несовпадение версий между клиентом (kubectl) и сервером (мастер кубернетов), поэтому выполнение команд в правильном контексте не означает запуск правильной версии клиента.

Чтобы преодолеть это:

  • Используйте asdf для управления несколькими kubectl версиями
  • Установите KUBECONFIG env var для переключения между несколькими kubeconfig файлами
  • Используйте kube-ps1, чтобы отслеживать текущий контекст / пространство имен
  • Используйте kubectx и kubens для быстрого переключения между кластерами / пространствами имен
  • Используйте псевдонимы, чтобы объединить их все вместе

Я также рекомендую следующие книги:

person Eduardo Baitello    schedule 04.11.2020