调用仅限内部访问的 API 代理

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

查看 Apigee Edge 文档。

本文档介绍如何从内部网络上运行的客户端调用 API 代理。如果将 Apigee 预配为使用内部网络路由,则这些步骤可用于测试设置。如果 Apigee 预配了以下任何网络路由配置,则可以按照本文档中的步骤操作:

预配选项 网络选项 预配步骤
付费订阅 使用 VPC 对等互连 内部路由 (VPC)
内部路由 (PSC)
Pay-as-you-go 使用 VPC 对等互连 内部路由 (VPC)
内部路由 (PSC)
评估 使用 VPC 对等互连 配置路由(内部)
评估 不使用 VPC 对等互连 内部路由 (PSC)

另请参阅网络选项

准备工作

执行以下初步设置步骤:

  1. 按照初始化 gcloud CLI 中的说明初始化 gcloud CLI(如果尚未初始化);或者,如果已初始化,请确保您在前提条件中创建的 Google Cloud 项目是gcloud 的默认项目。
  2. 定义以下本地环境变量。

    export PROJECT_ID=YOUR_PROJECT_ID
    export AUTH="Authorization: Bearer $(gcloud auth print-access-token)"
    export SUBNET=NETWORK_NAME
    export INSTANCE_NAME=INSTANCE_NAME
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

    其中:

    • PROJECT_ID 是您在前提条件中创建的 Cloud 项目 ID。
    • AUTH 使用不记名令牌定义 Authentication 标头。调用 Apigee API 时需使用此标头。请注意,令牌会在一段时间后过期,并且在令牌过期后,您可以使用同一命令重新生成令牌。如需了解详情,请参阅 print-access-token 命令参考页面。
    • SUBNET 是预配期间指定的子网。例如:default
    • INSTANCE_NAME:新实例的名称。例如 my-runtime-instance。 名称必须以小写字母开头,最多可包含 32 个字符,并且只能包含小写字母、数字和连字符。名称不能以连字符开头或结尾,且长度必须至少为 2 个字符。
    • PROJECT_NUMBER 是您在前提条件中创建的 Cloud 项目编号。此示例发出 gcloud 命令以获取项目编号。
  3. 从 Apigee 实例获取 location 属性的值。此值是实例所在的区域,例如 us-west1
    curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances
  4. 在实例区域内选择可用区,并将可用区名称放在变量中。该可用区必须在实例中。例如:
    export VM_ZONE="us-west1-b"

    如果您需要帮助识别实例区域中的可用区,可以使用此 gcloud 命令为已配置的运行时区域返回可用区名称。例如:

    VM_ZONE=$(gcloud compute zones list | grep "us-west1" | head -n 1 | awk '{print $1}')

创建虚拟机并调用 API 代理

