配置基本路径路由

本主题讨论基本路径路由。通过基本路径路由,您可以配置和管理 Apigee Hybrid 将 API 代理调用路由到正确环境的方式。

使用基本路径路由管理代理部署

由于您可以在 Hybrid 中将单个虚拟主机映射到多个环境,因此需要一种方法来指定将哪个代理基本路径映射到哪个环境。

例如,假设您要将两个环境映射到同一主机别名:apitest.mydomain.net。在替换文件中,您可以创建以下配置,其中环境 dev1dev2 都会映射到此主机。例如:

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

要添加共享同一网域的另一个环境,请执行以下步骤:

  1. 使用新的环境配置创建新的替换文件。例如,此配置会创建一个名为 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
    
  2. 按任意顺序运行以下命令:
    1. apigeectl apply -f overrides/overrides-dev2.yaml -c udca
    2. apigeectl apply -f overrides/overrides-dev2.yaml -c synchronizer
    3. apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
  3. 将代理 foo2 部署到 dev2 环境。
  4. 调用该代理以测试设置。
    curl https://apitest.mydomain.net/foo2

向现有环境添加新代理基本路径

要向现有环境添加新的基本路径,只需为每个新基本路径添加 prefixes 条目即可。例如,如果您使用基本路径 /foo4 创建新代理,并希望将其部署到名为 dev2 的环境,请执行以下步骤:

  1. 打开包含 dev2 环境定义的替换文件。
  2. /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
    
  3. runtime 组件应用于集群:
    apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
  4. 调用该代理以测试设置。
    curl https://apitest.mydomain.net/foo4

    如果对 https://apitest.mydomain.net/foo4 进行 API 调用,则 Hybrid 知道将其路由到环境 dev2