示例:MySQL 实例的专用连接

本页面通过示例说明了如何使用 Private Service Connect (PSC) 在专用网络上的 MySQL 后端系统与 Integration Connectors 运行时之间建立连接。

注意事项

创建 PSC 服务连接时,请考虑以下要点:

  • PSC 服务连接和负载均衡器应位于同一 VPC 内的不同子网中。具体来说,服务连接应位于 NAT 子网中。
  • 在后端虚拟机上运行的软件必须同时响应发送到每个转发规则的 IP 地址的负载均衡流量和健康检查探测(该软件必须监听 0.0.0.0:<port>,而不是分配给网络接口的特定 IP 地址)。 如需了解详情,请参阅健康检查
  • 配置防火墙规则以便流量通过。

    入站流量规则

    • 来自 PSC 服务连接子网的流量应到达 ILB 的子网。
    • 在 ILB 的子网内,ILB 应该能够将流量发送到您的后端系统。
    • 健康检查探测应该能够访问您的后端系统。Google Cloud 健康检查探测具有固定的 IP 范围 (35.191.0.0/16, 130.211.0.0/22)。因此,系统允许这些 IP 向您的后端服务器发送流量。

    出站规则

    除非配置了特定的拒绝规则,否则在 Google Cloud 项目中,出站流量默认处于启用状态。

  • 所有 Google Cloud 组件(如 PSC 服务连接和负载均衡器)都应位于同一区域。
  • 您的后端系统不应对公共网络开放,因为这可能会给您带来安全问题。不过,在以下情况下,请确保您的后端系统能接受流量:
    • 直通式负载平衡器 (L4 TCP/UDP ILB) :来自 PSC 服务连接的 NAT IP 的请求应该能够到达您的后端。这些 NAT IP 是自动生成的。因此,您必须允许服务连接所在的整个 NAT 子网 IP 范围。如需了解详情,请参阅 Private Service Connect 子网
    • 基于代理/HTTP(s) 的负载均衡器(L4 代理 ILB、L7 ILB): 所有新请求均来自负载均衡器。因此,您的后端应接受来自您的 VPC 网络的代理子网的请求。如需了解详情,请参阅基于 Envoy 的负载平衡器的代理专用子网

示例

假设您有一个托管在 Google Cloud 的专用 VPC 网络中的 MySQL 实例,并希望向 Integration Connectors 运行时公开该 MySQL 实例。

下图显示了配置 PSC 服务连接后示例 Google Cloud 项目将如何变化。

示例插图

准备工作

在为示例场景创建 PSC 服务连接之前,请执行以下任务:

  • 安装 gcloud CLI
  • 为您的 Google Cloud 项目启用 Compute Engine API
  • 为简化 CLI 命令,您可以使用以下命令设置 PROJECT_ID、REGION 和 ZONE 的值:
    gcloud config set project PROJECT_ID
    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
  • 对于本教程中的命令,请将 BACKEND_SERVER_PORT 替换为 3306,这是运行 MySQL 服务器的默认端口。
  • 建议创建新的 VPC 网络,并在尝试此示例场景时使用。测试场景后,您可以删除 VPC 网络和其他资源。
  • 您已至少创建了一个连接。连接可以是任何类型。建立现有连接后,您就可以从 Integration Connectors 运行时中提取服务目录的项目 ID。创建 PSC 服务连接时必须提供此项目 ID。

创建 PSC 服务连接

