Cet article traite du routage du chemin de base. Le routage du chemin de base vous permet de configurer et de gérer la manière dont Apigee hybrid achemine les appels de proxy d'API vers le bon environnement.
Utiliser le routage de chemin de base pour gérer les déploiements de proxy
Comme vous pouvez mapper un seul hôte virtuel avec plusieurs environnements dans Apigee hybrid, vous devez disposer d'un moyen de spécifier quel chemin de base du proxy correspond à quel environnement.
Par exemple, supposons que vous souhaitiez mapper deux environnements avec le même alias d'hôte : apitest.mydomain.net
. Dans votre fichier de remplacement, vous pouvez créer la configuration suivante, où les environnements dev1 et dev2 sont tous deux mappés avec cet hôte. Exemple :
envs: - name: dev1 hostAlias: "apitest.mydomain.net" ... - name: dev2 hostAlias: "apitest.mydomain.net" ...
Supposons maintenant que vous déployiez des proxys dans ces environnements. Vous déployez :
- le proxy foo1 avec le chemin de base /foo1 dans dev1 ;
- le proxy foo2 avec le chemin de base /foo2 dans dev2.
Supposons qu'un client appelle cette API : https://apitest.mydomain.net/foo1
. Notez que rien dans ce chemin (ou dans l'en-tête d'hôte généré pour la requête) n'indique à Apigee hybrid vers quel environnement acheminer l'appel. Le proxy foo1 est-il déployé dans dev1 ou dans dev2 ?
L'URL de la requête seule ne permet pas de le déterminer. Vous devez mapper explicitement chacun de ces chemins de base avec un ou plusieurs environnements.
Pour spécifier l'environnement vers lequel un appel de proxy doit être acheminé, ajoutez la propriété paths.uri.prefixes
à la propriété envs
dans votre fichier de remplacement, comme indiqué dans l'exemple suivant :
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 ...
Désormais, lorsqu'un appel d'API arrive, par exemple https://apitest.mydomain.net/foo1
, le routeur d'entrée sait où l'envoyer. Il sait que le proxy /foo1 est déployé dans l'environnement dev1 et que l'appel est acheminé vers le processeur de messages de dev1.
Si vous envoyez l'appel https://apitest.mydomain.net/foo2
, il est également acheminé vers le processeur de messages de dev2
, et ainsi de suite.
En résumé, la configuration de paths.uri.prefixes
vous permet de gérer les déploiements de proxy entre plusieurs environnements partageant le même alias d'hôte.
Bonne pratique : Utilisez le routage du chemin de base lorsque vous souhaitez que plusieurs environnements partagent le même alias d'hôte. Le routage du chemin de base vous permet de limiter le nombre de proxys déployés dans un même environnement. Pour plus d'informations, consultez la section Limiter le nombre de déploiements de proxy.
Ajouter un nouvel environnement au même domaine
Cette section explique comment ajouter un nouvel environnement à un domaine.
Dans ce scénario, supposons que vous disposiez d'un environnement dev1
déjà déployé sur le cluster. Dans cet exemple de configuration, seuls les proxys dotés du préfixe de chemin de base /foo1
sont autorisés :
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
Pour ajouter un autre environnement partageant le même domaine, procédez comme suit :
- Créez un fichier de remplacement avec la nouvelle configuration d'environnement. Par exemple, cette configuration crée un environnement appelé
dev2
. Dans cet environnement, seuls les proxys dotés du suffixe de chemin/foo2
sont autorisés :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
- Exécutez les commandes suivantes dans n'importe quel ordre :
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
- Déployez le proxy foo2 dans l'environnement dev2.
- Appelez le proxy pour tester la configuration.
curl https://apitest.mydomain.net/foo2
Ajouter un nouveau chemin de base de proxy à un environnement existant
Pour ajouter un nouveau chemin de base à un environnement existant, il vous suffit d'ajouter une entrée prefixes
pour chaque nouveau chemin de base. Par exemple, si vous créez un proxy avec le chemin d'accès de base /foo4 et que vous souhaitez le déployer dans l'environnement appelé dev2, procédez comme suit :
- Ouvrez le fichier de remplacement contenant la définition de l'environnement dev2.
- Ajoutez le chemin de base
/foo4
à l'élémentpaths.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
- Appliquez le composant
runtime
au cluster :apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
- Appelez le proxy pour tester la configuration.
curl https://apitest.mydomain.net/foo4
Si un appel d'API arrive pour
https://apitest.mydomain.net/foo4
, Apigee hybrid sait qu'il doit l'acheminer vers l'environnementdev2
.