南向网络模式

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

查看 Apigee Edge 文档。

本文档介绍了如何使用 Private Service Connect (PSC) 在 Apigee 和后端目标服务之间创建专用连接。默认情况下,您可以在全球范围内访问目标端点。请注意,在 Apigee 和后端目标服务之间流动的 API 代理流量称为“南向”流量。

本文档中介绍的南向网络配置步骤适用于 VCP 对等互连和非 VPC 对等互连的 Apigee 实例。但请注意,只有 VPC 对等互连的 Apigee 实例支持专用 DNS 对等互连

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

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

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

图 1:Apigee 南向网络架构。

限制

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

示例:将目标服务公开给 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。例如:

      gcloud compute forwarding-rules list --project=my-project
      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

      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"
      }
    }

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

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

Apigee 界面

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

  1. Apigee 界面中,转到管理 > 端点连接
  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. Apigee 界面中,转到管理 > 端点连接。 您还可以使用 Apigee Endpoints API 列出端点连接。
  6. 在连接列表中,验证 PSC 连接状态现在是否为 ACCEPTED。如果该字段显示的状态不是 ACCEPTED,请参阅排查 PSC 连接状态问题

管理端点连接

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

列出端点连接

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

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

  1. Apigee 界面中,转到管理 > 端点连接
  2. 查看端点连接列表。

创建端点连接

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

删除端点连接

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

  1. Apigee 界面中,转到管理 > 端点连接
  2. 选择要删除的端点连接。
  3. 点击删除端点连接

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

专用 DNS 对等互连

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

问题排查

PSC 连接状态问题

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

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

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

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

使用 Apigee 配置 PSC

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