作者:MeshCloud脉时云 CSM 邓军
一、概述在日常GCP云服务的管理和使用过程中,有些服务往往因为安全或架构的原因仅具有内部 IP 地址。我们希望达到的目的是通过私网或者专用网络访问,而不是通过外部IP地址访问。这种使用场景我们一般通过专用服务访问通道去实现,其实现原理与VPC Peering相关,下面通过2个实践案例具体描述。
二、实践案例12.1 CASE详情介绍某客户通过控制台创建Filestroe(企业版)、memoryStore及Cloud Sql等实例报错。报错信息大致都为“IP ranger exhausted",并且这些服务在创建过程中都配置的“专用服务访问通道连接(PSA)”,我们通过收集故障信息时发现,例如Redis的报错如下图:
另外在故障发生之前,该客户由于云服务测试需要,创建和删除了PSA子网网段。在后续设置PSA的过程中保留了wod-prod-serviceip-range这个子网名称(网段不一样)。
2.2 故障原因分析
1. 客户在Cloud SQL 服务还未完全删除(Cloud SQL的删除有4天等待期)的同时,删除了PSC测试子网(但后台也并未删除)
(备注:这样的等待期机制是为了防止用户删除资源后,需要恢复资源而设置的,具体参考链接2)
2. 沿用旧的PSA子网名称导致新建资源失败。具体参考链接1
【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实践之网段划分建议
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位子网掩码的子网;
【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
(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 区域和记录配置截图:
配置私有zone DNS :
在VPC下添加⾃定义路由:
结果验证
未配置private Zone 解析结果:
配置后的解析结果验证
参考链接:
https://cloud.google.com/vpc/docs/configure-private-services-access#on-prem
四、关于PSA和PSC的区别在日常维护工作中,看简称经常将专用服务访问通道(Private services access,PSA)和专用服务连接(Private Service Connect,PSC)两者搞混淆。通过下图的对比,我们不难发现两者确实有着相似的功能。唯一的区别在于PSA支持GCP服务的同时,也兼具支持第三方服务。
云主机所在的 VPC 网络与 Cloud SQL 实例所在的底层 Google 服务 VPC 网络之间的 VPC 对等互连连接实现的。通过PSC或PSA,VPC 网络中的虚拟机实例与GCP云服务之间可以使用内部 IP 地址与进行专有的通信。虚拟机实例不需要接入互联网或具备外部 IP 地址,通过专用服务访问通道即可访问可用服务。
【1】参考链接:https://cloud.google.com/vpc/docs/private-access-options#connect-services
,