Создание файла kubeconfig и аутентификация для google cloud

# #kubernetes #google-cloud-platform #google-kubernetes-engine

Вопрос:

У меня есть кластер Кубернетеса. Внутри моего кластера находится приложение Django, которое должно подключиться к моему кластеру Kubernetes на GKE. При запуске Django (в моем файле Dockerfile) я аутентифицируюсь в Google Cloud с помощью:

 gcloud auth activate-service-account $GKE_SERVICE_ACCOUNT_NAME --key-file=$GOOGLE_APPLICATION_CREDENTIALS
gcloud config set project $GKE_PROJECT_NAME
gcloud container clusters get-credentials $GKE_CLUSTER_NAME --zone $GKE_ZONE
 

Я не совсем уверен, нужно ли мне делать это каждый раз, когда запускается мой контейнер Django, и я не уверен, что понимаю, как работает аутентификация в Google Cloud. Могу ли я, возможно, просто сгенерировать свой файл Kubeconfig, сохранить его в безопасном месте и использовать его все время вместо аутентификации?
Другими словами, достаточно ли файла Kubeconfig для подключения к моему кластеру GKE?

Комментарии:

1. Как вы подключаетесь к GKE из своего приложения?

2. С помощью библиотеки kubernetes для python. ( github.com/kubernetes-client/python ), используя функцию load_kube_config() внутри моей службы python.

3. Вы можете сохранить файл kubeconfig в секрете и смонтировать его в качестве тома в своем модуле

Ответ №1:

Если ваша служба запущена в модуле внутри кластера GKE, к которому вы хотите подключиться, используйте учетную запись службы Kubernetes для аутентификации.

  1. Создайте учетную запись службы Kubernetes и прикрепите ее к своему модулю. Если у вашего модуля уже есть учетная запись службы Kubernetes, вы можете пропустить этот шаг.
  2. Используйте RBAC Kubernetes, чтобы предоставить учетной записи службы Kubernetes правильные разрешения.

В следующем примере предоставляются разрешения на редактирование в пространстве имен prod:

 kubectl create rolebinding yourserviceaccount 
    --clusterrole=edit 
    --serviceaccount=yournamespace:yourserviceaccount
    --namespace=prod
 
  1. Во время выполнения, когда ваша служба вызывает kubectl , она автоматически получает настроенные вами учетные данные.

Вы также можете сохранить учетные данные в секрете и смонтировать их в своем модуле, чтобы он мог прочитать их оттуда

Чтобы использовать Секрет с вашими рабочими нагрузками, вы можете указать переменные среды, которые ссылаются на значения Секрета, или смонтировать том, содержащий Секрет.

Вы можете создать секрет с помощью командной строки или файла YAML.

Вот пример использования командной строки

 kubectl create secret SECRET_TYPE SECRET_NAME DATA
 

SECRET_TYPE: секретный тип, который может быть одним из следующих:

  • generic: Создайте секрет из локального файла, каталога или буквенного значения.
  • docker-registry: Создайте dockercfg секрет для использования с реестром Docker. Используется для аутентификации в реестрах докеров.
  • tls: Создайте секрет TLS из данной пары открытый/закрытый ключ. Пара открытого и закрытого ключей уже должна существовать. Сертификат открытого ключа должен быть .PEM кодируется и соответствует данному закрытому ключу.

Для большинства Секретов вы используете generic тип.

SECRET_NAME: имя Тайны, которую вы создаете.

DATA: данные для добавления в Секрет, которые могут быть одним из следующих:

  • Путь к каталогу, содержащему один или несколько файлов конфигурации, указанный с помощью флагов --from-file или --from-env-file .
  • Пары Ключ-значение, каждая из которых задана с помощью --from-literal флагов.

Если вам нужна дополнительная информация, kubectl create вы можете ознакомиться со справочной документацией

Комментарии:

1. Спасибо вам за это замечательное объяснение. Еще один возможный сценарий-если мы не будем использовать GKE и вместо этого другого поставщика (например, Linode), у которого, насколько я знаю, нет учетных записей служб, таких как Google Cloud. Будет ли в этом случае достаточно просто сохранить файл kubeconfig в безопасном месте и использовать его оттуда?

2. Я нашел эту ссылку, которая, возможно, могла бы вам помочь linode.com/community/questions/20870/…