TL; DR - Кластеры, созданные GitLab-Ci Kubernetes Integration, не смогут получить изображение из реестра GCR в том же проекте, что и изображения контейнера, - без изменения разрешений узла (-ов). (прицелы).
В то время как вы МОЖЕТЕ вручную изменить разрешения на отдельных машинах узла для предоставления учетных данных по умолчанию для приложения (см .: https://developers.google.com/identity/protocols/application-default-credentials) надлежащих областей действия в реальном времени - выполнение этого способа будет означать, что если ваш узел воссоздан в какой-то момент в будущем, он не будет иметь ваши измененные области видимости, и все будет сломано.
Вместо изменения разрешений вручную - создайте новый пул узлов, который имеет надлежащие области действия для доступа к необходимым службам GCP.
Вот некоторые ресурсы, которые я использовал для справки:
- https://medium.com/google-cloud/updating-google-container-engine-vm-scopes-with-zero-downtime-50bff87e5f80
- https://adilsoncarvalho.com/changing-a-running-kubernetes-cluster-permissions-a-k-a-scopes-3e90a3b95636
Создание пула узлов с соответствующей областью действия. В общем случае выглядит так
gcloud container node-pools create [new pool name] \
--cluster [cluster name] \
--machine-type [your desired machine type] \
--num-nodes [same-number-nodes] \
--scopes [your new set of scopes]
Если вы не уверены, как называются требуемые области - вы можете увидеть полный список областей и псевдонимов областей здесь: https://cloud.google.com/sdk/gcloud/reference/container/node-pools/create
Для меня я сделал gke-default (так же, как мой другой кластер) и sql-admin. Причиной этого является то, что мне нужно иметь доступ к базе данных SQL в Cloud SQL во время части моей сборки, и я не хочу подключаться к общедоступному IP-адресу для этого.
gke-default Scopes (для справки)
- https://www.googleapis.com/auth/devstorage.read_only (позволяет тянуть)
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/monitoring
- https://www.googleapis.com/auth/service.management.readonly
- https://www.googleapis.com/auth/servicecontrol
- https://www.googleapis.com/auth/trace.append
Сравните вышеупомянутое с более заблокированными разрешениями от созданного GitLab-Ci кластера (ТОЛЬКО эти два: https://www.googleapis.com/auth/logging.write, https://www.googleapis.com/auth/monitoring):
Obviosuly настройка вашего кластера ТОЛЬКО с минимальными необходимыми разрешениями, безусловно, путь сюда. Как только вы поймете, что это такое, и создадите новый пул узлов в правильной области действия ...
Перечислите ваши узлы с помощью:
kubectl get nodes
Тот, который вы только что создали (самый последний), имеет новые настройки, в то время как более старая опция - это кластер gitlab по умолчанию, который можно извлечь из GCR.
Тогда:
kubectl cordon [your-node-name-here]
После этого вы хотите слить:
kubectl drain [your-node-name-here] --force
Я столкнулся с проблемами, когда тот факт, что у меня установлен GitLab Runner, означал, что я не мог нормально дренировать модули из-за локального набора данных / демона, который использовался для его управления.
По этой причине, как только я оцепил свой Узел, я просто удалил узел из Kubectl (не уверен, что это вызовет проблемы - но это было хорошо для меня). После удаления вашего узла вам нужно удалить пул узлов «default-pool», созданный GitLab.
Список пулов узлов:
gcloud container node-pools list --cluster [CLUSTER_NAME]
Смотрите старые области видимости, созданные gitlab:
gcloud container node-pools describe default-pool \
--cluster [CLUSTER_NAME]
Проверьте, есть ли у вас правильные новые области (которые вы только что добавили):
gcloud container node-pools describe [NEW_POOL_NAME] \
--cluster [CLUSTER_NAME]
Если ваш новый пул узлов имеет нужные области, ваши развертывания теперь могут удалять пул по умолчанию с помощью:
gcloud container node-pools delete default-pool \
--cluster <YOUR_CLUSTER_NAME> --zone <YOUR_ZONE>
В моем личном случае я все еще пытаюсь выяснить, как разрешить доступ к частной сети (т. Е. Получить доступ к облачному SQL через частный IP-адрес), но теперь я могу вытащить свои изображения, чтобы оказаться на полпути.
Думаю, все, надеюсь, это сэкономило вам несколько минут!