Назад | Перейти на главную страницу

GCP: доступ к службе Kubernetes с вычислительной виртуальной машины Google

У меня есть определенные в Kubernetes службы, к которым я хотел бы получить доступ с виртуальной машины Google Compute в той же сети, что и мой кластер k8s.

Я видел из эта ссылка что можно спросить API-сервер k8s, как получить доступ к службе; Проблема в том, что у меня проблемы с подключением к серверу API:

vm2:~$ kubectl proxy &
[2] 1230
vm2:~$ curl http://localhost:8001/api/v1/namespaces/default/services/proxy/proxy
I1102 09:53:25.861513    1104 logs.go:41] http: proxy error: dial tcp [::1]:8080: getsockopt: connection refused

И я вижу, что у него неправильный адрес сервера API:

vm2:~$ kubectl cluster-info
Kubernetes master is running at http://localhost:8080
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Адрес моего сервера API на самом деле 109.x.x.x. Указание сервера API вручную дает мне правильный сервер, но утверждает, что у него нет ресурсов:

vm2:~$ kubectl -s 109.x.x.x describe pods
the server doesn't have a resource type "pods"

И я получаю это для каждого типа / команды ресурса. Если я запускаю то же самое со своего ноутбука (аутентифицированного как я), я вижу гораздо больше информации о модулях, развертываниях и службах, которые выполняет кластер.

Как мне получить доступ к моей виртуальной машине для работы, используя учетную запись службы моей виртуальной машины?

Изменить: забыл упомянуть, что я подтвердил, что мой gcloud учетная запись службы правильно поступает на виртуальную машину:

vm2:~$ gcloud auth list
                  Credentialed Accounts
ACTIVE  ACCOUNT
*       proxy-service-account@xxxxxxxxxxxxxxx.iam.gserviceaccount.com
To set the active account, run:
    $ gcloud config set account `ACCOUNT`

Нашел. Как я и думал, это было связано с аутентификацией.

Мне нужно было сделать это:

gcloud container clusters get-credentials <cluster name> --zone <zone> --project <gcp project>

После этого, kubectl config view имел гораздо больше выходных данных, включая правильный адрес сервера API и токены доступа, и теперь kubectl работает как положено.