配置 VPC 对等互连

在 Datastream 中,VPC 网络对等互连可让您使用内部 IP 地址在虚拟私有云 (VPC) 网络与 Datastream 之间建立专用连接。在创建专用连接配置之前,请查看支持的网络拓扑,并完成 VPC 和共享 VPC 前提条件。如需连接到 Cloud SQL 实例,您还可以在 VPC 网络中设置 NAT 虚拟机。

Datastream 中的 VPC 网络对等互连简介

使用专用连接可在 Datastream 网络上建立专属的连接,不与任何其他客户共享。

您的 VPC 网络与 Datastream VPC 网络之间的 VPC 网络对等互连连接可让 Datastream 连接到:

您的 VPC 网络与 Datastream VPC 网络之间的 VPC 网络对等互连连接不允许 Datastream 连接到:

  • 位于 VPC 网络中的 Private Service Connect 端点。
  • 位于与您的 VPC 网络对等互连但不与 Datastream VPC 网络对等互连的其他 VPC 网络中的资源,因为 VPC 网络对等互连不提供传递性路由。

如需在 Datastream 与只能从 VPC 网络访问的资源(例如 Cloud SQL 实例)之间建立连接,您可以在 VPC 网络中使用网络地址转换 (NAT) 虚拟机。下图展示了一个 NAT 虚拟机配置示例,该配置可让 Datastream 私密连接到 Cloud SQL 实例:

Datastream 用户流程图

VPC 对等互连前提条件

在创建专用连接配置之前,您需要先按以下步骤操作,以便 Datastream 能够创建与您的项目的 VPC 对等互连连接:

  • 拥有一个可与 Datastream 的专用网络对等互连且满足 VPC 网络对等互连页面中所述要求的 VPC 网络。如需详细了解如何创建此网络,请参阅使用 VPC 网络对等互连。
  • 在 VPC 网络上确定可用的 IP 范围(CIDR 块为 /29)。此 IP 范围不能是已作为子网存在的 IP 范围、专用服务访问通道预分配的 IP 范围,或包含该 IP 范围的任何路由(默认 0.0.0.0 路由除外)。该 IP 范围也不能与 Datastream 保留的内部 IP 范围(10.1.0.0/16 和 10.2.2.0/24)重叠。Datastream 会使用此 IP 范围创建子网,以便与源数据库通信。下表介绍了有效 IP 范围。
范围 说明
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
专用 IP 地址 RFC 1918
100.64.0.0/10 共享地址空间 RFC 6598
192.0.0.0/24 IETF 协议分配 RFC 6890
192.0.2.0/24 (TEST-NET-1)
198.51.100.0/24 (TEST-NET-2)
203.0.113.0/24 (TEST-NET-3)
文档 RFC 5737
192.88.99.0/24 IPv6 到 IPv4 中继(已弃用)RFC 7526
198.18.0.0/15 基准测试 RFC 2544
  • 确保 VPC 网络中与 Datastream 通信的所有资源(例如 NAT 虚拟机、内部负载均衡器或来源和目标数据库)均不使用 10.1.0.0/16 或 10.2.2.0/24 范围内的 IP 地址。这些范围是为 Datastream 内部基础设施预留的,如果将它们用于您的资源,可能会导致路由冲突和不可预测的连接故障。

  • 验证 Google Cloud 和本地防火墙是否允许来自所选 IP 范围的流量。如果没有,请创建入站防火墙规则,以允许源数据库端口上的流量,并确保防火墙规则中的 IPv4 地址范围与创建专用连接资源时分配的 IP 地址范围相同:

    gcloud compute firewall-rules create FIREWALL-RULE-NAME \
      --direction=INGRESS \
      --priority=PRIORITY \
      --network=PRIVATE_CONNECTIVITY_VPC \
      --project=VPC_PROJECT \
      --action=ALLOW \
      --rules=FIREWALL_RULES \
      --source-ranges=IP-RANGE
      

    替换以下内容:

    • FIREWALL-RULE-NAME:要创建的防火墙规则的名称。
    • PRIORITY:规则的优先级,以 0 到 65535 之间的整数(含 0 和 65535)表示。该值需要低于为屏蔽流量规则设置的值(如果存在)。优先级值越低,优先级越高。
    • PRIVATE_CONNECTIVITY_VPC:可与 Datastream 专用网络对等互连且满足 VPC 网络对等互连页面中所述要求的 VPC 网络。这是您在创建专用连接配置时指定的 VPC。
    • VPC_PROJECT:VPC 网络的项目。
    • FIREWALL_RULES:防火墙规则适用的协议和端口列表,例如 tcp:80。该规则需要允许 TCP 流量流向源数据库或代理的 IP 地址和端口。由于专用连接可以支持多个数据库,因此该规则需要考虑配置的实际使用情况。
    • IP-RANGE:Datastream 用于与源数据库通信的 IP 地址范围。此范围与您在创建专用连接配置时在分配 IP 范围字段中指定的范围相同。

      您可能还需要创建相同的出站流量防火墙规则,以允许流量返回 Datastream。

  • 被分配了包含 compute.networks.list 权限的角色。此权限可为您提供列出项目中 VPC 网络所需的 IAM 权限。您可以查看 IAM 权限参考文档,了解哪些角色包含此权限。