接下来,使用 gcloud beta compute 命令在您的 VPC 网络内创建新虚拟机。该虚拟机充当网桥,允许您向内部负载均衡器 IP 发送请求。设置虚拟机后,您可以调用部署的 API 代理:

  1. 以下示例使用一些常见选项创建了一个新虚拟机,并使用您之前定义的输入作为环境变量。
    gcloud beta compute --project=$PROJECT_ID \
      instances create $INSTANCE_NAME \
      --zone=$VM_ZONE \
      --machine-type=e2-micro \
      --subnet=$SUBNET \
      --network-tier=PREMIUM \
      --no-restart-on-failure \
      --maintenance-policy=TERMINATE \
      --preemptible \
      --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=http-server,https-server \
      --image=debian-12-bookworm-v20240701 \
      --image-project=debian-cloud \
      --boot-disk-size=10GB \
      --boot-disk-type=pd-standard \
      --boot-disk-device-name=$INSTANCE_NAME \
      --no-shielded-secure-boot \
      --shielded-vtpm \
      --shielded-integrity-monitoring \
      --reservation-affinity=any
  2. 打开与您刚创建的新虚拟机的安全连接。

    gcloud compute ssh $INSTANCE_NAME --zone=$VM_ZONE --project=$PROJECT_ID
  3. 在虚拟机 shell 中,安装 jq 实用程序。它用于后续步骤:
    sudo apt-get update -y
    sudo apt-get install -y jq
    
  4. 在虚拟机 shell 中,创建以下环境变量,以便轻松复制/粘贴 API 代理请求:
    export AUTH="Authorization: Bearer $(gcloud auth print-access-token)"
    export PROJECT_ID=YOUR_PROJECT_ID
    export ENV_GROUP_HOSTNAME=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups -s | jq -r '.environmentGroups[0].hostnames[0]')
    
  5. 确保变量设置正确:
    echo $AUTH
    echo $PROJECT_ID
    echo $ENV_GROUP_HOSTNAME
  6. 调用 API 代理。请从下方选择与您在 Apigee 预配期间配置路由的方式相对应的选项。

    使用 VPC 对等互连的安装的选项

    • (TLS 选项 1)如果您按照内部路由 (VPC) 中的说明在项目中配置了内部负载均衡器 (ILB),请使用该 ILB 的 IP 调用代理。此选项使用由您控制且在创建内部负载均衡器时创建的 CA 证书:
      1. 按照使用虚拟机实例组后端设置内部 HTTP(S) 负载均衡中的说明,获取项目中 ILB 的 IP 地址。
      2. 调用 API 代理:
        curl -H "Host: $ENV_GROUP_HOSTNAME" \
          https://INTERNAL_LOAD_BALANCER_IP/PROXY_BASEPATH
    • (TLS 选项 2)使用解析为 Apigee 项目中的内部负载均衡器的默认完全限定域名。如果使用此选项,则通过内部创建的 Apigee 自签名证书来使用 TLS。您无法控制这些证书。
      1. 获取 Apigee 项目中的内部负载均衡器的 IP:
        export INTERNAL_LOAD_BALANCER_IP=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances -s | jq -r '.instances[0].host')
      2. 使用以下命令拉取组织创建期间创建的 CA 证书:
        curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID | jq -r .caCertificate | base64 -d > cacert.crt
      3. 将请求发送到已部署的 API 代理,其中 example.$PROJECT_ID.apigee.internal 是解析为内部负载均衡器的内部默认完全限定域名。
        curl -is -H "Host: $ENV_GROUP_HOSTNAME" \
          https://example.$PROJECT_ID.apigee.internal/PROXY_BASEPATH \
          --cacert cacert.crt \
          --resolve example.$PROJECT_ID.apigee.internal:443:$INTERNAL_LOAD_BALANCER_IP
    • (非 TLS 选项)如果不需要 TLS,您可以在 curl 命令上使用 -k 标志以停用 TLS 并避免 SSL 问题:
      1. 获取 Apigee 项目中的内部负载均衡器的 IP:
        export INTERNAL_LOAD_BALANCER_IP=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances -s | jq -r '.instances[0].host')
      2. 调用 API 代理:
        curl -i -k \
          -H "Host: $ENV_GROUP_HOSTNAME" \
          https://$INTERNAL_LOAD_BALANCER_IP/PROXY_BASEPATH
    • (服务端点选项)如果您使用 PSC 预配了付费或评估组织,请选择服务端点路由选项:
      1. 获取服务端点的 IP 地址。如果您需要查询端点 IP 地址,请参阅列出端点
      2. 调用 API 代理:
        curl -i -k \
           -H "Host: $ENV_GROUP_HOSTNAME" \
           https://SERVICE_ENDPOINT_IP/PROXY_BASEPATH

        例如:

        curl -H "Host: $ENV_GROUP_HOSTNAME" https://10.138.0.2/helloworld -k

    不使用非 VPC 对等互连的安装的选项

    • (服务端点选项)如果您使用 PSC 预配了付费或评估组织,请选择服务端点路由选项:
      1. 获取服务端点的 IP 地址。如果您需要查询端点 IP 地址,请参阅列出端点
      2. 调用 API 代理:
        curl -i -k \
            -H "Host: $ENV_GROUP_HOSTNAME" \
            https://SERVICE_ENDPOINT_IP/PROXY_BASEPATH

        例如:

        curl -H "Host: $ENV_GROUP_HOSTNAME" https://10.138.0.2/helloworld -k

    如果您在过程中的此部分遇到错误,请确保您在命令中创建和使用的所有环境变量都具有有效值。另请参阅问题排查

    下一步

    尝试创建代理,然后您可以部署该代理,或浏览介绍 Apigee 功能的 Apigee 教程,例如防止突然流量激增获取请求/响应流的详细视图

    (高级) 如果您计划转换为生产设置,则可以为新集群及相关 Cloud 服务配置安全边界。您可以通过 VPC Service Controls 实现这一目的。