Google cloud platform 谷歌云功能,VPC无服务器连接器出口,云NAT不工作

Google cloud platform 谷歌云功能,VPC无服务器连接器出口,云NAT不工作,google-cloud-platform,google-cloud-functions,google-cloud-networking,Google Cloud Platform,Google Cloud Functions,Google Cloud Networking,这与下列过时的问题有关 目前,GCP拥有VPC无服务器连接器,允许您通过VPC连接器路由所有流量,并设置云NAT以获取静态IP地址 我使用区域us-east4遵循了以下指南,但来自我的云功能的外部请求总是超时 我不确定这是一个错误,或者我错过了什么 编辑: 为了确保我遵循了所有的步骤,我尽可能使用gcloud命令完成了所有步骤。这些命令是从GCP指南中复制的 设置项目id以供将来使用 PROJECT_ID=我的测试gcf vpc nat 转到控制台并启用计费 设置VPC和测试VM来测试云NAT

这与下列过时的问题有关

目前,GCP拥有VPC无服务器连接器,允许您通过VPC连接器路由所有流量,并设置云NAT以获取静态IP地址

我使用区域us-east4遵循了以下指南,但来自我的云功能的外部请求总是超时

我不确定这是一个错误,或者我错过了什么

编辑: 为了确保我遵循了所有的步骤,我尽可能使用gcloud命令完成了所有步骤。这些命令是从GCP指南中复制的

设置项目id以供将来使用 PROJECT_ID=我的测试gcf vpc nat 转到控制台并启用计费

设置VPC和测试VM来测试云NAT

gcloud服务支持compute.googleapis.com\ -项目$project\u ID gcloud计算网络创建自定义网络1\ -子网模式自定义\ -项目$project\u ID gcloud计算网络子网创建子网-us-east-192\ -网络自定义网络1\ -美国东部地区4\ -范围192.168.1.0/24\ -项目$project\u ID gcloud计算实例创建nat-test-1\ -图像族debian-9\ -debian云图像项目\ -网络自定义网络1\ -子网SUNBET-us-east-192\ -美国东部4-c区\ -没有地址\ -项目$project\u ID gcloud计算防火墙规则创建允许ssh\ -网络自定义网络1\ -源范围35.235.240.0/20\ -允许tcp:22\ -项目$project\u ID 使用控制台创建IAP SSH权限

测试网络配置,VM在没有云NAT的情况下不应具有internet访问

gcloud计算ssh nat-test-1\ -美国东部4-c区\ -命令curl-s ifconfig.io\ -通过iap的隧道\ -项目$project\u ID 命令响应,连接超时

设置云NAT gcloud计算路由器创建nat路由器\ -网络自定义网络1\ -美国东部地区4\ -项目$project\u ID gcloud计算路由器nat创建nat配置\ -路由器区域us-east4\ -路由器nat路由器\ -nat所有子网ip范围\ -自动分配nat外部IP\ -项目$project\u ID 再次测试网络配置,VM应该可以通过云NAT访问互联网 gcloud计算ssh nat-test-1\ -美国东部4-c区\ -命令curl-s ifconfig.io\ -通过iap的隧道\ -项目$project\u ID 命令以IP地址响应

已创建VPC访问连接器 gcloud服务支持vpcaccess.googleapis.com\ -项目$project\u ID gcloud计算网络vpc访问连接器创建自定义网络1-us-east4\ -网络自定义网络1\ -美国东部地区4\ -范围10.8.0.0/28\ -项目$project\u ID gcloud compute networks vpc接入连接器描述了custom-network1-us-east4\ -美国东部地区4\ -项目$project\u ID 添加了Google云功能服务帐户的权限 gcloud服务支持cloudfunctions.googleapis.com\ -项目$project\u ID PROJECT\u NUMBER=$gcloud projects description$PROJECT\u ID-format=valueprojectNumber gcloud项目添加iam策略绑定$PROJECT\u ID\ -成员=服务帐户:服务-$PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com\ -角色=角色/查看者 gcloud项目添加iam策略绑定$PROJECT\u ID\ -成员=服务帐户:服务-$PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com\ -角色=角色/compute.networkUser 有人建议我应该添加额外的防火墙规则和服务帐户权限 附加防火墙规则 gcloud计算防火墙规则创建自定义-network1-allow-http\ -网络自定义网络1\ -源范围0.0.0.0/0\ -允许tcp:80\ -项目$project\u ID gcloud计算防火墙规则创建自定义-network1-allow-https\ -网络自定义网络1\ -源范围0.0.0.0/0\ -允许tcp:443\ -项目$project\u ID 附加权限,实际上此服务帐户已具有编辑器角色。 gcloud项目添加iam策略绑定$PROJECT\u ID\ -成员=服务帐户:$PROJECT_ID@appspot.gserviceaccount.com \ -角色=角色/compute.networkUser 部署的测试云功能 index.js