共享 VPC 前提条件

如果您使用的是共享 VPC,则除了VPC 前提条件部分中所述的步骤之外,还必须完成以下操作:

  1. 在服务项目中:

    1. 启用 Datastream API。
    2. 获取用于 Datastream 服务账号的邮箱。当您执行以下任一操作时,系统会创建 Datastream 服务账号:

      • 您创建 Datastream 资源,例如连接配置文件或数据流。
      • 您创建专用连接配置,选择共享 VPC,然后点击创建 Datastream 服务账号。服务账号是在宿主项目中创建的。

      如需获取用于 Datastream 服务账号的电子邮件地址,请在 Google Cloud 控制台首页中找到项目编号。服务账号的邮箱为 service-[project_number]@gcp-sa-datastream.iam.gserviceaccount.com。

  2. 在宿主项目中:

    1. 向 Datastream 服务账号授予 compute.networkAdmin Identity and Access Management (IAM) 角色权限。只有在创建 VPC 对等互连时,才需要此角色。建立对等互连后,您就不再需要该角色。

      如果贵组织不允许授予该权限,请创建一个具有以下最低权限的自定义角色,以便创建和删除专用连接资源:

    如需详细了解自定义角色,请参阅创建和管理自定义角色。

设置 NAT 虚拟机

  1. 确定 Datastream 需要连接到的 Cloud SQL 实例的 IP 地址。

  2. 确定您的 VPC 网络。这是使用 VPC 网络对等互连连接到 Datastream VPC 网络的 VPC 网络。

  3. 如果您尚未创建,请在 Datastream 中创建专用连接配置。这将创建 VPC 网络对等互连连接,用于连接您的 VPC 网络和 Datastream VPC 网络。记下 Datastream 专用连接配置使用的 IP 地址范围。

  4. 选择要用于在下一步中创建的 NAT 虚拟机的机器类型。Google Cloud 会根据虚拟机实例的机器类型,对 VPC 网络中下一个跃点路由的数据包强制执行每个实例的出站流量带宽上限。如需了解详情,请参阅流向 VPC 网络内可路由目的地的出站流量和每个实例的最大出站流量带宽。

  5. 在 VPC 网络中创建 NAT 虚拟机。创建虚拟机时,您必须启用 IP 转发。如需了解详情,请参阅为实例启用 IP 转发。

    如果您的 VPC 网络是共享 VPC 网络,则只要 NAT 虚拟机的网络接口位于共享 VPC 网络中,您就可以在宿主项目或任何服务项目中创建 NAT 虚拟机。

    • 为了最大限度地缩短网络往返时间,请在 Datastream 所在的区域中创建 NAT 虚拟机。
    • 此示例假设 NAT 虚拟机具有单个网络接口。
    • 在 Linux 发行版(例如 Debian 12)中运行该脚本。
    • 使用以下启动脚本。每次虚拟机启动时,启动脚本都会由 root 执行。此脚本包含注释,用于说明脚本中每行的作用。在脚本中,将 CLOUD_SQL_INSTANCE_IP 替换为 Cloud SQL 实例的 IP 地址,并将 DATABASE_PORT 替换为数据库软件使用的目标端口。
    #! /bin/bash
    
    export DB_ADDR=CLOUD_SQL_INSTANCE_IP
    export DB_PORT=DATABASE_PORT
    export SYSCTL_CONF_FILE="/etc/sysctl.d/99-sysctl.conf"
    
    # Ensure the VM can receive packets whose destinations do
    # not match any running process local to the VM
    if [ "$(sysctl net.ipv4.ip_forward)" != "net.ipv4.ip_forward = 1" ]; then
        echo "Enabling IP forwarding..."
        if [ ! -f "${SYSCTL_CONF_FILE}" ]; then
           # Create the kernel parameter config file if it doesn't exist.
           touch "${SYSCTL_CONF_FILE}"
        fi
        # Remove any lines with net.ipv4.ip_forward:
        sed -i '/net.ipv4.ip_forward/d' "${SYSCTL_CONF_FILE}"
        # Append net.ipv4.ip_forward=1:
        echo "net.ipv4.ip_forward=1" >> "${SYSCTL_CONF_FILE}"
        # Reload kernel parameters:
        sysctl --system
    fi
    
    # Ask the Metadata server for the IP address of the VM nic0
    # network interface:
    md_url_prefix="http://169.254.169.254/computeMetadata/v1/instance"
    vm_nic_ip="$(curl -H "Metadata-Flavor: Google" ${md_url_prefix}/network-interfaces/0/ip)"
    
    # Clear any existing iptables NAT table entries (all chains):
    iptables -t nat -F
    
    # Create a NAT table entry in the prerouting chain, matching
    # any packets with destination database port, changing the destination
    # IP address of the packet to the SQL instance IP address:
    iptables -t nat -A PREROUTING \
         -p tcp --dport $DB_PORT \
         -j DNAT \
         --to-destination $DB_ADDR
    
    # Create a NAT table entry in the postrouting chain, matching
    # any packets with destination database port, changing the source IP
    # address of the packet to the NAT VM's primary internal IPv4 address:
    iptables -t nat -A POSTROUTING \
         -p tcp --dport $DB_PORT \
         -j SNAT \
         --to-source $vm_nic_ip
    
    # Save iptables configuration:
    iptables-save
  6. 创建具有以下特征的入站流量允许防火墙规则(或全球网络防火墙政策、区域级网络防火墙政策或分层防火墙政策中的规则):

    • 方向:入站
    • 操作:允许
    • 目标参数:至少为 NAT 虚拟机
    • 来源参数:Datastream 专用连接配置使用的 IP 地址范围
    • 协议:TCP
    • 端口:必须至少包含 DATABASE_PORT
  7. 隐式允许出站流量防火墙规则允许 NAT 虚拟机向任何目的地发送数据包。如果您的 VPC 网络使用出站流量拒绝防火墙规则,您可能需要创建出站流量允许防火墙规则,以允许 NAT 虚拟机向 Cloud SQL 实例发送数据包。如果需要出站流量允许规则,请使用以下参数:

    • 方向:出站流量
    • 操作:允许
    • 目标参数:至少为 NAT 虚拟机
    • 目标参数:Cloud SQL 实例 IP 地址
    • 协议:TCP
    • 端口:必须至少包含 DATABASE_PORT
  8. 确保您已将 Cloud SQL 实例配置为接受来自 NAT 虚拟机的网络接口所使用的主要内部 IPv4 地址的连接。如需查看相关说明,请参阅 Cloud SQL 文档中的使用授权网络进行授权。

  9. 在 Datastream 中创建连接配置文件。在配置文件的连接详情中,指定您创建的 NAT 虚拟机的主要内部 IPv4 地址。在连接配置文件的端口字段中输入源数据库的端口。

