Изменение разрешений кластера Google Container Engine

Я смог успешно создать кластер Google Container в консоли разработчиков и развернул на нем свое приложение. Все это запускается нормально, однако я обнаружил, что не могу подключиться к Cloud SQL, я понял;

 "Error: Handshake inactivity timeout"

После небольшой копки у меня не было никаких проблем с подключением к базе данных из App Engine или моей локальной машины, поэтому я подумал, что это немного странно. Именно тогда я заметил кластерные разрешения...

Когда я выбираю свой кластер, я вижу следующее;

  Permissions

User info           Disabled
Compute             Read Write
Storage             Read Only
Task queue          Disabled
BigQuery            Disabled
Cloud SQL           Disabled
Cloud Datastore     Disabled
Cloud Logging       Write Only
Cloud Platform      Disabled

Я действительно надеялся использовать облачное хранилище и облачный SQL в своих узлах контейнера. Я разрешил доступ к каждому из этих API в настройках моего проекта, и мой экземпляр Cloud SQL принимает подключения с любого IP-адреса (ранее я запускал Node на управляемой виртуальной машине в App Engine), поэтому я думаю, что Google явно отключает эти API.

Итак, мой вопрос состоит из двух частей:

  • Есть ли способ, которым я могу изменить эти разрешения?
  • Есть ли веская причина, по которой эти API отключены? (Я предполагаю, что должно быть)

Любая помощь высоко ценится!

3 ответа

Решение

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

Если вы используете облачную консоль, нажмите ссылку "Еще" на странице создания кластера, и вы увидите список разрешений, которые вы можете добавить к узлам в вашем кластере (по умолчанию все отключено). Выберите все, что вам нужно, и вы должны увидеть соответствующие разрешения после создания кластера.

Если вы используете командную строку для создания кластера, передайте --scopes командовать gcloud container clusters create установить соответствующие области учетной записи службы на виртуальных машинах вашего узла.

С помощью Node Pools вы можете сортировать добавления областей в работающий кластер, создав новый пул узлов с нужными областями (а затем удалив старый):

gcloud container node-pools create np1 --cluster $CLUSTER --scopes $SCOPES
gcloud container node-pools delete default-pool --cluster $CLUSTER

Хм, я нашел пару вещей, которые могут быть интересны:

  1. Разрешения принадлежат учетной записи службы (т.н. Compute Engine default serviceaccount, похоже 12345566788-compute@developer.gserviceaccount.com)

  2. Любая виртуальная машина по умолчанию работает с этой учетной записью службы. И его разрешения не позволяют намCloud SQL, ведра и так далее. Но...

  3. Но вы можете изменить это поведение, используя другую учетную запись службы с нужными разрешениями. Просто создайте его вручную и установите только необходимые завивки. Выключите его, используяgcloud auth activate-service-account --key-file=/new-service-account-cred.json

  4. Вот и все.

Для cloudsql есть возможность подключения из контейнеров с указанием прокси, как описано здесь https://cloud.google.com/sql/docs/postgres/connect-container-engine