本主题讨论基本路径路由。通过基本路径路由,您可以配置和管理 Apigee Hybrid 将 API 代理调用路由到正确环境的方式。
使用基本路径路由管理代理部署
由于您可以在 Hybrid 中将单个虚拟主机映射到多个环境,因此需要一种方法来指定将哪个代理基本路径映射到哪个环境。
例如,假设您要将两个环境映射到同一主机别名:apitest.mydomain.net
。在替换文件中,您可以创建以下配置,其中环境 dev1 和 dev2 都会映射到此主机。例如:
envs: - name: dev1 hostAlias: "apitest.mydomain.net" ... - name: dev2 hostAlias: "apitest.mydomain.net" ...
现在,假设您将代理部署到这些环境。您要:
- 将基本路径为 /foo1 的代理 foo1 部署到 dev1
- 将基本路径为 /foo2 的代理 foo2 部署到 dev2
假设客户端调用此 API:https://apitest.mydomain.net/foo1
。请注意,此路径(或为请求生成的主机标头中)中没有任何内容指示 Hybrid 将调用路由到哪个环境。是将 foo1 代理部署到 dev1 还是 dev2?根据请求网址,没有指示方式。您必须将其中每个基本路径显式映射到一个或多个环境。
要指定代理调用应路由到的环境,请将 paths.uri.prefixes
属性添加到替换文件中的 envs
属性,如以下示例所示:
gcpProjectID: example k8sClusterName: apigee-hybrid # Apigee org name. org: my-org envs: # Apigee environment name. - name: dev1 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo1 - name: dev2 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo2 ...
现在,当 API 调用进入(例如:https://apitest.mydomain.net/foo1
)时,入站流量路由器会知道其发送位置。它知道 /foo1 代理已部署到 dev1 环境,并且调用会路由到 dev1 的消息处理器。
如果您发送此调用 https://apitest.mydomain.net/foo2
,那么也会将其路由到 dev2
环境的 MP,依此类推。
总而言之,paths.uri.prefixes
配置允许您在共享同一主机别名的多个环境之间管理代理部署。
最佳做法:如果您希望多个环境共享同一个主机别名,请使用基本路径路由。基本路径路由允许您限制部署到任何环境的代理数量。如需了解详情,请参阅限制代理部署数。
向同一网域添加新环境
本部分介绍如何向网域添加新环境。
在此场景中,假设您已将环境 dev1
部署到集群。在此示例配置中,只允许使用基本路径前缀 /foo1
的代理:
gcpProjectID: example k8sClusterName: apigee-hybrid # Apigee org name. org: my-org envs: # Apigee environment name. - name: dev1 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo1 mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/example-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key metrics: serviceAccountPath: ./service-accounts/willwitman-istio-25240157d44a.json
要添加共享同一网域的另一个环境,请执行以下步骤:
- 使用新的环境配置创建新的替换文件。例如,此配置会创建一个名为
dev2
的环境。在此环境中,只允许使用路径后缀/foo2
的代理:gcpProjectID: example k8sClusterName: apigee-hybrid # Apigee org name. org: my-org envs: # Apigee environment name. - name: dev2 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo2 mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/example-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key metrics: serviceAccountPath: ./service-accounts/willwitman-istio-25240157d44a.json
- 按任意顺序运行以下命令:
apigeectl apply -f overrides/overrides-dev2.yaml -c udca
apigeectl apply -f overrides/overrides-dev2.yaml -c synchronizer
apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
- 将代理 foo2 部署到 dev2 环境。
- 调用该代理以测试设置。
curl https://apitest.mydomain.net/foo2
向现有环境添加新代理基本路径
要向现有环境添加新的基本路径,只需为每个新基本路径添加 prefixes
条目即可。例如,如果您使用基本路径 /foo4 创建新代理,并希望将其部署到名为 dev2 的环境,请执行以下步骤:
- 打开包含 dev2 环境定义的替换文件。
- 将
/foo4
基本路径添加到paths.uri.prefixes
元素:gcpProjectID: example k8sClusterName: apigee-hybrid # Apigee org name. org: my-org envs: # Apigee environment name. - name: dev2 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo2 - /foo4 mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/example-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key metrics: serviceAccountPath: ./service-accounts/willwitman-istio-25240157d44a.json
- 将
runtime
组件应用于集群:apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
- 调用该代理以测试设置。
curl https://apitest.mydomain.net/foo4
如果对
https://apitest.mydomain.net/foo4
进行 API 调用,则 Hybrid 知道将其路由到环境dev2
。