ベースパス ルーティングを構成する

このトピックでは、ベースパス ルーティングについて説明します。ベースパス ルーティングを使用すると、Apigee ハイブリッドが API プロキシの呼び出しを正しい環境にルーティングする方法を構成し、管理できます。

ベースパス ルーティングを使用してプロキシのデプロイを管理する

ハイブリッドでは 1 つの仮想ホストを複数の環境にマッピングできるため、どのプロキシ ベースパスがどの環境にマッピングされるかを指定する手段が必要です。

たとえば、2 つの環境を apitest.mydomain.net という同じホスト エイリアスにマッピングする場合を考えます。その場合は、オーバーライド ファイルで次の構成を作成し、環境 dev1dev2 の両方をこのホストにマッピングします。次に例を示します。

envs:
  - name: dev1
    hostAlias: "apitest.mydomain.net"
    ...
  - name: dev2
    hostAlias: "apitest.mydomain.net"
    ...

ここで、これらの環境にプロキシをデプロイするとします。デプロイするプロキシは、次のとおりです。

  • プロキシ foo1(ベースパスは /foo1)を dev1 にデプロイする
  • プロキシ foo2(ベースパスは /foo2)を dev2 にデプロイする

クライアントが https://apitest.mydomain.net/foo1 API を呼び出すとします。このパス内(または、リクエストで生成されたホストヘッダー内)には、どの環境を呼び出しのルーティング先にするかをハイブリッドに伝える情報がないことにご注意ください。foo1 プロキシが dev1 または dev2 にデプロイされているかをリクエスト URL だけで判断することはできません。各ベースパスを 1 つ以上の環境に明示的にマッピングする必要があります。

プロキシ呼び出しのルーティング先となる環境を指定するには、次の例のように、オーバーライド ファイルの envs プロパティに paths.uri.prefixes プロパティを追加します。

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
    ...

これで、Ingress ルーターが https://apitest.mydomain.net/foo1 のような API 呼び出しを受信したときに、その送信先を判断できます。/foo1 プロキシは dev1 環境にデプロイされているため、この呼び出しは dev1 の Message Processor にルーティングされます。

https://apitest.mydomain.net/foo2 の呼び出しが送信された場合も同様に、dev2 環境の MP にルーティングされます。

まとめると、paths.uri.prefixes 構成を使用することにより、同じホスト エイリアスを共有する複数の環境間でプロキシのデプロイを管理できます。

ベスト プラクティス: 複数の環境で同じホスト エイリアスを共有する場合は、ベースパス ルーティングを使用します。ベースパス ルーティングを使用すると、1 つの環境にデプロイするプロキシの数を抑えることができます。詳細については、プロキシ デプロイの数を制限するをご覧ください。

同じドメインに新しい環境を追加する

このセクションでは、新しい環境をドメインに追加する方法について説明します。

ここでは、環境 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. プロキシ foo2dev2 環境にデプロイします。
  4. プロキシを呼び出して、設定をテストします。
    curl https://apitest.mydomain.net/foo2

既存の環境に新しいプロキシ ベースパスを追加する

既存の環境に新しいベースパスを追加するには、新しいベースパスごとに prefixes エントリを追加します。たとえば、ベースパス /foo4 を使用して新しいプロキシを作成し、それを dev2 という環境にデプロイする場合は、次の手順に従います。

  1. dev2 環境の定義を含むオーバーライド ファイルを開きます。
  2. paths.uri.prefixes 要素に /foo4 ベースパスを追加します。
    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 呼び出しを受信した場合、ハイブリッドは、ルーティング先を環境 dev2 だと判断します。