南向网络模式

本页面适用于 Apigee,但不适用于 Apigee Hybrid

查看 Apigee Edge 文档。

本文档介绍了如何使用 Private Service Connect (PSC) 在 Apigee 和后端目标服务之间创建专用连接。请注意,在 Apigee 和后端目标服务之间流动的 API 代理流量称为“南向”流量。

本文档中介绍的南向网络配置步骤适用于 VCP 对等互连和非 VPC 对等互连的 Apigee 实例

以非公开方式将 Apigee 连接到后端目标

如需以非公开方式将 Apigee 连接到后端目标,您必须创建两个实体:在部署目标的 VPC 网络中创建一个服务连接,在 Apigee VPC 中创建一个端点连接。有了这两个实体,便可以将 Apigee 连接到目标服务。

图 1 展示了支持为跨多个区域的南向连接提供全球访问权限的 Apigee 网络架构(使用 PSC):

图 1:Apigee 南向网络架构。

限制

在 Apigee 组织中,允许对给定服务连接使用一个单独的端点连接。例如,假设您有 10 个公开了目标服务的服务连接;那么您可以在 Apigee 组织中创建 10 个端点连接,每个服务连接对应一个端点连接。

示例:通过 PSC 将目标服务公开给 Apigee

此示例说明了如何通过使用 PSC 使 Apigee 能够与在未与 Apigee 直接对等互连的 VPC 网络中运行的目标服务进行通信。此示例中的步骤使用 gcloud 和 Apigee API 调用以在部署了目标的 VPC 网络中设置和配置服务连接,并在 Apigee VPC 中设置和配置端点连接。

示例场景

此示例假设您在 VPC 中运行的代管实例组 (MIG) 上部署了一个 Apache Web 服务器。为了能够在此上下文中与 Apigee 通信,我们会通过入站流量网关公开服务。

设置负载均衡器

在 VPC 中设置您要公开的微服务所在的负载均衡器:

  1. 创建以下环境变量:
    export PROJECT_ID=YOUR_PROJECT_ID
    export IMAGE_PROJECT=debian-cloud
    export IMAGE_FAMILY=debian-12
    export BACKEND=foo
    export REGION=us-west1
    export ZONE=us-west1-a
    export NETWORK=default
    export SUBNET_NAME=default
  2. 创建实例模板
    gcloud compute instance-templates create "$BACKEND" \
        --tags=psc-demo,http-server,https-server \
        --image-family "$IMAGE_FAMILY" --image-project "$IMAGE_PROJECT" \
        --network "$NETWORK" --subnet "$SUBNET_NAME" --region "$REGION" \
        --project "$PROJECT_ID" \
        --metadata startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>foo[/]: '\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html
        sudo mkdir /var/www/html/foo
        echo '<!doctype html><html><body><h1>foo[/foo]: '\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/foo/index.html"
  3. 创建代管式实例组
    gcloud compute instance-groups managed create $BACKEND \
        --project $PROJECT_ID --base-instance-name $BACKEND \
        --size 1 --template $BACKEND --region $REGION
  4. 创建健康检查
    gcloud compute instance-groups managed set-named-ports $BACKEND \
        --project $PROJECT_ID --region $REGION --named-ports http:80
    gcloud compute health-checks create tcp hc-tcp-$BACKEND \
      --region=$REGION \
      --description="health check for psc backend" \
      --port-name=http --project=$PROJECT_ID
  5. 创建负载均衡器:
    1. 创建后端服务
      gcloud compute backend-services create be-ilb \
          --load-balancing-scheme=internal \
          --protocol=tcp \
          --region=$REGION \
          --network=$NETWORK \
          --health-checks=hc-tcp-$BACKEND \
          --health-checks-region=$REGION \
          --project=$PROJECT_ID
    2. 将托管式实例组添加到后端服务:
      gcloud compute backend-services add-backend be-ilb \
          --region=$REGION \
          --instance-group=$BACKEND \
          --instance-group-zone=$ZONE \
          --project=$PROJECT_ID
      
    3. 创建转发规则
      gcloud compute forwarding-rules create fr-ilb \
          --region=$REGION \
          --load-balancing-scheme=internal \
          --network=$NETWORK \
          --subnet=$SUBNET_NAME \
          --ip-protocol=TCP \
          --ports=80 \
          --backend-service=be-ilb \
          --backend-service-region=$REGION \
          --project=$PROJECT_ID

创建服务连接

