您正在查看 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 1
和 network
2
(在 Google Cloud 上)以及 network 3
(在本地运行)中都有工作负载。
客户创建(或重复使用)名为 transit
的网络。所有网络都与此网络对等互连,包括为 Apigee 预留的网络。
在某些情况下,客户可能不希望 Apigee 的网络与 transit
网络直接对等互连。在这种情况下,客户可以预配一个新网络(称为 apim
),并将该网络与 Apigee 对等互连。然后,apim
网络与 transit
网络对等互连。
下图展示了这一结构:
将流量路由到中转 VPC
如果 Apigee 网络不与 transit
网络直接对等互连,请使用 iptable
规则设置一个 Compute Engine 代管式实例组 (MIG),将所有流量转发到中转网络,如下图所示:
本文档的其余部分将探讨关于 Apigee 如何将流量从 transit
网络发送到 network 1
和 network 2
等网络中运行的工作负载的策略。
iptables
使用 iptables
路由流量
此选项使用 Compute Engine 上的 iptable
规则将流量路由到不同的后端。在 Apigee API 代理中,目标端点将包含 ILB_IP1:Port1
或 ILB_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_IP
和 Port
(最有可能是 443)。
transit
项目中的 ILB 将根据网址路径路由(或主机名 + 基于路径的路由)将流量转发到不同的网络。再次使用具有 iptables
的 Compute Engine MIG 将流量桥接到不同的网络。