이 주제에서는 기본 경로 라우팅을 설명합니다. 기본 경로 라우팅을 사용하면 Apigee Hybrid가 API 프록시 호출을 올바른 환경으로 라우팅하는 방법을 구성하고 관리할 수 있습니다.
기본 경로 라우팅을 사용하여 프록시 배포 관리
하이브리드에서 단일 가상 호스트를 여러 환경에 매핑할 수 있으므로 어떤 프록시 기반 경로가 어떤 환경에 매핑되는지 지정할 방법이 필요합니다.
예를 들어 두 환경을 동일한 호스트 별칭 apitest.mydomain.net
에 매핑한다고 가정해 보겠습니다. 재정의 파일에서 dev1 및 dev1 환경이 모두 이 호스트에 매핑되는 다음 구성을 만들 수 있습니다. 예를 들면 다음과 같습니다.
envs: - name: dev1 hostAlias: "apitest.mydomain.net" ... - name: dev2 hostAlias: "apitest.mydomain.net" ...
이제 이러한 환경에 프록시를 배포한다고 가정해 보겠습니다. 다음과 같이 배포합니다.
- 기본 경로가 foo1인 프록시 foo1를 foo1로 배포
- 기본 경로가 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
동일한 도메인을 공유하는 다른 환경을 추가하려면 다음 단계를 따르세요.
- 새 환경 구성으로 새 재정의 파일을 만듭니다. 예를 들어 이 구성은
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를 foo2 환경에 배포합니다.
- 프록시를 호출하여 설정을 테스트합니다.
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 호출이 수신되면 하이브리드는 이를 인식하여dev2
환경으로 라우팅합니다.