如需为示例场景创建 PSC 服务连接,请执行以下操作:

  1. 创建 VPC 网络和所需的子网
    1. 创建 VPC 网络。
      gcloud compute networks create VPC_NETWORK --project=PROJECT_NAME --subnet-mode=custom --mtu=1460 --bgp-routing-mode=regional
    2. 添加 subnet-1。
      gcloud compute networks subnets create SUBNET_NAME_1 --network=VPC_NETWORK --range=SUBNET_RANGE_1 --purpose=PRIVATE_SERVICE_CONNECT

      此命令会创建 Subnet-1 作为 NAT 子网,该子网将专门用于托管 PSC 服务连接。您无法在此 NAT 子网中托管任何其他服务。

    3. 添加 subnet-2。
      gcloud compute networks subnets create SUBNET_NAME_2 --network=VPC_NETWORK --range=SUBNET_RANGE_2
  2. 创建虚拟机实例。

    如需在新创建的 VPC 中创建虚拟机实例,请运行以下命令:

    gcloud compute instances create \
    --image-family debian-10 \
    --image-project debian-cloud \
    --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address \
    mysql-test
    

    此命令将创建一个名为 mysql-test 的虚拟机实例。

  3. 配置 Cloud NAT
    1. 创建一个简单的路由器。
      gcloud compute routers create NAT_ROUTER_NAME \
          --network=VPC_NETWORK
      
    2. 配置网络地址转换。
      gcloud compute routers nats create NAT_GATEWAY_NAME \
          --router=NAT_ROUTER_NAME \
          --auto-allocate-nat-external-ips \
          --nat-all-subnet-ip-ranges
      
  4. 通过 SSH 连接到您的虚拟机实例。
    1. 创建防火墙规则以允许 SSH。
      gcloud compute firewall-rules create VPC_NETWORK-allow-ssh --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
      
    2. 通过 SSH 连接到您的虚拟机实例。
      gcloud compute ssh \
          --tunnel-through-iap \
          mysql-test
      
  5. 安装 MySQL 服务器。如需了解详细说明,请参阅安装 MySQL
  6. 连接到 MySQL 实例并创建示例数据。
    1. 使用 MySQL 客户端连接到 MySQL。
      sudo mysql -u root -p
    2. 创建新用户并授予从任何主机地址进行连接的权限。
      CREATE USER 'test-user'@'%' IDENTIFIED BY 'test-pass';
      GRANT ALL PRIVILEGES ON * . * TO 'test-user'@'%';
      FLUSH PRIVILEGES;
      

      此命令会创建一个用户名为 test-user 且密码为 test-pass 的用户。

    3. 创建数据库以及示例数据。
      CREATE DATABASE test-db;
      USE test-db;
      CREATE TABLE Singers (SingerId int, FirstName varchar(255), LastName varchar(255));
      INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (1, 'Marc', 'Richards');
      
    4. 退出 MySQL 客户端。
      mysql> exit
    5. 退出虚拟机实例。
      exit
  7. 设置非代管式实例组
    1. 创建非代管式实例组。
      gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
    2. 将第 2 步中创建的虚拟机实例添加到组中。
      gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances=mysql-test
  8. 创建健康检查探测并允许来自该探测的流量。
    1. 创建健康检查探测。
      gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION

      在此命令中,将 BACKEND_SERVER_PORT 设置为 3306,这是运行 MySQL 服务器的默认端口。

    2. 创建防火墙规则以允许来自探测的流量。
      gcloud compute firewall-rules create VPC_NETWORK-allow-health-check --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=35.191.0.0/16,130.211.0.0/22
  9. 创建 L4 内部负载均衡器,并允许来自负载均衡器的流量。
    1. 创建后端服务
      gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION 
    2. 将实例组添加到后端服务。
      gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
    3. 创建转发规则
      gcloud compute forwarding-rules create FORWARDING_RULE_NAME --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE --backend-service-region=REGION
    4. 创建防火墙规则以允许内部流量从负载平衡器流向实例组。
      gcloud compute firewall-rules create VPC_NETWORK-allow-internal --direction=INGRESS --priority=1000 --network=VPC_NETWORK --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  10. 创建 PSC 服务连接
    1. 创建防火墙规则,以允许流量从 PSC 服务连接流向上一步中创建的内部负载均衡器。
      gcloud compute firewall-rules create VPC_NETWORK-allow-sa --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=SUBNET_RANGE_1
    2. 创建具有明确批准的服务连接。
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=SUBNET_NAME_1

      在此命令中,LIMIT 是项目的连接限制。连接限制是可以连接到此服务的使用方 Private Service Connect 端点的数量。如需了解如何获取 SERVICE_DIRECTORY_PROJECT_ID,请参阅获取服务目录的项目 ID

  11. 创建端点连接。

    您可以将端点连接视为 PSC 服务连接的接口。您不能直接使用 PSC 服务连接来配置专用连接。PSC 服务连接只能通过端点连接访问。您可以创建 IP 地址或主机名作为端点连接。创建端点连接后,您可以在为专用连接配置连接器时使用它。如需了解详情,请参阅创建端点连接

  12. 验证 PSC 设置。您可以创建一个与您为本教程创建的 test-db 数据库之间的 MySQL 连接来验证 PSC 服务连接连接。如需了解创建 MySQL 连接的详细步骤,请参阅创建 MySQL 连接。 创建连接时,在 Destinations 部分(请参阅创建 MySQL 连接中的第 5 步),选择 Destination type 作为 Hostname,然后输入相应的端点 IP 地址或主机名。如果连接创建成功,在 Cloud 控制台“连接”页面中,新创建的连接的状态将为 Active

获取服务目录的项目 ID

最佳实践是,您可以创建 PSC 服务连接,使其仅接受来自指定 Google Cloud 项目的请求。但是,要执行此操作,您需要与 Google Cloud 项目关联的服务目录的项目 ID。如需获取服务目录的项目 ID,您可以使用 List Connections API,如以下示例所示。

语法

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

请替换以下内容:

  • CONNECTORS_PROJECT_ID:您在其中创建了连接的 Google Cloud 项目的 ID。

示例

此示例会获取 connectors-test Google Cloud 项目的服务目录的项目 ID。

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

在终端上运行此命令会显示类似于以下内容的输出:

.....
{
  "connections": [
    {
      "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
      "createTime": "2022-10-07T09:02:31.905048520Z",
      "updateTime": "2022-10-07T09:22:39.993778690Z",
      "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
      "status": {
        "state": "ACTIVE"
      },
      "configVariables": [
        {
          "key": "project_id",
          "stringValue": "connectors-test"
        },
        {
          "key": "dataset_id",
          "stringValue": "testDataset"
        }
      ],
      "authConfig": {},
      "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
      "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
      "nodeConfig": {
        "minNodeCount": 2,
        "maxNodeCount": 50
      }
    },
....

在示例输出中,对于 connectors-test Google Cloud 项目,服务目录的项目 ID 为 abcdefghijk-tp

其他后端系统的 PSC 服务连接

您可以按照上一示例中的步骤,为其他后端系统设置 PSC 服务连接。 但是,您必须修改第 5 步和第 6 步,以适应您所需的后端系统。在虚拟机实例中安装后端系统后,将后端系统添加到实例组中,并按原样执行其余步骤。