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

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

查看 Apigee Edge 文档。

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

预配选项 网络选项 预配步骤
付费订阅 使用 VPC 对等互连 内部路由 (VPC)
内部路由 (PSC)
随用随付 使用 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-10-buster-v20210217 \
      --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 实现这一目的。