Авторизация в Kubernetes, только после запуска hello-сервера - PullRequest
0 голосов
/ 17 апреля 2019

Я работал над проектом Python с целью взаимодействия с Kubernetes.Одна из проблем, с которыми я столкнулся, - это процесс аутентификации.Подобно этому вопросу, я получаю сообщение об ошибке

google.auth.exceptions.DefaultCredentialsError: Не удалось автоматически определить учетные данные.Пожалуйста, установите GOOGLE_APPLICATION_CREDENTIALS или явно создайте учетные данные и перезапустите приложение.Для получения дополнительной информации, пожалуйста, см. https://cloud.google.com/docs/authentication/getting-started

Я понимаю, что это, вероятно, связано с тем, что я использую pycharm.Однако, когда я запускаю его из терминала, я получаю эту ошибку:

kubernetes.client.rest.ApiException: (403) Причина: запрещенные заголовки ответа HTTP: HTTPHeaderDict ({'Audit-Id': 'XXXXXXXXXXX', 'Content-Type': 'application / json', 'X-Content-Type-Options': 'nosniff', 'Date': 'XXXXXXXXXXXXXXXX', 'Content-Length': 'XXX'})Тело HTTP-ответа: {"kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "deployments.extensions запрещено: User \"XXXXXXXXXXXXXXXXXXX \ "не удается создать deployments.extensions в пространстве имен \" default \ ": обязательно \" container.deployments.create \ "разрешение.", "Причина": "запрещено", "детали": {"группа": "расширения"," kind ":" deployments "}," code ": 403}

Однако, когда я изменяю свой код с:

os.system(f"gcloud container clusters get-credentials {cluster_name} --zone {zone} --project {project}")

на

os.system(f"gcloud container clusters get-credentials {cluster_name} --zone {zone} --project {project}")
os.system("kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080")
os.system("kubectl delete deployments hello-server")

Я могу авторизоваться, а все остальные функции работают точно так, как и должно быть.Я не понимаю, почему это так.Я думаю, что это, вероятно, признак того, что что-то не так, и хотел бы исправить это, прежде чем продолжить.Кто-нибудь знает, что здесь происходит и как это исправить?

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Из вашего описания ошибки я вижу, что у вас нет проблемы с аутентификацией, но авторизация в Kubernetes.Это две разные вещи.

Отправленное вами сообщение об ошибке следует интерпретировать следующим образом:
" У вас нет прав на выполнение действия" создать "над объектом" развертывания ". "

Механизм, блокирующий доступ пользователя к определенной операции на ресурсах кластера, называется RBAC - управление доступом на основе ролей (RBAC), которое встроено в GKE и обычно включено в Kubernetes 1.6 и более поздних версиях.

Как решить вашу проблему:

  1. Предоставьте вашей учетной записи пользователя GCP / учетной записи службы GCP соответствующую роль.

Самый простой способ - использовать один из предопределенных Облачные роли AIM для кластеров Kubernetes , например, "role / container.admin", которые будут автоматически сопоставлены с ClusterRole (cluster-admin).Пожалуйста, помните, что нужно применять «принцип наименьших привилегий», особенно для производственных кластеров.

Если вы создали учетную запись службы GCP на шаге 1

  • , загрузите ее ключ в формате JSON

  • Укажите учетные данные для аутентификациик вашему коду приложения, установив переменную окружения GOOGLE_APPLICATION_CREDENTIALS

Я устанавливаю его прямо в моем приложении python:

import os
os.environ ["GOOGLE_APPLICATION_CREDENTIALS"] = 'gke-admin-svc-key.json'

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

authenticationInfo: {
   principalEmail:  "<id_of_your_svc_account>"    
  }
  authorizationInfo: [
   0: {
    granted:  true     
    permission:  "io.k8s.core.v1.pods.list"     
    resource:  "core/v1/pods"     
   }
  ]
0 голосов
/ 17 апреля 2019

Как насчет использования клиента kubernetes для python?

https://github.com/kubernetes-client/python

Проверьте этот пример для удаленного доступа к кластеру:

https://github.com/kubernetes-client/python/blob/master/examples/remote_cluster.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...