使用 Packer Google Compute Builder 创建映像,但没有嵌入项目用户(cloud-init)

Posted

技术标签:

【中文标题】使用 Packer Google Compute Builder 创建映像,但没有嵌入项目用户(cloud-init)【英文标题】:Create image with Packer Google Compute Builder but without project users baked in (cloud-init) 【发布时间】:2022-01-20 17:46:52 【问题描述】:

我正在使用 Google Compute Builder 创建打包程序映像:

source "googlecompute" "github-runner" 
  image_name          = "github-runner-$replace(var.runner_version, ".", "-")-v$var.custom_version"
  image_family        = "github-runner"
  project_id          = "xxx"
  source_image_family = "ubuntu-2004-lts"
  ssh_username        = "packer"
  use_internal_ip     = true
  zone                = "europe-west4-c"


build 
  sources = [
    "source.googlecompute.github-runner"
  ]

但是,由于 cloud-init,所有项目用户都在构建器 VM 中进行配置,因此在最终映像中进行配置。

是否有任何选项可以跳过在构建器 VM 上创建项目的用户?

【问题讨论】:

guest-agent 的帐户管理功能(使用操作系统登录时除外)负责配置帐户。您可以在代理的配置 (accounts_daemon) 中禁用此功能。如果您不想安装代理,则可能必须从头开始创建映像。 两个有助于解释这一点的链接:cloud.google.com/compute/docs/connect/restrict-ssh-keys 和 docs.bridgecrew.io/docs/bc_gcp_networking_8 【参考方案1】:

所以解决方案是将block-project-ssh-keys = "true" 添加到元数据中。最终声明:

source "googlecompute" "github-runner" 
  image_name          = "github-runner-$replace(var.runner_version, ".", "-")-v$var.custom_version"
  image_family        = "github-runner"
  project_id          = "xxx"
  source_image_family = "ubuntu-2004-lts"
  ssh_username        = "packer"
  use_internal_ip     = true
  zone                = "europe-west4-c"
  metadata = 
    block-project-ssh-keys = "true"
  


build 
  sources = [
    "source.googlecompute.github-runner"
  ]

【讨论】:

以上是关于使用 Packer Google Compute Builder 创建映像,但没有嵌入项目用户(cloud-init)的主要内容,如果未能解决你的问题,请参考以下文章

ruby Google Cloud Compute使用Rotate创建快照

使用 Go 在 Google Container/Compute Engine 中登录到 Google Cloud

在 Google Compute Engine 上使用 gcloud 安装 node.js

Google Compute Engine:使用另一个项目的快照?

无法在 Google Cloud Compute Engine 上使用 GPU

在 Google Compute Engine 上使用抢占式虚拟机