Гостевое программное обеспечение не установлено гостевой политикой OSConfig на подходящей виртуальной машине Google Compute Engine

Экземпляр Google Compute Engine (GCE) () только что был создан в рамках проекта Google Cloud Platform (GCP). $GCP_PROJECT_ID. Существует гостевая политика OSConfig (), которая предназначена для установки пакетов гостевого программного обеспечения; однако, когда Cloud SDK ( gcloud) используется для гостевых политик, применяемых к $GCE_INSTANCE_NAME:

      gcloud beta compute os-config guest-policies lookup \
$GCE_INSTANCE_NAME \
--zone=$GCE_INSTANCE_ZONE

$=>

No effective guest policy found for [projects/$GCP_PROJECT_NAME/zones/$GCE_INSTANCE_ZONE/instances/$GCE_INSTANCE_NAME].

это не в списке.

Когда lookup команда используется для другого экземпляра GCE ( $GCE_ANOTHER_INSTANCE) с идентичной версией ОС, метаданными GCE и метками GCE:

      gcloud beta compute os-config guest-policies lookup \
$GCE_ANOTHER_INSTANCE \
--zone=$GCE_ANOTHER_ZONE

#=>

┌──────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                           SOFTWARE RECIPES                                               │
├───────────────────────────────────────────────────────────┬────────────────────┬─────────┬───────────────┤
│                          SOURCE                           │        NAME        │ VERSION │ DESIRED_STATE │
├───────────────────────────────────────────────────────────┼────────────────────┼─────────┼───────────────┤
│ projects/$GCP_PROJECT_ID/guestPolicies/. . .              │        . . .       │ . . .   │   . . .       │
│ projects/$GCP_PROJECT_ID/guestPolicies/$GUEST_POLICY_NAME │ $GUEST_POLICY_NAME │ 1.0     │ INSTALLED     │
│ projects/$GCP_PROJECT_ID/guestPolicies/. . .              │        . . .       │ . . .   │   . . .       │
└───────────────────────────────────────────────────────────┴────────────────────┴─────────┴───────────────┘

$GUEST_POLICY_NAME находится в списке.

Почему?

1 ответ

Может быть несколько причин, почему не отображается в ответе от lookup команда на:

  • задержка: для распространения OSConfig может потребоваться некоторое время, когда он был только что создан

  • хотя вы, возможно, включили метаданные GCE для всего проекта, как предлагается здесь, это может помочь добавить:

    • enable-guest-attributes:
    • enable-osconfig: TRUE

    чтобы с add-metadata команда:

            gcloud compute instances add-metadata \
    $GCE_INSTANCE_NAME \
    --metadata="enable-guest-attributes=true,enable-osconfig=TRUE" \ 
    --zone=$GCE_INSTANCE_ZONE
    
    #=>
    
    Updated [https://www.googleapis.com/compute/v1/projects/$GCP_PROJECT_NAME/zones/$GCE_INSTANCE_ZONE/instances/$GCE_INSTANCE_NAME].
    
  • если для хранения пакетов или исполняемых файлов используется сегмент Google Cloud Storage (GCS), проверьте, имеет ли учетная запись службы GCE по умолчанию () хотя бы одну контролируемую роль с разрешением (например,) с CLI GCS ( gsutil):

            gsutil iam get "gs://$GCS_BUCKET_NAME"
    
    #=>
    
    {
      "bindings": [
      . . .
      {
        "members": [
          "serviceAccount:$GCE_SERVICE_ACCOUNT"
        ],
        "role": "roles/storage.objectViewer"
      }
      . . .
      ]
    }
    

    если $GCE_SERVICE_ACCOUNTвовсе не имеет роли с storage.objects.get разрешение, вы можете использовать ch команда для iam группа, чтобы предоставить storage.objectViewer кураторская роль:

            gsutil iam ch \
    "serviceAccount:$GCE_SERVICE_ACCOUNT:roles/storage.objectViewer" \
    "gs://GCS_BUCKET_NAME"
    
  • Убедитесь в том , что рядовой Google Access включен на подсети работает в:

    1. Легко определить, какая подсеть используется с обоими --flatten а также --format флаги для describe команда:

                gcloud compute instances describe $GCE_INSTANCE_NAME \
      --flatten="networkInterfaces" \
      --format="value(networkInterfaces.subnetwork)" \
      --zone=$GCE_INSTANCE_ZONE
      
      #=>
      
      https://www.googleapis.com/compute/v1/projects/$GCP_PROJECT_NAME/regions/$GCE_INSTANCE_REGION/subnetworks/$GCE_INSTANCE_SUBNETWORK
      
    2. Узнай, если $GCE_INSTANCE_SUBNETWORK включен ли Google Private Access:

                gcloud compute networks subnets describe $GCE_INSTANCE_SUBNETWORK\
      --format="value(privateIpGoogleAccess)" \
      --region=$GCE_INSTANCE_REGION
      
      #=>
      
      True
      

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

                gcloud compute networks subnets update $GCE_INSTANCE_SUBNET \
      --enable-private-ip-google-access \
      --region=$GCE_INSTANCE_REGION
      
      #=>
      
      Updated [https://www.googleapis.com/compute/v1/projects/$GCP_PROJECT_NAME/regions/$GCE_INSTANCE_REGION/subnetworks/$GCE_INSTANCE_SUBNETWORK].
      

И если все вышеперечисленное не поможет, убедитесь, что $GCE_INSTANCE_NAMEсоответствует всем критериям из $GUEST_POLICY_NAME:

      gcloud beta compute os-config guest-policies describe \
$GUEST_POLICY_NAME \
--format="yaml(assignment)"

#=>

assignment:
  groupLabels:
  - labels: . . .
  instances: . . .
  instanceNamePrefixes: . . .
  osTypes:
  - osArchitecture: . . .
    osShortName: . . .
    osVersion: . . .
  zones: . . .
Другие вопросы по тегам