Vector Search Private Service Connect

Private Service Connect 允许跨属于不同群组、团队、项目或组织的 VPC 网络以不公开方式使用服务。您可以使用由您定义且位于您的 VPC 网络内部的 IP 地址发布和使用服务,以便 Vector Search 端点执行向量相似度搜索。

在 Vector Search 端点上启用 Private Service Connect 适用于以下使用场景:

  1. 要求低延迟,并与 Vector Search 服务后端建立安全连接。
  2. 专用 VPC 对等互连预留的 IP 空间有限。
  3. 需要从多个用户 VPC 网络访问服务后端。

如需详细了解如何设置 Private Service Connect,请参阅 Virtual Private Cloud (VPC) 文档中的 Private Service Connect 概览

创建索引端点

如需创建启用 Private Service Connect 的端点,必须在创建端点时定义该端点。这类似于在 Vertex AI 中创建其他端点。

  • PROJECT:要在其中创建 Vertex AI 资源的服务项目。
  • VPC_PROJECT:您的客户端 VPC 所在的项目。对于简单 VPC 设置,这与 $PROJECT 相同。对于共享 VPC 设置,这将是 VPC 宿主项目。
  • PROJECT=<your-service-project>
    VPC_PROJECT=<your-vpc-project>
    REGION=us-central1
    VERTEX_ENDPOINT=$REGION-aiplatform.googleapis.com
    curl -H "Content-Type: application/json" \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      https://$VERTEX_ENDPOINT/v1/projects/$PROJECT/locations/$REGION/indexEndpoints \
      -d '{displayName: "<your-index-endpoint-name>", privateServiceConnectConfig:
      { enablePrivateServiceConnect: true, projectAllowlist: ["'$VPC_PROJECT'", "'$PROJECT'"] }}'
    

    部署索引

    现在索引已准备就绪,在此步骤中,您可以将索引部署到您在启用 Private Service Connect 的情况下创建的端点。

    {

    gcloud

    本示例使用 gcloud ai index-endpoints deploy-index 命令

    在使用下面的命令数据之前,请先进行以下替换:

    • INDEX_ENDPOINT_ID:索引端点的 ID。
    • DEPLOYED_INDEX_ID:用户指定的字符串,用于唯一标识已部署的索引。必须以字母开头,并且只包含字母、数字或下划线。如需了解格式准则,请参阅 DeployedIndex.id
    • DEPLOYED_INDEX_ENDPOINT_NAME:已部署索引端点的显示名称。
    • INDEX_ID:索引的 ID。
    • LOCATION:您在其中使用 Vertex AI 的区域。
    • PROJECT_ID:您的 Google Cloud 项目 ID

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID \
        --deployed-index-id=DEPLOYED_INDEX_ID \
        --display-name=DEPLOYED_INDEX_ENDPOINT_NAME \
        --index=INDEX_ID \
        --region=LOCATION \
        --project=PROJECT_ID

    Windows (PowerShell)

    gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID `
        --deployed-index-id=DEPLOYED_INDEX_ID `
        --display-name=DEPLOYED_INDEX_ENDPOINT_NAME `
        --index=INDEX_ID `
        --region=LOCATION `
        --project=PROJECT_ID

    Windows (cmd.exe)

    gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID ^
        --deployed-index-id=DEPLOYED_INDEX_ID ^
        --display-name=DEPLOYED_INDEX_ENDPOINT_NAME ^
        --index=INDEX_ID ^
        --region=LOCATION ^
        --project=PROJECT_ID

    REST

    在使用任何请求数据之前,请先进行以下替换:

    • INDEX_ENDPOINT_ID:索引端点的 ID。
    • DEPLOYED_INDEX_ID:用户指定的字符串,用于唯一标识已部署的索引。必须以字母开头,并且只包含字母、数字或下划线。如需了解格式准则,请参阅 DeployedIndex.id
    • DEPLOYED_INDEX_ENDPOINT_NAME:已部署索引端点的显示名称。
    • INDEX_ID:索引的 ID。
    • LOCATION:您在其中使用 Vertex AI 的区域。
    • PROJECT_ID:您的 Google Cloud 项目 ID
    • PROJECT_NUMBER:自动生成的项目编号

    HTTP 方法和网址:

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex
    

    请求 JSON 正文:

    {
     "deployedIndex": {
       "id": "DEPLOYED_INDEX_ID",
       "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
       "displayName": "DEPLOYED_INDEX_ENDPOINT_NAME"
     }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    {
     "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
     "metadata": {
       "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployIndexOperationMetadata",
       "genericMetadata": {
         "createTime": "2022-10-19T17:53:16.502088Z",
         "updateTime": "2022-10-19T17:53:16.502088Z"
       },
       "deployedIndexId": "DEPLOYED_INDEX_ID"
     }
    }
    

    控制台

    按照以下说明部署索引。

    1. 在 Google Cloud 控制台的 Vertex AI 部分中,前往部署和使用部分。选择 Vector Search

      前往 Vector Search

    2. 系统会显示活跃索引列表。
    3. 选择要部署的索引的名称。系统会打开索引详情页面。
    4. 在索引详情页面中,点击 部署到端点。系统会打开索引部署面板。
    5. 输入显示名称,此名称充当 ID 且无法更新。
    6. 端点下拉列表中,选择要将此索引部署到的端点。注意:如果索引已部署到该端点,则该端点不可用。
    7. 可选:在机器类型字段中,选择标准内存或高内存。
    8. 可选。选择启用自动扩缩以根据工作负载需求自动调整节点数量。如果停用自动扩缩,则默认副本数为 2。
    9. 点击部署以将索引部署到端点。注意:部署过程大约需要 30 分钟。

    在 VPC 项目中创建转发规则

    索引部署完成后,索引端点会返回服务连接 URI,而不是 IP 地址。您需要在针对服务连接的 VPC 项目中创建转发规则。如需创建转发规则,请使用以下示例:

    gcloud compute addresses create ${ADDRESS_NAME:?} \
        --region=${REGION:?} \
        --subnet=${SUBNET_NAME:?} \
        --project=${VPC_PROJECT:?}
    
    SERVICE_ATTACHMENT_URI=`gcloud ai index-endpoints describe {INDEX_ENDPOINT_ID}
    --format="value(deployedIndexes.privateEndpoints.serviceAttachment)"`
    
    gcloud compute forwarding-rules create ${ENDPOINT_NAME:?} \
        --network=${NETWORK_NAME:?} \
        --address=${ADDRESS_NAME:?} \
        --target-service-attachment=${SERVICE_ATTACHMENT_URI:?} \
        --project=${VPC_PROJECT:?} \
        --region=${REGION:?}
    

    (可选)为 IP 地址创建 DNS 记录

    如果您想连接和加载而不记住实际 IP 地址,则可以创建 DNS 记录。这是可选步骤。

    DNS_NAME_SUFFIX=matchingengine.vertexai.goog. # Don't forget the "." in the end.
    DNS_NAME=${INDEX_ENDPOINT_ID:?}.${REGION:?}.${DNS_NAME_SUFFIX:?}
    
    gcloud dns managed-zones create ${DNS_ZONE_NAME:?} \
        --dns-name=${DNS_NAME_SUFFIX:?} \
        --visibility=private \
        --project=${VPC_PROJECT:?} \
        --region=${REGION:?}
    
    gcloud dns record-sets create ${DNS_NAME:?} \
        --rrdatas=${IP_ADDRESS:?} \
        --type=A --ttl=60 \
        --zone=${DNS_ZONE_NAME:?} \
        --project=${VPC_PROJECT:?} \
        --region=${REGION:?}
    

    将查询发送到索引端点

    现在,您已使用 Private Service Connect 创建了端点并创建了索引,可以开始运行查询了。

    如需查询索引,请参阅查询索引以获取最近的邻居

    后续步骤