Не удается создать экземпляр gcp из образа компьютера в другом проекте

#google-cloud-platform

#google-cloud-platform

Вопрос:

У меня есть два проекта GCP, ProjectA и ProjectB. В ProjectB у меня есть образ компьютера B-machine-image. Моей целью было создать копию образа компьютера в ProjectA. Но поскольку невозможно напрямую скопировать образ компьютера из ProjectB в ProjectA, я подумал, что могу создать экземпляр в ProjectA, используя образ компьютера в ProjectB, а затем использовать новый экземпляр в ProjectA для локального создания образа компьютера.

Я нашел документ Google для этого: https://cloud.google.com/compute/docs/machine-images/create-instance-from-machine-image и выполнил шаги, чтобы сначала предоставить учетную запись службы в роли администратора ProjectA образу компьютера B-machine-image в ProjectB, затем запустите команду, чтобы создать экземпляр, подобный:

экземпляры gcloud beta compute создают my-new-instance —project=ProjectA —zone us-central1-b —source-machine-image projects/ProjectB /global/machineImages /B-machine-image —service-account 123456789000-compute@developer.gserviceaccount.com

и я получаю сообщение об ошибке:

ОШИБКА: (gcloud.beta.compute.instances.create) Не удалось получить ресурс:

  • Недопустимое значение для поля ‘resource.networkInterfaces [0].network’: ‘projects /123456789000 / global /networks /ProjectB-vpc’. Не удается найти сетевой ресурс, на который ссылается.

В ProjectB у меня есть VPC с именем ProjectB-vpc.

Чего я не понимаю, так это того, что в «projects / 123456789000 / global / networks / ProjectB-vpc» 123456789000, похоже, предназначен для ProjectA, поскольку он является частью электронной почты для учетной записи службы ProjectA, в то время как ProjectB-vpc предназначен для ProjectB. В моей команде у меня есть «projects / ProjectB / ….», почему команда заменила «ProjectB» на 123456789000?

Есть идеи, где я ошибся?

Спасибо, Филипп

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

1. Образы компьютеров отличаются от обычных образов вычислительного ядра. Образы компьютеров предварительно настроены для конкретной среды виртуальной машины. Я рекомендую вам создать обычный образ экземпляра compute engine. Для решения этой проблемы попробуйте добавить параметр командной строки --network=default и --subnet=default / или заменить своими реальными сетевыми именами.

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

Ответ №1:

В соответствии с документацией GCP вы можете создать виртуальную машину, используя образ компьютера из другого проекта напрямую. Обратите внимание, что при создании виртуальной машины с использованием образа компьютера из другого проекта у вас может не быть доступа к учетной записи службы, прикрепленной к этому исходному проекту. В моих шагах воспроизведения я выполнил следующие шаги:

  1. Создан мультирегиональный образ компьютера
 2. gcloud beta compute machine-images add-iam-policy-binding rhel-machine-image 
    --project=source-project 
    --member='serviceAccount:Source-compute@developer.gserviceaccount.com' 
    --role='roles/compute.admin'
 
  1. Добавлена учетная запись службы исходного проекта в целевой проект как iam.serviceAccountUser
 4. gcloud beta compute instances create machine-image-vm     --project=destination-project --zone us-central1-a --source-machine-image projects/source-project/global/machineImages/rhel-machine-image --service-account Destination-compute@developer.gserviceaccount.com
 

На последнем шаге я использовал учетную запись службы destination project Compute Engine по умолчанию.

 Created [https://www.googleapis.com/compute/beta/projects/destination-project/zones/us-central1-a/instances/machine-image-vm].
NAME              ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
machine-image-vm  us-central1-a  e2-medium                  x0.xxx.0.18  35.2x3.18x.x59  RUNNING
 

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

1. Спасибо, ребята, за предложения. Я обнаружил, что проблема, с которой я столкнулся, заключалась в том, что, как сказал Джон выше, мне нужно специально указать в команде —network и —subnet, поскольку образ компьютера содержит информацию о сети и подсети из исходного проекта, имена которых отличаются от имен в целевом проекте.

2. Я следил за документами, чтобы реализовать это, и это работает. У меня не возникает никаких ошибок, связанных с сетью. Если проблема устранена, отпустите ее.

3. Спасибо. Я полагаю, что в вашем случае вы сохранили сеть и подсеть «по умолчанию» при создании проектов, GCP делает это за вас. Я также считаю, что большинство людей сохранят значение по умолчанию, и именно по этой причине сработала команда из документа Google. Но в моем случае я удалил эти значения по умолчанию и создал свою собственную сеть и подсеть, поэтому мне приходится использовать дополнительные параметры —network и —subnet в команде gcloud, чтобы заставить его работать.

4. Я думаю, вы правы, поскольку я создал образ компьютера в проекте с сетью по умолчанию, и там, где я импортировал, также есть сеть по умолчанию.

Ответ №2:

Я считаю, что если вы сохраняете сеть и подсеть «по умолчанию» при создании проектов, GCP сделает это за вас (я также считаю, что большинство людей сохранят значение по умолчанию), тогда команды из документа Google будут работать. Но в моем случае я удалил эти значения по умолчанию и создал свою собственную сеть и подсеть, поэтому мне приходится использовать дополнительные параметры —network и —subnet в команде gcloud, чтобы заставить его работать.