在部署目标服务的 VPC 网络中创建一个 PSC 服务连接。

  1. 如需执行此任务,您必须拥有 compute.subnetworks.create 权限或 Compute Network Admin IAM 角色 (roles/compute.networkAdmin)。
  2. 创建一个 PSC 子网并将 purpose 参数设置为 PRIVATE_SERVICE_CONNECT
    gcloud compute networks subnets create PSC_SUBNET_NAME \
      --network NETWORK --region=REGION --purpose=PRIVATE_SERVICE_CONNECT --range=RANGE
    gcloud compute --project=$PROJECT_ID firewall-rules create allow-psc-nat-80 \
      --direction=INGRESS --priority=1000 --network NETWORK --action=ALLOW --rules=tcp:80 \
      --source-ranges=RANGE --target-tags=psc-demo

    如需详细了解命令参数,请参阅 Google Cloud CLI 参考文档。您也可以使用 Console 或 API 执行此步骤。

    例如:

    gcloud compute networks subnets create psc-subnet --network default \
    --region=us-west1 --purpose=PRIVATE_SERVICE_CONNECT --range=10.100.0.0/28
  3. 在您的 VPC 网络中创建一个服务连接:
    1. 获取内部负载均衡器转发规则。您将在后面的步骤中用到此规则:
      gcloud compute forwarding-rules list --project=PROJECT_ID

      其中 PROJECT_ID 是 Google Cloud 项目 ID。例如:

      输出示例:

      NAME                                                  REGION    IP_ADDRESS    IP_PROTOCOL  TARGET
      k8s2-tcp-e61tta3j-apps-istio-ingressgateway-0kl92frk  us-west1  10.138.0.53   TCP
      
    2. 创建服务连接:
      gcloud compute service-attachments create PSC_NAME \
          --region=REGION --producer-forwarding-rule=PRODUCER_FORWARDING_RULE \
          --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=PSC_SUBNET_NAME --project=PROJECT_ID

      PSC_NAME 参数必须是长度为 1-63 个字符的字符串,并且只能包含小写字母、数字和连字符。不能含有前导数字和连字符。另外,也不能以连字符结尾。如需详细了解此命令的参数,请参阅 Google Cloud CLI 参考文档

      例如:

      gcloud compute service-attachments create gkebackend \
          --region=us-west1 --producer-forwarding-rule=k8s2-tcp-e62tta1j-apps-istio-ingressgateway-0kl92frk \
          --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-subnet --project=my-project

      您还可以在 Console 界面中执行此步骤。例如,请参阅发布使用自动项目批准的服务

创建端点连接

在 Apigee 组织中创建一个端点连接。您可以通过命令行或 Apigee Endpoint 连接界面执行此步骤。

前提条件:在创建端点连接之前,必须通过创建负载均衡器和服务连接来使用 Private Service Connect (PSC) 发布您希望公开的服务,如下面的示例中所述。如需详细了解如何使用 PSC 公开服务,请参阅使用 Private Service Connect 发布代管式服务。请注意,服务连接必须配置为接受新连接。

命令行