设置一对 NAT 虚拟机和内部直通式网络负载均衡器

为了提高 NAT 虚拟机解决方案的可靠性,请考虑以下架构,该架构使用一对 NAT 虚拟机和内部直通式网络负载均衡器:

  1. 在同一区域的不同可用区中创建两个 NAT 虚拟机。按照设置 NAT 虚拟机说明创建每个虚拟机,并将每个虚拟机放置在自己的可用区级非托管式实例组中。

    或者,您也可以创建区域级托管式实例组。在代管式实例组模板中,添加一个启动脚本,例如设置 NAT 虚拟机说明中的示例启动脚本。

  2. 创建一个内部直通式网络负载均衡器,其后端服务使用上一步中的一个或多个实例组作为其后端。如需查看内部直通式网络负载均衡器示例,请参阅设置具有虚拟机实例组后端的内部直通式网络负载均衡器。

    配置负载均衡器健康检查时,您可以使用 TCP 健康检查,该检查使用与 DATABASE_PORT 匹配的目标 TCP 端口。健康检查数据包会根据 NAT 虚拟机配置路由到 CLOUD_SQL_INSTANCE_IP。或者,您也可以在 NAT 虚拟机上运行本地进程,以响应自定义端口上的 TCP 或 HTTP 健康检查。

  3. 按照设置 NAT 虚拟机说明中的描述,创建防火墙规则并配置 Cloud SQL 授权网络。确保 Cloud SQL 授权网络包含两个 NAT 虚拟机的主要内部 IPv4 地址。

  4. 创建 Datastream 连接配置文件时,请在配置文件的连接详细信息中指定内部直通式网络负载均衡器的转发规则的 IP 地址。

后续步骤