Невозможно получить доступ к кластеру Kubernetes с помощью клиента go, когда установлен CLOUDSDK_CONFIG

У меня есть кластер кубернетов на GKE. Даже после правильной установки KUBECONFIG = "/ tmp / kubeconfigxvz", когда я выполняю kubectl get pods, команда не выполняется со следующей ошибкой

bash-4.3# kubectl get pods
Unable to connect to the server: error executing access token command 
"/google-cloud-sdk/bin/gcloud config config-helper --format=json": err=exit 
status 1 output= stderr=ERROR: (gcloud.config.config-helper) You do not 
currently have an active account selected.
Please run:

  $ gcloud auth login

to obtain new credentials, or if you have already logged in with a
different account:

  $ gcloud config set account ACCOUNT

to select an already authenticated account to use.

Когда я устанавливаю CLOUDSDK_CONFIG=/tmp/customdir, команда начинает работать.

Как я могу добиться того же с помощью клиента go?

=== ОБНОВЛЕНИЕ ===

При создании клиента go я передаю этой функции правильный указатель файла clientcmd.BuildConfigFromFlags("", *tmpKubeConfigFile), где tmpKubeConfigFile указывает на /tmp/kubeconfigxvz. Но я думаю, что этого недостаточно, go-клиенту также нужна дополнительная информация из каталога CLOUDSDK_CONFIG, я думаю, ему нужна информация о сеансе или учетные данные или что-то в этом роде.

Можно ли передать этот CLOUDSDK_CONFIG тоже при создании go-клиента?

BuildConfigFromFlags, который принимает на входе указатель на файл kubeconfig и возвращает объект config, который может быть передан в kubernetes.NewForConfig(config), который создает клиента. Возможно ли или существует ли аналогичная функция для передачи CLOUDSDK_CONFIG и возврата go-client или создания конфигурации?


person Mradul    schedule 08.10.2018    source источник


Ответы (1)


По сути, вам нужно создать ~/.kube/config файл для прямого доступа к вашему кластеру GKE.

Вы можете увидеть в этом примере клиента Go, что он берет конфигурацию из ~/.kube/config

Конфигурация GKE будет выглядеть примерно так:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: [REDACTED]
    server: https://x.x.x.x
  name: gke_project_us-central1-a_your-first-cluster-1
contexts:
- context:
    cluster: gke_project_us-central1-a_your-first-cluster-1
    user: gke_project_us-central1-a_your-first-cluster-1
  name: gke_project_us-central1-a_your-first-cluster-1
current-context: gke_project_us-central1-a_your-first-cluster-1
kind: Config
preferences: {}
users:
- name: gke_project_us-central1-a_your-first-cluster-1
  user:
    auth-provider:
      config:
        cmd-args: config config-helper --format=json
        cmd-path: /google/google-cloud-sdk/bin/gcloud
        expiry-key: '{.credential.token_expiry}'
        token-key: '{.credential.access_token}'
      name: gcp

Вам нужно будет изменить раздел пользователей на что-то вроде:

- name: myuser
  user:
     token: [REDACTED]

Пользователь - это сервисная учетная запись с токеном. Если вы хотите добавить этого пользователя для управления всем в вашем кластере, вы можете ClusterRoleBind использовать его в роли admin.

Для получения дополнительной информации о RBAC, ServiceAccounts, Roles, ClusterRoles и Users вы можете увидеть здесь.

Кстати, к сожалению, GKE не дает вам доступа к главному узлу, поэтому вы не можете создать аутентификацию сертификата, потому что у вас нет доступа к файлу CA.key.

person Rico    schedule 08.10.2018