google-cloud-platform - vpc 中的 Packer 谷歌云身份验证
问题描述
我们正在使用 Packer 在 GCP 计算实例中构建图像。Packer 尝试根据项目和图像抓取图像,如下所示:
https://www.googleapis.com/compute/v1/projects/<project-name>/global/images/<image-name>?alt=json
然后它抛出一个错误:
oauth2: cannot fetch token: Post https://accounts.google.com/o/oauth2/token: dial tcp 108.177.111.84:443: i/o timeout
基于安全原则,我们的计算实例没有外部 IP 地址,因此无法访问互联网。在这种情况下,accounts.google.com
不再可访问。那么我们如何验证google apis呢?
我尝试启用防火墙规则并提供互联网访问路线。但根据此处所述的要求,如果实例没有外部 IP 地址,它仍然无法访问。
这意味着我们必须有一种单独的方式来验证 googleapis。但是 Packer 支持这个吗?
这是我们拥有的打包程序生成器:
"builders": [
{
"type": "googlecompute",
"project_id": "test",
"machine_type": "n1-standard-4",
"source_image_family": "{{user `source_family`}}",
"source_image": "{{user `source_image`}}",
"source_image_project_id": "{{user `source_project_id`}}",
"region": "{{user `region`}}",
"zone": "{{user `zone`}}",
"network": "{{user `network`}}",
"subnetwork": "{{user `subnetwork`}}",
"image_name": "test-{{timestamp}}",
"disk_size": 10,
"disk_type": "pd-ssd",
"state_timeout": "5m",
"ssh_username": "build",
"ssh_timeout": "1000s",
"ssh_private_key_file": "./gcp-instance-key.pem",
"service_account_email": "test-account@test-mine.iam.gserviceaccount.com",
"omit_external_ip": true,
"use_internal_ip": true,
"metadata": {
"user": "build"
}
}
解决方案
要手动执行您想要的操作,您需要在项目内的工作计算实例上或在您想要访问的计算的网络上启用对等互连的 vpc 中打开 ssh 隧道。
如果您随后将 CI 与 gitlab-ci 之类的运行器一起使用,请确保在同一 vpc 或具有对等互连的 vpc 中创建运行器。
如果您不想使用外部 ip 创建计算,您可以尝试打开与项目的 vpn 连接并通过 vpn 进行。
推荐阅读
- gradle - 如何修复 IntelliJ 和 gradle-ran 覆盖之间的差异?
- mongodb - 我真的需要为我创建的每个 mongoDB 连接实例调用 close() 吗?
- azure - 如何在 Azure Durable Functions 中使用依赖注入?
- javascript - 使用超时淡出多个元素仅淡出列表中的最后一个
- ios - 在 Notification Service Extension 中添加日志记录和检索日志
- java - 在同一个项目中同时使用 XGBoostPredictorClassification 和 XGBoostClassification
- python - 将嵌套键和值添加到 dict 对象
- python - 如何在 PyQT5 中创建导航栏
- chart.js - ChartJS 条形图 - 即使光标在条形之外也触发悬停
- javascript - 如何正确使用 react-native-navigation 库中的 Navigation.showOverlay(...)?