Google Cloud 在2021年发布了 Private Service Connect 产品。Private Service Connect 允许跨属于不同群组、团队、项目或组织的 VPC 网络以私网方式使用 Google Cloud 上的服务。您可以使用由您定义且位于您的 VPC 网络内部的 IP 地址发布和使用服务。
● 您可以使用 Private Service Connect 端点访问 Google API 和服务。您可以选择使用 VPC Service Controls 保护您的 API 资源和数据。 您还可以通过使用方 HTTP(S) 服务控制来访问受支持的区域级 Google API 和服务。
● 您可以使用 Private Service Connect 端点连接到另一个 VPC 网络中的服务。
● 您可以使用 Private Service Connect 服务连接在您的 VPC 网络外部提供服务。
比如要从 VPC 内部或者自建机房通过私网访问 Google Cloud 的对象存储服务 Google Cloud Storage,可以通过建立 Private Service Connect 来进行访问。过去也可以用 Private Google Access 来进行访问,但是 IP 地址比较固定而且不能自由配置,现在用 Private Service Connect 方式访问是更灵活的一种方式。
下面通过具体操作步骤来举例如何使用 Private Service Connect 从 VPC 内部和 VPN 远端机房来访问 Google Cloud 对象存储。
二. 创建 Private Service Connect 端点
一. 开通需用到的服务和 VPC 配置
首先在 Google Cloud 控制台搜索到 Service Directory API 和 Cloud DNS API 并将其开通。
然后打开 VPC 相应区域子网的 Private Google Access 开关。打开后这个子网内的虚机才能通过私有网段和 Private Service Connect 端点访问 Google Cloud API。
二. 创建 Private Service Connect 端点
在创建端点之前,先确定端点要使用的 IP 地址。这个地址必须是一个 IPv4地址,既可以是 RFC-1918 私有地址,也可以是一个非私有地址。但是这个地址不能与 VPC 现有分配的地址段或者静态路由冲突。
在本示例,我们决定使用以下 IP 地址。
192.168.110.1/32
下面开始配置 Private Service Connect 端点。首先在 Private Service Connect 控制台界面点击新建端点。
在端点配置页面,给新建的端点指定名称和 VPC 网络,并且在 IP 地址栏选择新建一个 IP 对象。
在新建 IP 对象对话框,输入 IP 的名称以便以后管理,同时输入上面选择的端点 IP 地址192.168.110.1。然后点击保存。
在下一步,选择端点所属的 Service Directory 所在的区域,这个指的是 Service Directory 元数据所存放的区域,与数据平面实际的请求路由无关。这里如果选择新加坡区域,那么在北美的客户端使用 Private Service Connect 请求北美的存储桶的对象,不会把请求路由到新加坡,而是在北美就近路由。
点击完成后,可以在控制台看到端点创建成功,状态为已接受。
这时到 Cloud DNS 控制台查看,可以看到新建了一个 DNS Private Zone,其名称为 p.googleapis.com。这是创建 Private Service Connect 时自动创建的,用于向 VPC 内部发布 Google Cloud API 服务的私有访问地址解析。
这时到 Cloud DNS 控制台查看,可以看到新建了一个 DNS Private Zone,其名称为 p.googleapis.com。这是创建 Private Service Connect 时自动创建的,用于向 VPC 内部发布 Google Cloud API 服务的私有访问地址解析。
到这里,Private Service Connect 就配置完成了。下面可以测试请求访问。
三. 测试 VPC 内部访问
首先在 VPC 内新建一台没有公网地址的虚机。如果已有虚机也可以跳过这一步。
在虚机配置的网络部分,选择公网地址为 None,既不绑定公网地址。
虚机创建好后,使用跳板机或者 Identity-Aware Proxy 方式登录到虚机,测试访问 Private Service Connect 端点。首先访问 /generate_204,看是否能正确收到 HTTP 响应。
成功后,可以查看一下相应的私网 API 访问域名,看是否能正确解析。域名遵循的规则是,假如端点名为 xyz,而访问的 Google Cloud 服务为对象存储,而对象存储 API 的公网域名为 storage.googleapis.com,那么其在私网的域名为 storage-xyz.p.googleapis.com。本例的对象存储私网域名为 storage-pscgcs.p.googleapis.com。
下面在虚机上测试请求对象存储服务。首先修改 gsutil 工具的 boto 配置文件。
在文件的最上面添加以下内容来配置访问端点地址。
配置好后如下图所示。
保存完文件后,运行以下命令抓取 HTTPS 请求包。
在同一虚机上,新开一个 terminal 会话窗口,运行以下命令来列表存储桶。
可以看到命令执行成功,文件正确列出。
此时查看之前的抓包窗口,可以看到请求从一开始就被发送到了端点的私网地址,而不是公网地址或其它私网地址。而响应也从该地址返回。
四. 测试从外部网络私网访问
本例在 AWS 和 GCP 之间搭建一个 VPN 连接,然后从 AWS 侧虚机通过私网和 Private Service Connect 来访问 GCS 资源。
搭建 VPN 的步骤略。
1. 配置 Private Service Connect 端点的路由宣告
首先必须将 Private Service Connect 端点的私网地址路由通过 Cloud Router 宣告到 VPN 对端。配置定制路由宣告有两种方式,一种在 Cloud Router 级别,另一种在 BGP 会话级别。
Cloud Router 级别配置如下。首先进入控制台 Cloud Router 配置界面。
点击 Edit 按钮编辑 VPN 连接所使用的路由器配置。
选中创建自定义路由。然后在 Custom Ranges 里填入端点的地址的32位掩码网段192.168.110.1/32,然后保存。
另外,也可以选择执行 BGP 会话级别配置而不是路由器级别配置。
选择 VPN 所用路由器的详情页。点击要进行配置的 BGP 会话。
在会话详情页,选择创建自定义路由。然后在 Custom Ranges 里填入端点的地址的32位掩码网段192.168.110.1/32,然后保存。
2. 测试 gsutil 访问 GCS
登录到 VPN 在 AWS 侧 VPC 内的虚机,做以下操作来更改 gsutil 访问 GCS 的地址。
在文件中加入以下内容。
将刚创建的 boto 文件加入到环境变量配置。在文件中加入以下内容。
修改 hosts 文件加入上面用到的域名的自定义解析。
执行 gsutil 列表存储桶。可以看到返回成功。
同时在抓包的窗口,可以看到请求是发到了 Private Service Connect 端点的私网地址,而不是其它公网地址。
五. 配置 DNS 转发
在 AWS 的 VPC 上配置 DNS 相关集成,来实现虚机自动从 DNS 服务器获取端点地址解析。
GCP 创建完成 Private Service Connect 以后,Cloud DNS 会自动创建 p.googleapis.com 的 private zone。
为接收本地数据中心发来的 DNS 请求,创建 DNS Inbound Forwarding Policy。可以在 Cloud DNS 控制台界面选中 DNS SERVER POLICIES 标签然后点击新建 Policy。
建完成后,点击 policy 详情,获取 Inbound Query Forwarding IP。 例如新加坡区域,对应的 IP 地址为10.148.15.199。
在 AWS 环境中,在 Route53中创建一个 Outbond Endpoints 进行 DNS 的 outbound 转发。
创建一个 DNS 转发规则,将所有 p.googleapis.com 的请求都通过 Outbound Endpoint 转发到10.148.15.199。
在 EC2中模拟 DNS 请求,确认工作正常。
GCP Cloud Logging 查看 Inbound DNS 查询记录,源地址为 AWS 上配置的 Outbound Endpoint。
这时可以把之前在虚机上配置的 hosts 记录删掉,再测试 gsutil 命令,确认执行成功。
文章信息
相关推荐
