Невозможно получить доступ к кластеру Kubernetes с помощью клиента go, когда установлен CLOUDSDK_CONFIG - PullRequest
0 голосов
/ 08 октября 2018

У меня есть кластер kubernetes на 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?

=== UPDATE ===

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

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

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

1 Ответ

0 голосов
/ 09 октября 2018

Вам необходимо создать файл ~/.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.

...