作者:MeshCloud脉时云 CSM 邓军

一、概述

在日常GCP云服务的管理和使用过程中,有些服务往往因为安全或架构的原因仅具有内部 IP 地址。我们希望达到的目的是通过私网或者专用网络访问,而不是通过外部IP地址访问。这种使用场景我们一般通过专用服务访问通道去实现,其实现原理与VPC Peering相关,下面通过2个实践案例具体描述。

二、实践案例12.1 CASE详情介绍

某客户通过控制台创建Filestroe(企业版)、memoryStore及Cloud Sql等实例报错。报错信息大致都为“IP ranger exhausted",并且这些服务在创建过程中都配置的“专用服务访问通道连接(PSA)”,我们通过收集故障信息时发现,例如Redis的报错如下图:

gcp通俗理解(GCP专用服务访问PSA)(1)

另外在故障发生之前,该客户由于云服务测试需要,创建和删除了PSA子网网段。在后续设置PSA的过程中保留了wod-prod-serviceip-range这个子网名称(网段不一样)。

gcp通俗理解(GCP专用服务访问PSA)(2)

2.2 故障原因分析

1. 客户在Cloud SQL 服务还未完全删除(Cloud SQL的删除有4天等待期)的同时,删除了PSC测试子网(但后台也并未删除)

(备注:这样的等待期机制是为了防止用户删除资源后,需要恢复资源而设置的,具体参考链接2)

gcp通俗理解(GCP专用服务访问PSA)(3)

2. 沿用旧的PSA子网名称导致新建资源失败。具体参考链接1

gcp通俗理解(GCP专用服务访问PSA)(4)

【1】修改PSA配置,参考链接:

HTTPS://cloud.google.com/sql/docs/Mysql/configure-private-services-access#change-psa-config

【2】删除专用连接,参考链接:

https://cloud.google.com/vpc/docs/configure-private-services-access?hl=zh_cn#removing-connection

2.3 故障恢复方式

1. 建议客户新建PSA子网,采用新的子网名称并使用新的子网网段;

2. 根据这种情况,建议每个服务一个子网。或者至少像mysql这种服务采用独立子网,其他服务可以混用一个大的(建议16位)的PSA子网。(更多服务子网会增加VPC Peer数量,如果是超大规模资源架构需要考虑Peer数量导致的Hard Limit,具体在第2.4节描述)

2.4 PSA实践之网段划分建议

gcp通俗理解(GCP专用服务访问PSA)(5)

1. 各服务PSA最小子网划分建议

(1)mysql:专用服务连接分配网段大小最小 /24

(2)memorystore:专用服务连接分配网段大小最小 /29,如果要使用直联模式且有只读副本实例的,建议最小/28

(3)filestore:专用服务连接分配网段大小最小 基本层级:/29 企业和大规模:/24

2. 关于PSA的特性

(1)PSA是单region级别,跨region服务不可共用同一个PSC;

(2)同region内的GCP服务可共用同一个PSA,建议根据业务规划采用16位子网掩码的子网;

gcp通俗理解(GCP专用服务访问PSA)(6)

gcp通俗理解(GCP专用服务访问PSA)(7)

【1】关于对等连接的数量导致的限制条件,参考链接:

https://cloud.google.com/vpc/docs/quota?hl=zh-cn#vpc-peering

【2】关于PSA的概览特性介绍,参考链接:

https://cloud.google.com/vpc/docs/private-services-access

三、实践案例23.1 CASE详情介绍

在某个混合云场景中,在专线打通的前提下on-premsies主机是无法直接访问谷歌服务的。首先通过更新对等互连连接,以将自定义路由导出到服务提供方的网络。导出路由时, VPC 网络中符合条件的静态和动态路由(例如本地网络的路由)会发送至服务提供方的网络。服务提供方的网络会自动导入这些数据,然后通过 VPC 网络将流量发回至您的本地网络。其次,完成路由同步以后,仍然需要PSA的功能实现。

本地主机的专用 Google 访问通道要求必须先将private.googleapi.com和restricted.googleapi.com这两个域名之一做重定向,这决定了可以访问的服务。

private.googleapis.com 和 restricted.googleapis.com VIP 仅支持 TCP 上基于 HTTP 的协议(HTTP、HTTPS 和 HTTP/2)。不支持所有其他协议,包括 MQTT 和 ICMP(这意味着这两个域名,不能被PING通)。

具体参考:https://cloud.google.com/vpc/docs/configure-private-google-access#domain-options

3.2 CASE实践步骤

(1)选择要实现功能的GCP API或服务的域名。本CASE选择accounts.google.com

gcp通俗理解(GCP专用服务访问PSA)(8)

(2)配置Cloud DNS中的解析记录

详细步骤:

1、 在Cloud DNS 中配置accounts.google.com CNAME 到 • private.googleapis.com.

2、添加 • private.googleapis.com. A 记录,解析到 199.36.153.8/30

3、配置路由

4、验证解析

为 accounts.google.com 创建 DNS 区域和记录配置截图:

gcp通俗理解(GCP专用服务访问PSA)(9)

配置私有zone DNS :

gcp通俗理解(GCP专用服务访问PSA)(10)

在VPC下添加⾃定义路由:

gcp通俗理解(GCP专用服务访问PSA)(11)

结果验证

未配置private Zone 解析结果:

gcp通俗理解(GCP专用服务访问PSA)(12)

配置后的解析结果验证

gcp通俗理解(GCP专用服务访问PSA)(13)

参考链接:

https://cloud.google.com/vpc/docs/configure-private-services-access#on-prem

四、关于PSA和PSC的区别

在日常维护工作中,看简称经常将专用服务访问通道(Private services access,PSA)和专用服务连接(Private Service Connect,PSC)两者搞混淆。通过下图的对比,我们不难发现两者确实有着相似的功能。唯一的区别在于PSA支持GCP服务的同时,也兼具支持第三方服务。

gcp通俗理解(GCP专用服务访问PSA)(14)

云主机所在的 VPC 网络与 Cloud SQL 实例所在的底层 Google 服务 VPC 网络之间的 VPC 对等互连连接实现的。通过PSC或PSA,VPC 网络中的虚拟机实例与GCP云服务之间可以使用内部 IP 地址与进行专有的通信。虚拟机实例不需要接入互联网或具备外部 IP 地址,通过专用服务访问通道即可访问可用服务。

【1】参考链接:https://cloud.google.com/vpc/docs/private-access-options#connect-services

,