const publicIp=需要“public-ip” exports.testVPC=异步请求,res=>{ const v4=等待publicIp.v4 const v6=等待publicIp.v6 console.log'ip',[v4,v6] 返回res.endJSON.stringify[v4,v6] } exports.testNoVPC=exports.testVPC 具有VPC连接器的云功能 gcloud功能部署testVPC\ -运行时节点JS10\ -触发http\ -vpc连接器自定义网络1-us-east4\ -所有出口设置\ -美国东部地区4\ -允许未经验证的\ -项目$project\u ID 无VPC连接器的云功能 gcloud函数部署testNoVPC\ -运行时节点JS10\ -触发http\ -美国东部地区4\ -允许未经验证的\ -项目$project\u ID 没有VPC连接器的云功能以IP地址响应

带有VPC连接器的云功能超时

。使用计算引擎测试您的云NAT设置是否正确 我们成功地完成了

。确保在步骤1中创建的自定义网络1上创建VPC连接器

a、 在“网络”下,选择在步骤2中创建的连接器,并通过VPC连接器路由所有流量

云Nat、Vpc连接器和云功能的区域为us-central1

4.测试该功能以查看您是否可以访问internet:

Accessing stackoverflow from cloud function:  {'Cache-Control': 'private', 'Content-Type': 'text/html; charset=utf-8', 'Content-Encoding': 'gzip', 'X-Frame-Options': 'SAMEORIGIN', 'X-Request-Guid': 'edf3d1f8-7466-4161-8170-ae4d6e615d5c', 'Strict-Transport-Security': 'max-age=15552000', 'Feature-Policy': "microphone 'none'; speaker 'none'", 'Content-Security-Policy': "upgrade-insecure-requests; frame-ancestors 'self' https://stackexchange.com", 'Content-Length': '26391', 'Accept-Ranges': 'bytes', 'Date': 'Sat, 28 Mar 2020 19:03:17 GMT', 'Via': '1.1 varnish', 'Connection': 'keep-alive', 'X-Served-By': 'cache-mdw17354-MDW', 'X-Cache': 'MISS', 'X-Cache-Hits': '0', 'X-Timer': 'S1585422197.002185,VS0,VE37', 'Vary': 'Accept-Encoding,Fastly-SSL', 'X-DNS-Prefetch-Control': 'off', 'Set-Cookie': 'prov=78ecd1a5-54ea-ab1d-6d19-2cf5dc44a86b; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly'}!


成功,现在您可以检查云nat路由器是否在无服务器VPC访问所使用的同一VPC中创建

还要检查云功能是否部署在云Nat使用的云路由器的相同区域

谢谢,
爱德华多·鲁埃拉(Eduardo Ruela)

这真的很奇怪,我创建了一个新项目,并遵循了您建议的步骤1-4,我启用了必需的API,配置了必需的权限,但我得到了相同的结果。我可以在步骤1中确认测试。工作正常,云NAT设置正确。我设置的唯一不同于指南的地方只是名称,以及区域asia-east2而不是us-central1,但我还将云功能配置为部署到asia-east2。或者我遗漏了什么,或者文档遗漏了什么。您是否将默认的应用程序引擎服务帐户授予作为云功能运行的服务帐户compute network user角色?此外,我不知道这是否会产生影响,以下是我的nat防火墙规则:允许ssh入口适用于所有IP范围:35.235.240.0/20 tcp:22允许1000个自定义网络1-allow-http入口http服务器IP范围:0.0.0/0 tcp:80允许1000个自定义网络1-allow-https入口https服务器IP范围:0.0.0/0 tcp:443允许1000个等效REST,你的连接器也在同一个区域吗?嗨,我知道这听起来很疯狂,但是用python代码我可以访问internet,而用node.js我不能。我不知道我做错了什么,但我用你的代码测试了,结果超时了。这非常有用。这是因为包公共ip,当我尝试请求时。获取https://ifconfig.co/ip相反,它工作正常。非常感谢。嗨,你解决这个问题了吗?我已经试了2天,但仍然没有结果:是的,我试过了,请按照我对下面答案的评论,问题是包公共ip没有按预期工作,你可以尝试其他方法获得静态IPIt,不管我使用什么,该功能似乎无法连接到互联网在我的特殊情况下,是试图连接到ftp服务器删除一些文件
Accessing stackoverflow from cloud function:  {'Cache-Control': 'private', 'Content-Type': 'text/html; charset=utf-8', 'Content-Encoding': 'gzip', 'X-Frame-Options': 'SAMEORIGIN', 'X-Request-Guid': 'edf3d1f8-7466-4161-8170-ae4d6e615d5c', 'Strict-Transport-Security': 'max-age=15552000', 'Feature-Policy': "microphone 'none'; speaker 'none'", 'Content-Security-Policy': "upgrade-insecure-requests; frame-ancestors 'self' https://stackexchange.com", 'Content-Length': '26391', 'Accept-Ranges': 'bytes', 'Date': 'Sat, 28 Mar 2020 19:03:17 GMT', 'Via': '1.1 varnish', 'Connection': 'keep-alive', 'X-Served-By': 'cache-mdw17354-MDW', 'X-Cache': 'MISS', 'X-Cache-Hits': '0', 'X-Timer': 'S1585422197.002185,VS0,VE37', 'Vary': 'Accept-Encoding,Fastly-SSL', 'X-DNS-Prefetch-Control': 'off', 'Set-Cookie': 'prov=78ecd1a5-54ea-ab1d-6d19-2cf5dc44a86b; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly'}!