Google Cloud Private Service Connect,也就是PSC,解决的并不是一个简单的“如何让两台虚拟机走内网通信”的问题。它解决的是更高一层的服务连接问题:当一个应用需要访问另一个VPC、另一个项目、另一个组织,甚至Google或者第三方提供的托管服务时,怎样让消费者通过自己VPC中的内部IP访问目标服务,同时又不需要把双方整个网络直接打通。
这也是PSC和普通VPC内部通信、VPC Peering、Cloud VPN以及Cloud Interconnect之间最容易混淆的地方。普通VPC路由解决的是网络之间怎么互通,而PSC更强调“服务之间怎么连接”。消费者看到的是一个自己VPC中的内部endpoint,服务提供者则继续控制自己的VPC和后端基础设施。两边不需要共享整个网络的路由空间,也不需要让消费者直接访问服务提供者的VM地址。Google Cloud把这种模式称为service-oriented connectivity。
理解PSC最简单的方式,是把它分成service consumer和service producer两个角色。消费者是需要使用服务的一方,例如一个应用VPC需要访问另一个团队提供的API,或者企业需要访问第三方SaaS。生产者则是实际提供服务的一方,可以是企业自己的另一个VPC、另一个组织,也可以是Google或第三方服务商。生产者通过PSC发布服务,消费者在自己的VPC中创建endpoint,然后应用访问这个endpoint的内部IP。
这种模式最重要的价值,是消费者不需要获得服务提供者整个VPC的网络访问权限。假设公司A有一个数据库或内部API,部署在自己的VPC中,公司B也有自己的VPC。如果采用传统网络互联思路,可能需要考虑VPC Peering、Cloud VPN、Interconnect、路由交换、CIDR冲突以及防火墙策略等问题。一旦网络数量增加,网络连接关系很容易变成复杂的网状结构。
PSC则可以把问题缩小到“公司B只需要访问公司A提供的这个服务”。服务提供者通过内部TCP/UDP负载均衡器以及service attachment发布服务,消费者创建PSC endpoint。消费者的客户端访问自己VPC中的内部IP,PSC负责把请求转发到服务提供者的负载均衡后端。Google官方架构说明中,这个endpoint和service attachment都是逻辑网络资源,从实际网络路径看,请求最终会到达服务提供者负载均衡后面的后端。
这意味着PSC并不是传统意义上的“两个VPC合并”。服务消费者可以访问目标服务,但并不会因此获得服务提供者VPC中其他VM、子网或者内部服务的访问权限。这一点对于多租户SaaS尤其重要。一个SaaS厂商可以在自己的VPC里维护服务集群,而客户只通过PSC endpoint访问已经明确发布的服务,不需要把客户VPC与SaaS厂商的整个生产网络连接起来。
PSC还有一个很重要的角色,就是访问Google自己的托管服务和API。Google Cloud提供了专门的PSC endpoint,使VPC中的应用可以使用内部IP访问支持的Google APIs和服务。例如Cloud Storage、Bigtable等服务可以通过PSC endpoint进行访问。对于Google APIs,PSC endpoint可以使用VPC中的内部IP,并且可以配合DNS,让应用继续通过具有意义的主机名访问目标服务。Google明确说明,通过这种方式,流量可以保持在Google网络内部,而不是让应用直接面向公共可路由地址。
这里有一个非常容易产生误解的地方。使用Google默认的公共API hostname,并不意味着Google Cloud VM发出的流量一定真的绕到公共互联网。Google官方说明,即使某些Google服务的默认DNS名称解析到公共可路由IP,从Google Cloud资源发出的流量仍然可以留在Google网络中。PSC的意义并不只是“避免互联网”,而是进一步给消费者一个属于自己VPC的私有endpoint,让网络路径、DNS以及访问控制更加明确和可管理。
因此,PSC和“公网一定不安全、私网一定安全”的简单二分法也不准确。PSC提供的是网络连接方式和网络边界控制,并不会自动替应用完成身份认证、TLS加密、API授权或者数据库权限控制。一个通过PSC访问的API,仍然应该使用适当的TLS、身份认证和应用层授权。私有IP解决的是可达性和网络暴露面问题,不等于应用安全本身已经完成。
DNS在PSC架构中同样非常重要。消费者最终不应该把业务代码硬编码成某个PSC内部IP,而应该通过稳定的服务名称访问目标。对于发布服务,如果生产者配置了DNS域名,PSC和Service Directory可以在消费者VPC中自动建立相应的私有DNS配置;对于某些Google API的PSC endpoint,则需要按照具体endpoint类型配置相应的私有DNS记录。
这也说明原文把Service Directory描述成PSC通信必须依赖的“服务发现系统”并不准确。Service Directory可以与PSC结合,用于服务注册和发现,但PSC本身的核心网络机制是endpoint、forwarding rule、service attachment以及相关的负载均衡架构。某些配置下DNS记录可以由PSC和Service Directory协同创建,另一些场景则需要用户自己配置Cloud DNS。不能把所有PSC连接都理解成“先到Service Directory查IP,再通过路由表通信”。
PSC的另一个优势是服务提供者可以控制谁能够连接自己的服务。生产者创建service attachment时,可以配置连接接受策略。在适合的多租户服务架构中,可以针对具体消费者endpoint进行授权,而不是把整个VPC暴露给所有潜在客户。Google的PSC部署文档也明确支持通过consumer accept list等方式控制哪些消费者可以建立连接。
对于企业内部的平台团队来说,这种模式尤其适合共享服务。例如公司有一个统一的支付API、身份服务、日志平台或者数据服务,平台团队可以把服务部署在自己的VPC中,然后通过PSC向多个业务VPC提供服务。业务团队不需要知道平台服务背后究竟有多少VM、负载均衡器和子网,只需要获得一个内部endpoint并按照规定的DNS名称调用即可。服务提供者可以继续独立扩容和维护后端,而消费者网络不需要随着后端拓扑发生变化。
第三方SaaS也是PSC的重要使用场景。Google官方列出的典型场景包括第三方服务,例如MongoDB、Snowflake等。这里的关键不是“第三方SaaS把服务器搬进你的VPC”,而是通过PSC建立一种受控的私网服务访问关系。服务生产者仍然拥有自己的基础设施和网络,消费者则通过自己的VPC endpoint访问服务。
PSC还可以用于Cloud SQL等Google托管服务。此时Google作为服务生产者,企业VPC作为消费者。这样的架构与“数据库直接给你一个公网IP”完全不同。应用通过自己的网络环境访问服务endpoint,服务背后的基础设施仍由Google管理。对于需要控制网络暴露面、满足内部网络架构要求的企业,这种服务连接方式比单纯开放公网地址更加容易纳入统一网络治理。
跨区域问题则需要特别谨慎。PSC并不是说“所有PSC服务天然都可以跨区域”。对于访问published service的普通PSC endpoint,endpoint与目标published service存在明确的区域要求;Google当前文档说明,访问published service的endpoint必须与目标服务位于同一区域。不过PSC endpoint可以配置global access,使其他区域的客户端访问这个endpoint,从而形成跨区域访问路径。
因此,“PSC支持跨区域”不能简单理解成“把两个不同区域的服务直接变成同一个本地内网服务”。开启global access以后,客户端可以从其他区域访问该endpoint,但跨区域的数据仍然存在物理距离和跨区域网络路径。延迟、带宽、区域间流量成本以及服务本身是否支持global access,都需要单独评估。Google也明确指出,并非所有PSC服务都支持global access。
访问Google API的PSC endpoint又有一些不同。Google支持regional和multi-regional API endpoint,可以根据服务类型选择区域或多区域目标。如果企业有数据驻留要求,regional或multi-regional endpoint的选择就不仅仅是性能问题,还涉及数据传输路径和所在区域。Google文档明确建议在需要控制数据所在区域或多区域范围时考虑regional或multi-regional endpoint。
PSC也并不意味着所有网络流量都免费。消费者使用PSC endpoint会产生相应的PSC资源成本,生产者侧则存在按处理数据量计算的费用。此外,跨区域流量、负载均衡、网络出口以及其他Google Cloud网络服务仍可能产生各自的费用。Google当前PSC定价说明中,消费者主要按endpoint计费,生产者则按处理的数据量计费,因此在高流量服务中,不能因为使用了“私网”就假设网络成本可以忽略。
PSC和VPC Peering的选择也不能简单归结成“PSC更安全,所以全部使用PSC”。VPC Peering更适合需要网络层互通的场景,也就是说双方需要让大量内部资源按照私有IP直接通信。而PSC更适合服务级暴露,一个消费者只需要访问另一个网络中的某项服务,并不需要访问对方整个网络。两者解决的问题不同。对于大型企业,这种区别会直接影响网络边界、权限模型、路由复杂度以及后期运维成本。
Cloud VPN和Cloud Interconnect也属于不同层次的解决方案。它们主要解决VPC与外部网络、数据中心或其他网络之间的连接,而PSC则解决服务消费者如何访问服务生产者。两者甚至可以组合使用。例如企业办公室或者本地数据中心通过Cloud VPN或Cloud Interconnect进入Google Cloud VPC之后,还可以访问该VPC中的PSC endpoint。Google目前也支持通过连接网络访问PSC endpoint,这意味着PSC并不局限于“只有Google Cloud VM才能使用”。
更进一步,Google目前还提供PSC interfaces,用于解决一些需要反向连接的场景。普通PSC endpoint主要体现的是“消费者主动访问生产者”,而PSC interface可以让服务生产者向消费者网络发起连接。两者不要混为一谈。对于绝大多数传统API访问,endpoint模式已经足够;当托管服务需要反向访问消费者网络中的资源时,PSC interface才进入设计范围。
从架构设计角度看,PSC最值得理解的不是“它让流量走内网”,而是它改变了云网络之间的连接粒度。传统网络互联往往以VPC、子网和路由为单位,而PSC可以把边界收缩到具体服务。服务生产者暴露的是服务,不是整个网络;消费者获得的是服务endpoint,不是对方VPC的完整路由。这种服务级网络边界对于微服务、企业共享平台、第三方SaaS以及多租户架构尤其有价值。
如果只是同一个VPC里的两台VM通信,通常根本不需要PSC,直接使用VPC内部网络即可。如果两个VPC需要大量双向网络资源互通,VPC Peering、Network Connectivity Center、Cloud VPN或者Cloud Interconnect可能更加合适。如果企业需要访问Google API,可以根据服务和安全要求考虑Private Google Access或者PSC endpoint。如果需要把某个服务安全地提供给另一个独立VPC、项目或组织,PSC往往更符合“只开放服务、不开放整个网络”的设计思想。
PSC最终解决的是云时代一个越来越常见的问题:服务属于谁、网络属于谁、谁可以访问谁,以及访问权限应该开放到什么粒度。它不是简单的私网IP技术,也不是VPC路由的替代品,更不是一种自动解决安全、性能和成本问题的万能网络组件。把PSC放在服务消费者、服务生产者、endpoint、service attachment、DNS和负载均衡这些概念之间理解,才能看清它为什么会成为Google Cloud大型企业和SaaS架构中非常重要的一层网络基础设施。
Google Cloud Private Service Connect 有什么用途,云服务之间如何进行私网访问
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP