0

Google Compute Engine (GCE) 实例 ( $GCE_INSTANCE_NAME) 刚刚在 Google Cloud Platform (GCP) 项目中创建$GCP_PROJECT_ID。有一个 OSConfig 来宾策略 ( $GUEST_POLICY_NAME) 应该安装来宾软件包$GCE_INSTANCE_NAME;但是,当 Cloud SDK ( gcloud) 用于lookup来宾策略时,应用于$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].

$GUEST_POLICY_NAME列出

当该lookup命令用于$GCE_ANOTHER_INSTANCE具有相同操作系统版本、GCE 元数据和 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 列出。

为什么?

4

1 回答 1

1

可能有几个原因导致命令$GUEST_POLICY_NAME的响应中没有显示lookupon $GCE_INSTANCE_NAME

  • 延迟:刚创建$GUEST_POLICY_NAME时OSConfig 可能需要一些时间才能传播$GCE_INSTANCE_NAME

  • 虽然您可能已启用项目范围的 GCE 元数据,如此处所建议,但添加以下内容可能会有所帮助:

    • enable-guest-attributesTRUE
    • enable-osconfigTRUE

    使用$GCE_INSTANCE_NAME命令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].
    
  • 如果$GUEST_POLICY_NAME使用 Google Cloud Storage (GCS) 存储桶来存储包或可执行文件,请检查 GCE 默认服务帐户 ( $GCE_SERVICE_ACCOUNT) 是否具有至少一个具有 GCS CLI ( )storage.objects.get权限 (例如) 的策划角色:storage.objectViewergsutil

    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 访问权限:$GCE_INSTANCE_NAME

    1. 使用命令的和标志轻松发现哪个子网$GCE_INSTANCE_NAME正在使用:--flatten--formatdescribe

      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,则使用更新子命令为同一subnets子组启用 Private Google Access:

      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: . . .
于 2021-09-29T00:13:57.277 回答