作者:MeshCloud脉时云公有云架构师吴子成
Google Cloud Platform(GCP)提供了几种网络选项,可以连接多个项目的资源。 最受欢迎的两个选项是Shared VPC和VPC Peering。 这两个选项都允许您在不同项目中连接VPCs,并启用一个项目中的资源与另一个项目中的资源进行通信。
在本文中,我们将介绍Shared VPC和VPC Peering,并向您展示如何使用它们跨项目访问CloudSQL实例。
1.Shared VPC概述
Shared VPC是一个网络功能,可让您在多个项目之间共享VPC网络。 使用Shared VPC,在一个项目中创建了VPC网络,并与其他项目共享。 其他项目中的资源可以连接到共享的VPC网络,这使它们能够相互通信。
这是两个项目之间的Shared VPC的架构图:
使用Shared VPC,您可以创建单个VPC网络并与多个项目共享。 这意味着您可以集中您的网络配置和安全策略,同时仍允许不同项目中的资源相互通信。
2.VPC Peering概述
VPC Peering是另一个网络功能,可让您通过虚拟网络对等连接在不同项目中连接两个VPC网络。 建立对等连接后,两个VPC网络中的资源都可以直接相互通信,就好像它们在同一VPC网络中一样。
这是两个项目之间的VPC Peering的架构图:
借助VPC Peering,您可以访问另一个项目中的资源,例如Compute Engine实例,Kubernetes Engine Clusters和App Engine应用程序等。
3.通过Shared VPC跨项目访问CloudSQL
通过Shared VPC,使得项目A中的Compute Engine实例可以访问项目B中的CloudSQL实例,您需要遵循以下步骤:
- 设置一个共享的VPC网络,该网络跨越两个项目
- 在两个项目中Compute Engine API。
- 在项目A中将GCE实例附加到共享的VPC网络,在项目B创建一个需要访问CloudSQL实例并附加到共享的VPC网络。
- 创建防火墙规则,以允许来自GCE的流量访问CloudSQL实例的内网IP地址。
3.1 Demo示例:
在测试环境中,为了方便演示:
- 简化了防火墙规则,放行所有协议和所有IP地址。
- 按最小权限原则,预先配置好了必要的IAM权限,不在本文中展开说明。
3.1.1在项目A中配置好Shared VPC
3.1.2 创建GCE,选择Shared VPC的子网
3.1.3 在项目B中创建CloudSQL,选择Shared VPC的子网
3.1.4 验证项目A的GCE访问项目B的mysql5.7
4.通过VPC Peering跨项目访问CloudSQL
通过VPC Peering,使得项目A中的Compute Engine实例可以访问项目B中的CloudSQL实例,您需要遵循以下步骤:
- 在两个项目的VPC网络之间启用VPC Peering。您可以使用GCP控制台或gcloud命令行工具来执行此操作。
- 在两个项目中Compute Engine API。
- 在项目A中VPC中创建GCE实例,在项目B的VPC中创建一个需要访问CloudSQL实例,和用于转发流量的GCE实例。
- 创建防火墙规则,以允许来自项目A的GCE的流量访问项目B中用于转发流量的GCE实例。
需要注意的是,不支持跨VPC peering传递路由,具体限制可参考:
Only directly peered networks can communicate. Transitive peering is not supported. In other words, if VPC network N1 is peered with N2 and N3, but N2 and N3 are not directly connected, VPC network N2 cannot communicate with VPC network N3 over VPC Network Peering.[1]
所以我们在项目B需要用一台GCE实例实现流量转发。
在生产环境中,考虑到高可用性,建议采用ILB+MIG的方式来实现流量转发,而不是单个实例。
4.1 Demo示例:
在测试环境中,为了方便演示:
- 简化了防火墙规则,放行所有协议和所有IP地址。
- 按最小权限原则,预先配置好了必要的IAM权限,不在本文中展开说明。
4.1.1配置VPC Peering
项目A和项目B都需要配置
4.1.2 在项目B创建GCE实例作为发起连接的客户端
4.1.3 在项目A创建CloudSQL实例和用于转发流量的GCE实例
转发流量可以用iptables或者nginx,这里展示nginx的配置方法
#安装nginx
yum install -y nginx
yum install -y nginx-mod-stream
#ngixn配置文件/etc/nginx/nginx.conf内容如下:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
stream {
upstream mysql8 {
server 10.80.0.3:3306 max_fails=1 fail_timeout=2s;
}
server {
listen 3306;
proxy_pass mysql8;
}
}
4.1.4 验证项目B的client实例访问项目A的nat实例3306端口连接mysql8.0
5.总结
在本文中,我们介绍了Shared VPC和VPC Peering,这两个网络功能使您可以在GCP中的多个项目中连接资源。 我们向您展示了如何使用这些功能跨项目访问云SQL实例,并提供了架构图以帮助说明设置。
通过使用Shared VPC和VPC Peering,您可以简化网络配置和安全策略,同时仍然允许不同项目中的资源相互通信。 当您需要访问云SQL实例之类的资源时,这通常会特别有用,而云SQL实例通常部署在专用项目中。
6.参考资料
[1]https://cloud.google.com/vpc/docs/vpc-peering