# #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 для аутентификации.
- Создайте учетную запись службы Kubernetes и прикрепите ее к своему модулю. Если у вашего модуля уже есть учетная запись службы Kubernetes, вы можете пропустить этот шаг.
- Используйте RBAC Kubernetes, чтобы предоставить учетной записи службы Kubernetes правильные разрешения.
В следующем примере предоставляются разрешения на редактирование в пространстве имен prod:
kubectl create rolebinding yourserviceaccount
--clusterrole=edit
--serviceaccount=yournamespace:yourserviceaccount
--namespace=prod
- Во время выполнения, когда ваша служба вызывает
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/…