如需从命令行在 Apigee VPC 中创建端点连接,请执行以下操作:

  1. 获取服务连接资源:
    gcloud compute service-attachments list

    该命令会返回服务连接信息。您将在下一步中用到此信息。例如:

    NAME       REGION   TARGET_SERVICE                                       CONNECTION_PREFERENCE
    gkebackend us-west1 k8s2-tcp-tgysilgj-apps-istio-ingressgateway-fzdhwstg ACCEPT_AUTOMATIC
  2. 获取 Apigee API 的身份验证令牌:
    TOKEN="$(gcloud auth print-access-token)"
  3. 使用此 Apigee API 创建端点连接。在请求正文中使用 gcloud compute service-attachments list 命令返回的值:
    curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type:application/json" \
    "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/endpointAttachments?endpointAttachmentId=EA_NAME" \
    -d '{
        "location": "REGION",
        "serviceAttachment": "projects/PROJECT_ID/regions/REGION/serviceAttachments/SA_NAME"
    }'

    其中:

    • REGION 是服务连接的区域。例如:us-west1
    • ORGANIZATION 是您的 Apigee 组织的名称。
    • PROJECT_ID 是将在其中创建服务连接的 Google Cloud 项目。
    • EA_NAME 是端点连接的名称。该名称必须是唯一的。其他名称相同的端点连接不能存在,并且您以后无法更改该名称。该名称必须以小写字母开头,后面最多可跟 31 个小写字母、数字或连字符,但不能以连字符结尾。长度下限为 2。
    • SA_NAME 是服务连接的名称。

    Apigee 会启动一个长时间运行的操作。操作完成后,您将看到如下所示的响应:

    {
      "name": "organizations/my-organization/operations/6e249895-e78e-48f0-a28f-7140e15e1676",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata",
        "operationType": "INSERT",
        "targetResourceName": "organizations/my-organization/endpointAttachments/gkebackend",
        "state": "FINISHED"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.apigee.v1.EndpointAttachment",
        "name": "organizations/my-organization/endpointAttachments/gkebackend",
        "location": "us-west1",
        "host": "7.0.3.4",
        "serviceAttachment": "projects/my-project/regions/us-west1/serviceAttachments/gkebackend"
      }
    }
  4. 如需检查新端点是否处于活跃状态,请执行以下操作:
    curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/endpointAttachments/EA_NAME"

    在响应中查找 "state": "ACTIVE"

    如需连接到服务连接后端的服务,您可以使用响应中返回的 IP 地址(位于 host 字段中),也可以使用您在专用 DNS 区域中创建的 DNS 记录。如需了解详情,请参阅以下部分。

  5. 使用 IP 地址

    您可以使用响应中返回的 IP 地址 7.0.3.4 连接到服务连接后端的服务,如下一步所示。请注意,7.0.3.4 是 Apigee 分配给入站流量网关的以非公开方式使用的公共 IP (PUPI) 地址。它不会在互联网上通告,并且没有任何 Google 服务会在内部使用该范围内的 IP 地址。

    使用服务连接主机 IP 作为 API 代理的目标。例如:
    <TargetEndpoint name="default">
        <HTTPTargetConnection>
            <URL>http://7.0.3.4/orders</URL>
        </HTTPTargetConnection>
    </TargetEndpoint>

    使用 DNS 记录

    如果您在 Google Cloud 项目中配置了专用 DNS 区域,则可以使用 DNS 记录连接到服务连接后面的服务。基本步骤如下。

    1. 作为前提条件,您必须在 Google Cloud 项目中配置 DNS 对等互连,如通过专用 DNS 对等互连区域进行连接中所述。
    2. 在专用 DNS 区域中为 PSC 端点连接 IP 创建 DNS 记录(A 记录)。
    3. 将 Apigee API 代理配置为使用 PSC 端点 DNS 记录作为 API 代理的目标。例如:
      <TargetEndpoint name="default">
        <HTTPTargetConnection>
          <URL>http://my-private-dns-zone.example.com/orders</URL>
        </HTTPTargetConnection>
      </TargetEndpoint>

Apigee 界面

如需在 Apigee 界面中,在 Apigee 组织中创建端点连接,请执行以下操作:

  1. Cloud 控制台中,依次前往管理 > 端点连接
  2. 点击 + 端点连接。系统会显示“端点连接”对话框。
  3. 输入端点连接的名称。该名称必须是唯一的。其他名称相同的端点连接不能存在,并且您以后无法更改该名称。该名称必须以小写字母开头,后面最多可跟 31 个小写字母、数字或连字符,但不能以连字符结尾。长度下限为 2。
  4. 点击下一步
  5. 服务连接下拉列表中,选择要连接的服务连接。

    界面的行为取决于您的权限。如果您有权列出区域和服务连接,则只需从下拉列表中选择服务连接即可。如果您无权列出区域,则系统会显示区域的静态列表,您可以从该列表中选择。如果您无权列出服务连接,则必须手动输入名称。服务连接的位置和名称。请注意,如果您无权列出区域,则系统会显示区域的静态列表供您从中进行选择。

    服务连接配置所需的 Apigee 项目 ID 的位置。

  6. 验证服务端点是否可以接受连接。如需了解相关步骤,请参阅检查和管理连接的连接性
  7. 点击下一步
  8. 点击创建。该操作通常需要一两分钟才能完成。
  9. 如需检查当前创建状态,请点击列表页面中的刷新
  10. 使用服务连接主机 IP 作为 API 代理的目标。 创建过程完成后,主机 IP 将显示在“端点连接”界面中,如以下屏幕截图所示:

    端点连接的界面中显示了服务连接的主机 IP

    例如:
    <TargetEndpoint name="default">
        <HTTPTargetConnection>
            <URL>http://7.0.5.2/orders</URL>
        </HTTPTargetConnection>
    </TargetEndpoint>

检查和管理连接的连接性

