通过无服务器 VPC 连接器向 GCE 发出 GAE http 请求
GAE http request to GCE via Serverless VPC Connector
我有一个 Google App Engine 应用程序(python 2.7 - 这是一个正在升级的旧项目!)需要在 Google 上查询 Elastisearch 实例计算引擎。我可以使用 GCE public ip 地址发出请求而不会出现问题,但我不想将 GCE 实例暴露给 public 互联网。
- App Engine 应用位于 us-central 区域
- 计算引擎实例位于区域 us-central1,区域 us-central1-f
- 计算引擎实例在 vpc 网络“默认”中。 (不是传统网络)
- 我在默认网络上的 us-central1 中设置了无服务器 VPC 连接器。
- 我已经设置了应用程序引擎 app.yaml 以使用连接器。
但是对计算引擎私有 IP 地址 (10.128.0.2) 的 http 请求连接失败,并且对计算引擎的内部 DNS 名称的 DNS 查找失败 编辑:dns查找确实可以使用 socket.gethostbyname
.
error: An error occured while connecting to the server: Unable to connect to server at URL: http://10.128.0.2:9200/indexname
使用 public IP 地址时(当我在端口 9200 上打开 VPC 防火墙时)相同的请求成功。
来自 App Engine 应用程序配置的代码段:
runtime: python27
api_version: '1'
env: standard
threadsafe: false
instance_class: F4
network:
name: default
vpc_access_connector:
name: >-
projects/myproject/locations/us-central1/connectors/connector0301
gcloud beta --account="myaccount" --project="myproject" 应用描述:
authDomain: gmail.com
codeBucket: staging.myproject.appspot.com
databaseType: CLOUD_DATASTORE_COMPATIBILITY
defaultBucket: myproject.appspot.com
defaultHostname: myproject.appspot.com
featureSettings:
splitHealthChecks: true
useContainerOptimizedOs: true
gcrDomain: us.gcr.io
id: myproject
locationId: us-central
name: apps/myproject
servingStatus: SERVING
gcloud beta --account="myaccount" --project="myproject" 计算实例描述(只是网络片段):
networkInterfaces:
- accessConfigs:
- kind: compute#accessConfig
name: External NAT
natIP: SNIPPED
networkTier: PREMIUM
type: ONE_TO_ONE_NAT
fingerprint: M087cXbOWII=
kind: compute#networkInterface
name: nic0
network: https://www.googleapis.com/compute/beta/projects/myproject/global/networks/default
networkIP: 10.128.0.2
subnetwork: https://www.googleapis.com/compute/beta/projects/myproject/regions/us-central1/subnetworks/default
gcloud beta --account="myaccount" --project="myproject" 计算网络 vpc-access
connectors list --region=us-central1
CONNECTOR_ID REGION NETWORK IP_CIDR_RANGE MIN_THROUGHPUT MAX_THROUGHPUT STATE
connector0301 us-central1 default 10.8.0.0/28 200 300 READY
gcloud beta --account="myaccount" --project="myproject" 计算网络 vpc-access 连接器描述 connector0301 --region=us-central1
ipCidrRange: 10.8.0.0/28
maxThroughput: 300
minThroughput: 200
name: projects/myproject/locations/us-central1/connectors/connector0301
network: default
state: READY
gcloud --account="myaccount" --project="myproject" 计算防火墙规则描述默认允许内部
allowed:
- IPProtocol: tcp
ports:
- 0-65535
- IPProtocol: udp
ports:
- 0-65535
- IPProtocol: icmp
creationTimestamp: '2020-02-11T11:18:09.906-08:00'
description: Allow internal traffic on the default network
direction: INGRESS
disabled: false
id: '1434668200291681054'
kind: compute#firewall
logConfig:
enable: true
name: default-allow-internal
network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default
priority: 65534
selfLink: https://www.googleapis.com/compute/v1/projects/myproject/global/firewalls/default-allow-internal
sourceRanges:
- 10.128.0.0/9
- 10.8.0.0/28
无服务器 VPC 连接器是否不适用于内部 IP http 请求?
Do serverless VPC connectors not work for internal IP http requests?
无服务器 VPC 连接器在 python37 运行时使用 urllib.request
用于内部 IP http 请求,但不使用 google.appengine.api
中的 urllib2
或 urlfetch
python27 运行时。 (提醒一下urllib2 uses urlfetch under the hood on app engine python27)
由于这是一个从 python27 慢慢转移到 python37 的旧项目的一部分,现在我将内部 ip http 请求放入一个单独的服务中,以便它们可以使用新的运行时.
我有一个 Google App Engine 应用程序(python 2.7 - 这是一个正在升级的旧项目!)需要在 Google 上查询 Elastisearch 实例计算引擎。我可以使用 GCE public ip 地址发出请求而不会出现问题,但我不想将 GCE 实例暴露给 public 互联网。
- App Engine 应用位于 us-central 区域
- 计算引擎实例位于区域 us-central1,区域 us-central1-f
- 计算引擎实例在 vpc 网络“默认”中。 (不是传统网络)
- 我在默认网络上的 us-central1 中设置了无服务器 VPC 连接器。
- 我已经设置了应用程序引擎 app.yaml 以使用连接器。
但是对计算引擎私有 IP 地址 (10.128.0.2) 的 http 请求连接失败,并且对计算引擎的内部 DNS 名称的 DNS 查找失败 编辑:dns查找确实可以使用 socket.gethostbyname
.
error: An error occured while connecting to the server: Unable to connect to server at URL: http://10.128.0.2:9200/indexname
使用 public IP 地址时(当我在端口 9200 上打开 VPC 防火墙时)相同的请求成功。
来自 App Engine 应用程序配置的代码段:
runtime: python27
api_version: '1'
env: standard
threadsafe: false
instance_class: F4
network:
name: default
vpc_access_connector:
name: >-
projects/myproject/locations/us-central1/connectors/connector0301
gcloud beta --account="myaccount" --project="myproject" 应用描述:
authDomain: gmail.com
codeBucket: staging.myproject.appspot.com
databaseType: CLOUD_DATASTORE_COMPATIBILITY
defaultBucket: myproject.appspot.com
defaultHostname: myproject.appspot.com
featureSettings:
splitHealthChecks: true
useContainerOptimizedOs: true
gcrDomain: us.gcr.io
id: myproject
locationId: us-central
name: apps/myproject
servingStatus: SERVING
gcloud beta --account="myaccount" --project="myproject" 计算实例描述(只是网络片段):
networkInterfaces:
- accessConfigs:
- kind: compute#accessConfig
name: External NAT
natIP: SNIPPED
networkTier: PREMIUM
type: ONE_TO_ONE_NAT
fingerprint: M087cXbOWII=
kind: compute#networkInterface
name: nic0
network: https://www.googleapis.com/compute/beta/projects/myproject/global/networks/default
networkIP: 10.128.0.2
subnetwork: https://www.googleapis.com/compute/beta/projects/myproject/regions/us-central1/subnetworks/default
gcloud beta --account="myaccount" --project="myproject" 计算网络 vpc-access
connectors list --region=us-central1
CONNECTOR_ID REGION NETWORK IP_CIDR_RANGE MIN_THROUGHPUT MAX_THROUGHPUT STATE
connector0301 us-central1 default 10.8.0.0/28 200 300 READY
gcloud beta --account="myaccount" --project="myproject" 计算网络 vpc-access 连接器描述 connector0301 --region=us-central1
ipCidrRange: 10.8.0.0/28
maxThroughput: 300
minThroughput: 200
name: projects/myproject/locations/us-central1/connectors/connector0301
network: default
state: READY
gcloud --account="myaccount" --project="myproject" 计算防火墙规则描述默认允许内部
allowed:
- IPProtocol: tcp
ports:
- 0-65535
- IPProtocol: udp
ports:
- 0-65535
- IPProtocol: icmp
creationTimestamp: '2020-02-11T11:18:09.906-08:00'
description: Allow internal traffic on the default network
direction: INGRESS
disabled: false
id: '1434668200291681054'
kind: compute#firewall
logConfig:
enable: true
name: default-allow-internal
network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default
priority: 65534
selfLink: https://www.googleapis.com/compute/v1/projects/myproject/global/firewalls/default-allow-internal
sourceRanges:
- 10.128.0.0/9
- 10.8.0.0/28
无服务器 VPC 连接器是否不适用于内部 IP http 请求?
Do serverless VPC connectors not work for internal IP http requests?
无服务器 VPC 连接器在 python37 运行时使用 urllib.request
用于内部 IP http 请求,但不使用 google.appengine.api
中的 urllib2
或 urlfetch
python27 运行时。 (提醒一下urllib2 uses urlfetch under the hood on app engine python27)
由于这是一个从 python27 慢慢转移到 python37 的旧项目的一部分,现在我将内部 ip http 请求放入一个单独的服务中,以便它们可以使用新的运行时.