기본 경로 라우팅 구성

이 주제에서는 기본 경로 라우팅을 설명합니다. 기본 경로 라우팅을 사용하면 Apigee Hybrid가 API 프록시 호출을 올바른 환경으로 라우팅하는 방법을 구성하고 관리할 수 있습니다.

기본 경로 라우팅을 사용하여 프록시 배포 관리

하이브리드에서 단일 가상 호스트를 여러 환경에 매핑할 수 있으므로 어떤 프록시 기반 경로가 어떤 환경에 매핑되는지 지정할 방법이 필요합니다.

예를 들어 두 환경을 동일한 호스트 별칭 apitest.mydomain.net에 매핑한다고 가정해 보겠습니다. 재정의 파일에서 dev1dev1 환경이 모두 이 호스트에 매핑되는 다음 구성을 만들 수 있습니다. 예를 들면 다음과 같습니다.

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

이제 이러한 환경에 프록시를 배포한다고 가정해 보겠습니다. 다음과 같이 배포합니다.

  • 기본 경로가 foo1인 프록시 foo1foo1로 배포
  • 기본 경로가 foo2인 프록시 foo2에서 foo2로 배포

클라이언트가 이 API(https://apitest.mydomain.net/foo1)를 호출한다고 가정해 보겠습니다. 이 경로(또는 요청에 대해 생성된 호스트 헤더)에는 하이브리드에게 호출을 라우팅할 환경을 설명하는 어떠한 항목도 없습니다. foo1 프록시가 foo1 또는 foo1에 배포되었나요? 요청 URL만을 기반으로 이를 알 수 있는 방법은 없습니다. 이러한 기본 경로를 하나 이상의 환경에 명시적으로 매핑해야 합니다.

프록시 호출이 라우팅될 환경을 지정하려면 다음 예시와 같이 재정의 파일의 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
    ...

이제 다음과 같은 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. 프록시 foo2foo2 환경에 배포합니다.
  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 호출이 수신되면 하이브리드는 이를 인식하여 dev2 환경으로 라우팅합니다.