本部分介绍如何验证服务连接是否可以访问 Apigee 项目中的端点连接,以及如何更改连接偏好设置。

  1. 按照列出已发布的服务中的步骤查看项目中的服务连接列表。
  2. 按照查看已发布服务的详细信息中的说明,选择要连接的服务连接。
  3. 为已发布的服务连接选择连接偏好设置。Private Service Connect 提供如下所述的两个选项。如果您想要更改当前连接偏好设置,请按照更改已发布服务的连接偏好设置中的步骤操作。
    • 自动接受所有连接:服务连接接受来自任何项目的端点连接。如果您选择此选项,服务连接将能够接受来自 Apigee 项目中的端点连接的连接。无需进一步配置。
    • 接受来自所选项目的连接:指定服务连接将接受其连接的项目。如果您选择此选项,则必须将 Apigee 项目的 ID 添加到服务连接中。您可以在端点连接界面的验证项目连接步骤中找到 Apigee 项目 ID,如以下屏幕截图所示:

      服务连接配置所需的 Apigee 项目 ID 的位置。

      您还可以使用 Apigee Organizations API 检索 Apigee 项目 ID,该字段在名为 apigeeProjectId 的字段中返回 ID。

  4. 如果您更改了连接偏好设置,请保存更改。
  5. Cloud 控制台中,依次前往管理 > 端点连接。 您还可以使用 Apigee Endpoints API 列出端点连接。
  6. 在连接列表中,验证 PSC 连接状态现在是否为 ACCEPTED。如果该字段显示的状态不是 ACCEPTED,请参阅排查 PSC 连接状态问题

管理端点连接

Apigee endpointAttachments API 提供创建、删除、获取和列出端点连接的方法。

列出端点连接

您可以在 Apigee 端点连接界面中或通过调用 Apigee Endpoints API 来查看端点连接的列表。

如需在 Apigee 界面中列出端点连接,请执行以下操作:

  1. Cloud 控制台中,依次前往管理 > 端点连接
  2. 查看端点连接列表。

创建端点连接

如需在界面中创建端点连接或使用 Apigee Endpoints API 创建端点连接,请参阅创建端点连接

删除端点连接

如需使用 Apigee 界面删除端点,请执行以下操作:

  1. Cloud 控制台中,依次前往管理 > 端点连接
  2. 选择要删除的端点连接。
  3. 点击删除端点连接

您还可以使用 Apigee Endpoints API 来列出、创建和删除端点连接。

与专用 DNS 对等互连区域建立连接

对等互连区域是一个 Cloud DNS 专用区域,可让您在不同 VPC 网络中的 Cloud DNS 区域之间发送 DNS 请求。

如需提供 DNS 专用对等互连功能,您必须创建一个 Cloud DNS 对等互连区域,并将其配置为在该区域命名空间的记录所在的 VPC 网络内执行 DNS 查找。DNS 对等互连区域在其中执行查找的 VPC 网络就称为 DNS 提供方网络。如需了解详情,请参阅对等互连区域

您可以配置 Apigee 以解析 DNS 提供方网络中的专用 DNS 区域。 此配置允许 Apigee 解析使用专用域名的项目中的目标端点。

在本部分中,我们将探讨两种主要使用情形,即在启用或未启用 VPC 对等互连的情况下配置 Apigee:

概览

为了正常运行,Apigee 需要连接到您管理的后端目标。这些目标可能通过公共或专用 DNS 可解析。如果目标可公开解析,则没有问题,Apigee 后端目标会指向服务的公共地址。专用端点可以是您托管和管理的静态 IP 地址或可解析的 DNS 名称。为了解析专用目标端点,通常需要在 Google Cloud 项目中维护一个专用 DNS 区域。默认情况下,Apigee 无法解析这些专用 DNS 名称。

配置启用了 VPC 对等互连的专用 DNS 对等互连

如果您在与 Apigee 对等互连的 Cloud 项目中托管 Cloud DNS 专用区域,则可以配置 DNS 对等互连以允许 Apigee 解析专用区域中的名称。默认情况下,专用区域仅限在托管它们的 VPC 网络中使用。如需了解在专用 DNS 区域和 Apigee(服务提供方)之间配置 DNS 对等互连的步骤,请参阅与服务提供方共享专用 DNS 区域

在未启用 VPC 对等互连的情况下配置专用 DNS 对等互连

本部分介绍如何配置 Apigee 以解析未启用 VPC 对等互连的项目中的专用 DNS 名称。图 2 显示了相关配置,其中 Apigee 中的 DNS 对等互连区域可解析 Google Cloud 项目中托管的专用 DNS 区域中的专用域名。

