10.9. 使用 RHEL 镜像构建器将镜像上传到 GCP

使用 RHEL 镜像构建器,您可以构建 gce 镜像,为用户或 GCP 服务帐户提供凭证,然后将 gce 镜像直接上传到 GCP 环境。

10.9.1. 使用 CLI 将 gce 镜像上传到 GCP

按照以下步骤使用凭证设置配置文件,将 gce 镜像上传到 GCP。

警告

您无法手动将 gce 镜像导入到 GCP,因为镜像不能引导。您必须使用 gcloud 或 RHEL 镜像构建器上传它。

前提条件

  • 您有一个有效的 Google 帐户和凭证,来将镜像上传到 GCP。凭据可以来自用户帐户或服务帐户。与凭证关联的帐户必须至少分配以下 IAM 角色:

    • roles/storage.admin - 用于创建和删除存储对象
    • roles/compute.storageAdmin - 将虚拟机镜像导入到 Compute Engine。
  • 您有一个现有的 GCP 存储桶。

流程

  1. 通过使用文本编辑器,创建一个具有以下内容的 gcp-config.toml 配置文件:

    provider = "gcp"
    
    [settings]
    bucket = "GCP_BUCKET"
    region = "GCP_STORAGE_REGION"
    object = "OBJECT_KEY"
    credentials = "GCP_CREDENTIALS"
    • GCP_BUCKET 指向现有的存储桶。它用于存储正在上传的镜像的中间存储对象。
    • GCP_STORAGE_REGION 是常规的 Google 存储区域,是一个双区域或多区域。
    • OBJECT_KEY 是中间存储对象的名称。它在上传过程前不能存在,并在上传过程完成后被删除。如果对象名称不以 .tar.gz 结尾,则扩展会自动添加到对象名称中。
    • GCP_CREDENTIALS 是一个从 GCP 下载的凭证 JSON 文件的 Base64 编码方案。凭证决定了 GCP 将镜像上传到的项目。

      注意

      如果您使用不同的机制来使用 GCP 进行身份验证,在 gcp-config.toml 文件中指定 GCP_CREDENTIALS 是可选的。有关其他验证方法,请参阅 使用 GCP 进行验证

  2. 从 GCP 下载的 JSON 文件中检索 GCP_CREDENTIALS

    $ sudo base64 -w 0 cee-gcp-nasa-476a1fa485b7.json
  3. 使用附加镜像名称和云供应商配置集创建 compose:

    $ sudo composer-cli compose start BLUEPRINT-NAME gce IMAGE_KEY gcp-config.toml

    镜像构建、上传和云注册过程最多可能需要十分钟才能完成。

验证

  • 验证镜像状态为 FINISHED:

    $ sudo composer-cli compose status

10.9.2. RHEL 镜像构建器如何对不同 GCP 凭证的身份验证顺序进行排序

您可以在 RHEL 镜像构建器中使用几种不同类型的凭证来使用 GCP 进行身份验证。如果 RHEL 镜像构建器配置被设置为使用多组凭证使用 GCP 进行身份验证,它会按以下首选顺序使用凭证:

  1. 在配置文件中,使用 composer-cli 命令指定的凭证。
  2. 凭证在 osbuild-composer worker 配置中被配置。
  3. Google GCP SDK 库中的 应用程序默认凭证,它尝试使用以下选项自动找到一个身份验证的方法:

    1. 如果设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量,应用程序默认凭据会尝试加载并从文件中使用由变量指向的凭证。
    2. 应用默认凭据尝试使用附加到运行代码的资源的服务帐户进行身份验证。例如,Google Compute Engine 虚拟机。

      注意

      您必须使用 GCP 凭证来决定将镜像上传到的 GCP 项目。因此,除非要将所有镜像上传到同一 GCP 项目,您必须使用 composer-cli 命令指定 gcp-config.toml 配置文件中的凭证。

10.9.2.1. 使用 composer-cli 命令指定 GCP 凭证

您可以在上传目标配置 gcp-config.toml 文件中指定 GCP 验证凭证。使用 Google 帐户凭证 JSON 文件的 Base64 编码方案来节省时间。

流程

  1. 运行以下命令,使用存储在 GOOGLE_APPLICATION_CREDENTIALS 环境变量中的路径获取 Google 帐户凭证文件的编码内容:

    $ base64 -w 0 "${GOOGLE_APPLICATION_CREDENTIALS}"
  2. 在上传目标配置 gcp-config.toml 文件中,设置凭证:

    provider = "gcp"
    
    [settings]
    provider = "gcp"
    
    [settings]
    ...
    credentials = "GCP_CREDENTIALS"

10.9.2.2. 在 osbuild-composer worker 配置中指定凭证

您可以将 GCP 身份验证凭据配置为全局用于 GCP 用于所有镜像构建。这样,如果您想要将镜像导入到同一 GCP 项目,则您可以对上传到 GCP 的所有镜像使用相同的凭据。

流程

  • /etc/osbuild-worker/osbuild-worker.toml worker 配置中,设置以下凭证值:

    [gcp]
    credentials = "PATH_TO_GCP_ACCOUNT_CREDENTIALS"