Google cloud platform 在部署管理器中使用“gcloud服务vpc对等连接”
我正在.jinja中设置一个部署管理器包,它执行以下操作: -为GCP服务创建VPC网络、子网和专用范围 -在“servicenetworking.googleapis.com”和我的VPC网络之间创建对等 -将云SQL数据库分配到分配给我的专有网络中的谷歌服务的私有范围 第二步在部署管理器中被证明是不可能的,因为没有可以调用的操作来完成这一步。我已经确认,现阶段手动修复是调用以下gcloud命令,然后在VPC中设置云SQL数据库:Google cloud platform 在部署管理器中使用“gcloud服务vpc对等连接”,google-cloud-platform,google-deployment-manager,google-cloud-networking,Google Cloud Platform,Google Deployment Manager,Google Cloud Networking,我正在.jinja中设置一个部署管理器包,它执行以下操作: -为GCP服务创建VPC网络、子网和专用范围 -在“servicenetworking.googleapis.com”和我的VPC网络之间创建对等 -将云SQL数据库分配到分配给我的专有网络中的谷歌服务的私有范围 第二步在部署管理器中被证明是不可能的,因为没有可以调用的操作来完成这一步。我已经确认,现阶段手动修复是调用以下gcloud命令,然后在VPC中设置云SQL数据库: gcloud services vpc-peerings co
gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --ranges=<my-range> --network=<my-network> --project=<my-project>
是否有一种方法可以从部署管理器调用gcloud命令,或者我可以调用一个操作来实现服务对等。我可以确认项目中确实启用了服务API
请注意,目标VPC和项目是可变的,由Google分配,因此我无法在上述模板中输入此值
更新日期:05/07/19
我相信我已经找到了我需要执行的API服务调用,但我非常不确定从deployment manager实际调用以创建服务链接的语法:
需要一点方向-类似于下面
- name: {{ env['deployment' ]}}-gcp-private-vpc-peering
action: gcp-types/servicenetworking.googleapis.com:services.connections
metadata:
runtimePolicy:
- CREATE
properties:
propertyA: valueA
...
创建对等所需的唯一参数是网络和ReservedEngineeringRanges。下面是它们的语法 网络:projects/{project}/global/networks/{network} 预留工程范围:x.x.x.x/x 我想你们可能在网络中遗漏了一些变量。我使用API对它进行了测试,它可以正常工作。@u-phoria 你是对的,这是他们目前正在准备的东西 我已经为此向他们提出了一份产品改进通知单,可以在这里看到: 部署管理器不支持云SQL的专用VPC对等。 这导致需要从相关VPC中升级的priviledge VM实例执行VPC对等,因为这是最安全的选项 2019年7月9日更新 执行此操作所需的资源示例如下所示:
{# Bootstrapped box to complete the VPC Peering Setup #}
- name: {{ env['deployment'] }}-peering-setup
type: compute.v1.instance
properties:
{# Checking whether the creation of new resources are specified #}
{% if properties['createNewResources'] %}
zone: {{ properties["zone"] }}
machineType: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/zones/{{ properties["zone"] }}/machineTypes/f1-micro
networkInterfaces:
- network: $(ref.{{ env['deployment']}}-network.selfLink)
subnetwork: $(ref.{{ env['deployment']}}-subnetwork.selfLink)
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
{% else %}
zone: {{ common.ZONES[0] }}
machineType: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/zones/{{ common.ZONES[0] }}/machineTypes/f1-micro
networkInterfaces:
- network: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/global/networks/default
subnetwork: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/regions/{{ common.REGION }}/subnetworks/default
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
{% endif %}
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
metadata:
items:
- key: startup-script
value: |
{# Creating VPC Peering to Google Services for the Managed Postgres in the existing network or the newly created one #}
{% if properties['createNewResources'] %}
#!/bin/bash
sudo su -
echo "Checking relevant peering connections to google services exist in local VPC" >> checking-status.sh
output=$(gcloud services vpc-peerings list --network={{ env['deployment'] }}-network | grep "servicenetworking.googleapis.com")
if [[ -z $output ]]; then
echo "Peering not found, creating peering to servicenetworking.googleapis.com from private VPC" && gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --ranges={{ env['deployment'] }}-google-managed-services --network={{ env['deployment'] }}-network
else
echo "No peering created as relevant peering already exists"
fi
echo "Sending the signal to deployment manager to carry on with the deployment"
gcloud beta runtime-config configs variables set success/{{ env['deployment'] }}-vpc-peering-setup success --config-name {{ env['deployment'] }}-startup-config
echo "Destroying this instance now that it has succesfully executed peering change"
gcloud compute instances delete --quiet --delete-disks=all --zone=europe-west1-b {{ env['deployment'] }}-peering-setup
{% else %}
#!/bin/bash
sudo su -
echo "Checking relevant peering connections to google services exist in local VPC" >> checking-status.sh
output=$(gcloud services vpc-peerings list --network={{ properties['network'] }} | grep "servicenetworking.googleapis.com")
if [[ -z $output ]]; then
echo "Known GCP bug when re-creating GCP peering deployment into the same network reserved range, using the workaround published here: https://issuetracker.google.com/issues/118849070 and here https://github.com/terraform-providers/terraform-provider-google/issues/3294 to make sure this has no effect on the deployment"
gcloud beta services vpc-peerings update --service=servicenetworking.googleapis.com --ranges={{ env['deployment'] }}-google-managed-services --network={{ properties['network'] }} --project={{ env['project'] }} --force
echo "Peering not found, creating peering to servicenetworking.googleapis.com from private VPC" && gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --ranges={{ env['deployment'] }}-google-managed-services --network={{ properties['network'] }}
else
echo "No peering created as relevant peering already exists"
fi
echo "Sending the signal to deployment manager to carry on with the deployment"
gcloud beta runtime-config configs variables set success/{{ env['deployment'] }}-vpc-peering-setup success --config-name {{ env['deployment'] }}-startup-config
echo "Destroying this instance now that it has succesfully executed peering change"
gcloud compute instances delete --quiet --delete-disks=all --zone=europe-west1-b {{ env['deployment'] }}-peering-setup
{% endif %}
serviceAccounts:
- email: default
scopes:
- 'https://www.googleapis.com/auth/cloud-platform'
- 'https://www.googleapis.com/auth/cloudruntimeconfig'
dependsOn:
- $(ref.{{ env['deployment'] }}-google-managed-services.selfLink)
{% if properties['createNewResources'] %}
- $(ref.{{ env['deployment'] }}-subnetwork.selfLink)
{% endif %}
- name: {{ env['deployment'] }}-google-managed-services
type: compute.v1.globalAddresses
properties:
name: google-managed-services-{{ env['deployment'] }}
{% if properties['createNewResources'] %}
address: 10.73.144.0
prefixLength: 20
{% else %}
address: {{ CIDRSplit[0] }}
prefixLength: {{ CIDRSplit[1] }}
{% endif %}
addressType: INTERNAL
purpose: VPC_PEERING
{# Create the peering to the new network or the specified one #}
{% if properties['createNewResources'] %}
network: $(ref.{{ env['deployment']}}-network.selfLink)
{% else %}
network: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/global/networks/{{ properties['network'] }}
{% endif %}
description: >
Address range reserved for Google Managed Services.
https://cloud.google.com/vpc/docs/configure-private-services-access
{% if properties['createNewResources'] %}
dependsOn:
- $(ref.{{ env['deployment']}}-network.selfLink)
{% endif %}
因此,如果在这种情况下设置了相关参数createNewResources标志,它将在两个网络之间创建vpc对等
请记住,在执行上述jinja之前,您还必须为此设置一个全局地址范围。这方面的示例如下所示:
{# Bootstrapped box to complete the VPC Peering Setup #}
- name: {{ env['deployment'] }}-peering-setup
type: compute.v1.instance
properties:
{# Checking whether the creation of new resources are specified #}
{% if properties['createNewResources'] %}
zone: {{ properties["zone"] }}
machineType: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/zones/{{ properties["zone"] }}/machineTypes/f1-micro
networkInterfaces:
- network: $(ref.{{ env['deployment']}}-network.selfLink)
subnetwork: $(ref.{{ env['deployment']}}-subnetwork.selfLink)
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
{% else %}
zone: {{ common.ZONES[0] }}
machineType: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/zones/{{ common.ZONES[0] }}/machineTypes/f1-micro
networkInterfaces:
- network: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/global/networks/default
subnetwork: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/regions/{{ common.REGION }}/subnetworks/default
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
{% endif %}
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
metadata:
items:
- key: startup-script
value: |
{# Creating VPC Peering to Google Services for the Managed Postgres in the existing network or the newly created one #}
{% if properties['createNewResources'] %}
#!/bin/bash
sudo su -
echo "Checking relevant peering connections to google services exist in local VPC" >> checking-status.sh
output=$(gcloud services vpc-peerings list --network={{ env['deployment'] }}-network | grep "servicenetworking.googleapis.com")
if [[ -z $output ]]; then
echo "Peering not found, creating peering to servicenetworking.googleapis.com from private VPC" && gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --ranges={{ env['deployment'] }}-google-managed-services --network={{ env['deployment'] }}-network
else
echo "No peering created as relevant peering already exists"
fi
echo "Sending the signal to deployment manager to carry on with the deployment"
gcloud beta runtime-config configs variables set success/{{ env['deployment'] }}-vpc-peering-setup success --config-name {{ env['deployment'] }}-startup-config
echo "Destroying this instance now that it has succesfully executed peering change"
gcloud compute instances delete --quiet --delete-disks=all --zone=europe-west1-b {{ env['deployment'] }}-peering-setup
{% else %}
#!/bin/bash
sudo su -
echo "Checking relevant peering connections to google services exist in local VPC" >> checking-status.sh
output=$(gcloud services vpc-peerings list --network={{ properties['network'] }} | grep "servicenetworking.googleapis.com")
if [[ -z $output ]]; then
echo "Known GCP bug when re-creating GCP peering deployment into the same network reserved range, using the workaround published here: https://issuetracker.google.com/issues/118849070 and here https://github.com/terraform-providers/terraform-provider-google/issues/3294 to make sure this has no effect on the deployment"
gcloud beta services vpc-peerings update --service=servicenetworking.googleapis.com --ranges={{ env['deployment'] }}-google-managed-services --network={{ properties['network'] }} --project={{ env['project'] }} --force
echo "Peering not found, creating peering to servicenetworking.googleapis.com from private VPC" && gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --ranges={{ env['deployment'] }}-google-managed-services --network={{ properties['network'] }}
else
echo "No peering created as relevant peering already exists"
fi
echo "Sending the signal to deployment manager to carry on with the deployment"
gcloud beta runtime-config configs variables set success/{{ env['deployment'] }}-vpc-peering-setup success --config-name {{ env['deployment'] }}-startup-config
echo "Destroying this instance now that it has succesfully executed peering change"
gcloud compute instances delete --quiet --delete-disks=all --zone=europe-west1-b {{ env['deployment'] }}-peering-setup
{% endif %}
serviceAccounts:
- email: default
scopes:
- 'https://www.googleapis.com/auth/cloud-platform'
- 'https://www.googleapis.com/auth/cloudruntimeconfig'
dependsOn:
- $(ref.{{ env['deployment'] }}-google-managed-services.selfLink)
{% if properties['createNewResources'] %}
- $(ref.{{ env['deployment'] }}-subnetwork.selfLink)
{% endif %}
- name: {{ env['deployment'] }}-google-managed-services
type: compute.v1.globalAddresses
properties:
name: google-managed-services-{{ env['deployment'] }}
{% if properties['createNewResources'] %}
address: 10.73.144.0
prefixLength: 20
{% else %}
address: {{ CIDRSplit[0] }}
prefixLength: {{ CIDRSplit[1] }}
{% endif %}
addressType: INTERNAL
purpose: VPC_PEERING
{# Create the peering to the new network or the specified one #}
{% if properties['createNewResources'] %}
network: $(ref.{{ env['deployment']}}-network.selfLink)
{% else %}
network: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/global/networks/{{ properties['network'] }}
{% endif %}
description: >
Address range reserved for Google Managed Services.
https://cloud.google.com/vpc/docs/configure-private-services-access
{% if properties['createNewResources'] %}
dependsOn:
- $(ref.{{ env['deployment']}}-network.selfLink)
{% endif %}
我希望这对某人有所帮助。感谢您的回复-我同意API中的说法,它的功能与预期一致,这可以通过调用问题中概述的gcloud命令来证明gcloud services vpc对等连接-service=servicenetworking.googleapis.com…`但是,当我尝试从部署管理器模板模拟这种对等时,我无法创建到google服务的对等。请您简要介绍一下如何从deployment manager资源执行此操作?我发现在创建对等网络之前,必须成功创建网络。要在同一YAML中执行此操作,您需要使用dependsOn[1]选项,以确保已创建网络,并且在删除部署时,应使用removePeering[2]方法。然后网络就可以被删除了。我认为这可能是你面临的问题。[1] :[2]:servicenetworking API似乎当前不在部署管理器的GCP类型提供程序列表中:。