图 2:与 Apigee 搭配使用的专用 DNS 对等互连区域配置。
  1. 作为前提条件,Apigee 必须在不使用 VPC 对等互连的情况下进行预配。如需检查 VPC 对等互连是否已启用,请执行此 Apigee API 调用。您必须拥有 apigee.admin 权限才能执行此调用:
    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          "https://apigee.googleapis.com/v1/organizations/ORGANIZATION"

    其中:

    • ORGANIZATION 是您的 Apigee 组织的名称。

    如果响应包含 "disableVpcPeering": "true",则表示未启用 VPC 对等互连。

  2. 获取 Apigee 项目编号:
    gcloud projects describe APIGEE_PROJECT_ID --format="value(projectNumber)"

    其中:

    • APIGEE_PROJECT_ID 是您的Apigee 项目的 ID。通常,这是您的 Apigee 组织的名称。
  3. 向提供方 VPC 网络所在的项目中的 Apigee 项目专属服务账号 (P4SA) 授予 dns.networks.targetWithPeeringZone 权限。如需获取此权限,您可以按如下方式向 Apigee P4SA 添加 dns.peer 角色:
    gcloud projects add-iam-policy-binding PRODUCER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT \
        --role=roles/dns.peer

    其中:

    • PRODUCER_PROJECT_ID 是包含提供方 VPC 网络的项目的项目 ID。
    • SERVICE_ACCOUNT 是 Apigee P4SA。例如:service-APIGEE_CONSUMER_PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com

      其中,APIGEE_CONSUMER_PROJECT_NUMBER 是您在上一步中检索到的 Apigee 项目编号。

  4. 在项目中创建包含专用 DNS 区域的 DNS 对等互连区域:
    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type:application/json" \
          "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/dnsZones?dnsZoneId=DNS_ZONE_ID" \
          -d '{
            "domain": "DOMAIN",
            "description": "DESCRIPTION",
            "peeringConfig": {
               "targetProjectId": "PRODUCER_PROJECT_ID",
               "targetNetworkId": "PRODUCER_VPC_NETWORK"
            }
        }'

    其中:

    • ORGANIZATION 是您的 Apigee 组织的名称。
    • DNS_ZONE_ID 是您要创建的 DNS 区域的名称。
    • DOMAIN 是相应托管区域的 DNS 名称,例如 example.com
    • DESCRIPTION 是对 DNS 区域的简要说明。最多 1024 个字符。
    • PRODUCER_PROJECT_ID 是包含提供方 VPC 网络的项目。
    • PRODUCER_VPC_NETWORK 是客户项目中的 VPC 网络。
  5. 验证是否成功创建了对等互连:
    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/dnsZones/DNS_ZONE_ID"

    其中:

    • ORGANIZATION 是您的 Apigee 组织的名称。
    • DNS_ZONE_ID 是您创建的 DNS 区域的名称。

    如果成功,响应将包含以下状态代码:"state": "ACTIVE"

  6. 完成对等互连后,您可以在专用区域中创建 DNS 记录,并在端点连接配置中引用该记录。请参阅创建端点连接

限制

请参阅DNS 对等互连限制和要点

问题排查

PSC 连接状态问题

本部分介绍预配了端点连接且状态为活跃但连接状态未处于已接受时的解决方案。一些可能的连接状态如图 3 所示。

图 3:端点连接状态详细信息

给定状态通常可以指示相应的原因,如下表所示:

连接状态 可能的原因 推荐的解决方案
已接受 服务连接已接受来自连接端点的连接。 不适用
待处理 Apigee 项目 ID 可能不在使用方接受的项目列表中或处于拒绝列表中。 将 Apigee 项目 ID 添加到服务连接的使用方接受列表中。请参阅更改已发布服务的连接偏好设置
已拒绝 Apigee 项目 ID 处于使用方拒绝列表中。 从使用方拒绝列表中移除 Apigee 项目 ID,并将其添加到服务连接的使用方接受列表中。请参阅管理对已发布服务的访问请求
FROZEN 此端点连接的服务连接已暂停或停用。 描述服务连接,以了解详细信息。请参阅查看已发布服务的详细信息
已解决 此端点连接的服务连接已被删除。 重新创建服务连接和端点连接。
NEEDS_ATTENTION 服务连接已接受端点连接,但是服务连接存在问题。 描述服务连接,以了解更多详细信息。请参阅查看已发布服务的详细信息
UNAVAILABLE 连接状态不可用,可能在预配期间发生。 等待几分钟,看看状态是否发生变化。

使用 Apigee 进行 PSC 配置

请参阅与南向 PSC 目标相关的 Apigee 连接问题策略方案。