GCE Node API使用自定义网络创建无外部IP虚拟机异常
问题原因
你使用的@google-cloud/compute Node.js SDK的zone.createVM方法存在默认行为:当networkInterfaces中的网卡配置没有显式声明accessConfigs字段时,SDK会自动注入类型为ONE_TO_ONE_NAT的访问配置,为虚拟机分配外部公网IP。
云控制台导出的REST配置实际隐式包含了accessConfigs: []的配置项,只是导出展示时没有完全显示,所以才会出现配置看起来一致但实际创建效果不同的问题。
解决方法
在networkInterfaces对应的网卡配置中,显式添加accessConfigs: []即可禁止分配外部IP,修改后的代码片段如下:
const Compute = require('@google-cloud/compute'); const compute = new Compute(); const zone = compute.zone('us-central1-a'); const config = { machineType: machinetype, maintenancePolicy: 'MIGRATE', // 若不需要对外提供HTTP服务可关闭该配置,不影响无外部IP的生效逻辑 // http: true, disks: [ ... ], canIpForward: false, networkInterfaces: [ { subnetwork: "projects/optum-80593/regions/us-central1/subnetworks/subnet-us-central1", // 显式设置访问配置为空数组,禁止分配外部IP accessConfigs: [] } ], ... } await zone.createVM(vmName, config).then(async (data) => {
验证说明
虚拟机创建完成后,可调用实例的getMetadata方法查询networkInterfaces属性,确认对应网卡的accessConfigs字段为空,即代表无外部IP配置生效。
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

