来宾软件未通过 OSConfig 来宾策略安装到符合条件的 Google Compute Engine VM 上
Guest Software not Installed by an OSConfig Guest Policy onto an Eligible Google Compute Engine VM
Google 计算引擎 (GCE) 实例 ($GCE_INSTANCE_NAME
) 刚刚在 Google 云平台 (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
命令用于另一个具有相同OS版本、GCE元数据和GCE标签的GCE实例($GCE_ANOTHER_INSTANCE
)时:
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
已 列出。
为什么?
$GUEST_POLICY_NAME
没有出现在 $GCE_INSTANCE_NAME
上的 lookup
命令的响应中可能有几个原因:
延迟:当 $GCE_INSTANCE_NAME
刚刚创建时,OSConfig 传播 $GUEST_POLICY_NAME
可能需要一些时间
虽然您可能已按照建议here启用了项目范围的 GCE 元数据,但可能有助于添加:
enable-guest-attributes
: TRUE
enable-osconfig
: TRUE
到 $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 云存储 (GCS) 存储桶来存储包或可执行文件,请检查 GCE 默认服务帐户 ($GCE_SERVICE_ACCOUNT
) 至少有一个具有 storage.objects.get
权限(例如,storage.objectViewer
)并使用 GCS CLI (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"
确保子网 $GCE_INSTANCE_NAME
的私有 Google 访问 开启 运行 在:
通过 describe
命令的 --flatten
和 --format
标志轻松发现 $GCE_INSTANCE_NAME
正在使用哪个子网:
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
查看 $GCE_INSTANCE_SUBNETWORK
是否开启了 Google 私人访问:
gcloud compute networks subnets describe $GCE_INSTANCE_SUBNETWORK\
--format="value(privateIpGoogleAccess)" \
--region=$GCE_INSTANCE_REGION
#=>
True
如果以上是 False
,则使用更新子命令为同一 subnets
子组启用私有 Google 访问:
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: . . .
Google 计算引擎 (GCE) 实例 ($GCE_INSTANCE_NAME
) 刚刚在 Google 云平台 (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
命令用于另一个具有相同OS版本、GCE元数据和GCE标签的GCE实例($GCE_ANOTHER_INSTANCE
)时:
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
已 列出。
为什么?
$GUEST_POLICY_NAME
没有出现在 $GCE_INSTANCE_NAME
上的 lookup
命令的响应中可能有几个原因:
延迟:当
$GCE_INSTANCE_NAME
刚刚创建时,OSConfig 传播$GUEST_POLICY_NAME
可能需要一些时间虽然您可能已按照建议here启用了项目范围的 GCE 元数据,但可能有助于添加:
enable-guest-attributes
:TRUE
enable-osconfig
:TRUE
到
$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 云存储 (GCS) 存储桶来存储包或可执行文件,请检查 GCE 默认服务帐户 ($GCE_SERVICE_ACCOUNT
) 至少有一个具有storage.objects.get
权限(例如,storage.objectViewer
)并使用 GCS CLI (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"
确保子网
$GCE_INSTANCE_NAME
的私有 Google 访问 开启 运行 在:通过
describe
命令的--flatten
和--format
标志轻松发现$GCE_INSTANCE_NAME
正在使用哪个子网: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
查看
$GCE_INSTANCE_SUBNETWORK
是否开启了 Google 私人访问:gcloud compute networks subnets describe $GCE_INSTANCE_SUBNETWORK\ --format="value(privateIpGoogleAccess)" \ --region=$GCE_INSTANCE_REGION #=> True
如果以上是
False
,则使用更新子命令为同一subnets
子组启用私有 Google 访问: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: . . .