南向网络模式

您正在查看 Apigee X 文档。
查看 Apigee Edge 文档。

背景

Apigee 运行时使用 VPC 网络对等互连将流量路由到后端服务。下图简要展示了这一交互情况:

创建 Apigee 组织时,客户必须提供可与 Apigee 对等互连的网络:

curl -H "$AUTH" -X POST \
  -H "Content-Type:application/json" \
  "https://apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"  \
  -d '{
    "name":"'"$PROJECT_ID"'",
    "analyticsRegion":"'"$ANALYTICS_REGION"'",
    "runtimeType":"CLOUD",
    "authorizedNetwork":"NETWORK_NAME",
    "runtimeDatabaseEncryptionKeyName":"DATABASE_KEY_NAME"
  }'

由于目标/后端应用位于对等互连网络中,因此 Apigee 可以访问任何 IP 地址并将流量路由到这些地址。

许多企业在多个网络中部署其应用。但是,Apigee 仅支持与一个网络对等互连。本文档探讨了需要 Apigee 将流量发送到多个网络的客户可以采用的策略。

建议方案

Apigee 建议创建一个新网络(或重复使用现有网络)作为中转网络。中转网络充当所有其他网络的中心。Apigee 将是此中心的辐条之一。

下图展示了这一结构:

在此示例中,企业在 network 1network 2(在 Google Cloud 上)以及 network 3(在本地运行)中都有工作负载。

客户创建(或重复使用)名为 transit 的网络。所有网络都与此网络对等互连,包括为 Apigee 预留的网络。

在某些情况下,客户可能不希望 Apigee 的网络与 transit 网络直接对等互连。在这种情况下,客户可以预配一个新网络(称为 apim),并将该网络与 Apigee 对等互连。然后,apim 网络与 transit 网络对等互连。

下图展示了这一结构:

将流量路由到中转 VPC

如果 Apigee 网络不与 transit 网络直接对等互连,请使用 iptable 规则设置一个 Compute Engine 代管式实例组 (MIG),将所有流量转发到中转网络,如下图所示:

本文档的其余部分将探讨关于 Apigee 如何将流量从 transit 网络发送到 network 1network 2 等网络中运行的工作负载的策略。

iptables

使用 iptables 路由流量

此选项使用 Compute Engine 上的 iptable 规则将流量路由到不同的后端。在 Apigee API 代理中,目标端点将包含 ILB_IP1:Port1ILB_IP1:Port2 等。每个端口唯一标识不同的后端服务。

在 Compute Engine 虚拟机上,客户将设置 iptable 规则,将 Port1 路由到 DESTINATION_IP1:DestPort(在 RFC 1918 网络中),以此类推。每次添加新的目标时,都必须更新 iptable 规则。

例如:

在以下示例中,传入 Port1 的 API 调用将被路由到 DESTINATION_IP1:DestPort

sysctl -w net.ipv4.ip_forward=1

# change source IP to (NAT) VM IP
iptables -t nat -A POSTROUTING -j MASQUERADE

# change the destination IP to the real target ip and port
iptables -t nat -A PREROUTING -p tcp --dport Port1 -j DNAT --to-destination DESTINATION_IP1:DestPort

L7 ILB

使用内部负载平衡器来路由流量

此选项使用 Compute Engine 的内部负载平衡器 (L7) 将请求路由到各个后端。内部负载平衡器 (ILB) 支持基于路径(或主机名 + 路径)的路由。url-map 示例如下所示:

- hosts:
  - '*'
  pathMatcher: path-matcher-1
id: '3331829996983273293'
kind: compute#urlMap
name: apigee-l7-ilb
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/apigee-product-demo/regions/us-west1/backendServices/service-products
  name: path-matcher-1
  pathRules:
  - paths:
    - /products/*
    service: https://www.googleapis.com/compute/v1/projects/apigee-product-demo/regions/us-west1/backendServices/service-products
  - paths:
    - /catalog/*
    service: https://www.googleapis.com/compute/v1/projects/apigee-product-demo/regions/us-west1/backendServices/service-catalog

在 Apigee API 代理中,如果项目与中转网络直接对等互连,目标端点将包含 ILB_IPPort(最有可能是 443)。

transit 项目中的 ILB 将根据网址路径路由(或主机名 + 基于路径的路由)将流量转发到不同的网络。再次使用具有 iptables 的 Compute Engine MIG 将流量桥接到不同的网络。