2.11. Utilisation de l'adaptateur 3scale Istio


Avertissement

You are viewing documentation for a Red Hat OpenShift Service Mesh release that is no longer supported.

Les plans de contrôle Service Mesh version 1.0 et 1.1 ne sont plus pris en charge. Pour plus d'informations sur la mise à niveau de votre plan de contrôle Service Mesh, voir Mise à niveau de Service Mesh.

Pour plus d'informations sur l'état de l'assistance d'une version particulière de Red Hat OpenShift Service Mesh, consultez la page Cycle de vie du produit.

L'adaptateur 3scale Istio est un adaptateur optionnel qui vous permet d'étiqueter un service fonctionnant dans Red Hat OpenShift Service Mesh et d'intégrer ce service avec la solution 3scale API Management. Il n'est pas requis pour Red Hat OpenShift Service Mesh.

2.11.1. Intégrer l'adaptateur 3scale avec Red Hat OpenShift Service Mesh

Vous pouvez utiliser ces exemples pour configurer les requêtes vers vos services en utilisant l'adaptateur Istio 3scale.

Prérequis :

  • Red Hat OpenShift Service Mesh version 1.x
  • Un compte 3scale fonctionnel(SaaS ou 3scale 2.5 On-Premises)
  • L'activation du backend cache nécessite 3scale 2.9 ou plus
  • Prérequis de Red Hat OpenShift Service Mesh
Note

Pour configurer l'adaptateur 3scale Istio, reportez-vous aux ressources personnalisées Red Hat OpenShift Service Mesh pour obtenir des instructions sur l'ajout de paramètres d'adaptateur au fichier de ressources personnalisées.

Note

Portez une attention particulière à la ressource kind: handler. Vous devez la mettre à jour avec les informations d'identification de votre compte 3scale. Vous pouvez optionnellement ajouter une ressource service_id à un handler, mais ceci n'est conservé que pour la compatibilité ascendante, puisque cela rendrait le handler utile uniquement pour un seul service dans votre compte 3scale. Si vous ajoutez service_id à un handler, l'activation de 3scale pour d'autres services nécessite la création d'autres handlers avec des service_ids différents.

Utilisez un seul gestionnaire par compte 3scale en suivant les étapes ci-dessous :

Procédure

  1. Créez un gestionnaire pour votre compte 3scale et indiquez les informations d'identification de votre compte. N'indiquez pas d'identifiant de service.

      apiVersion: "config.istio.io/v1alpha2"
      kind: handler
      metadata:
       name: threescale
      spec:
       adapter: threescale
       params:
         system_url: "https://<organization>-admin.3scale.net/"
         access_token: "<ACCESS_TOKEN>"
       connection:
         address: "threescale-istio-adapter:3333"

    En option, vous pouvez fournir un champ backend_url dans la section params pour remplacer l'URL fournie par la configuration 3scale. Cela peut être utile si l'adaptateur fonctionne sur le même cluster que l'instance 3scale sur site, et que vous souhaitez utiliser le DNS interne du cluster.

  2. Modifiez ou corrigez la ressource Déploiement de tous les services appartenant à votre compte 3scale comme suit :

    1. Ajouter l'étiquette "service-mesh.3scale.net/service-id" avec une valeur correspondant à une service_id valide.
    2. Ajoutez l'étiquette "service-mesh.3scale.net/credentials" dont la valeur est celle de name of the handler resource de l'étape 1.
  3. Faites l'étape 2 pour le lier à vos identifiants de compte 3scale et à son identifiant de service, lorsque vous avez l'intention d'ajouter d'autres services.
  4. Modifiez la configuration de la règle avec votre configuration 3scale pour envoyer la règle au gestionnaire 3scale.

    Exemple de configuration d'une règle

      apiVersion: "config.istio.io/v1alpha2"
      kind: rule
      metadata:
        name: threescale
      spec:
        match: destination.labels["service-mesh.3scale.net"] == "true"
        actions:
          - handler: threescale.handler
            instances:
              - threescale-authorization.instance

2.11.1.1. Générer des ressources personnalisées à 3 échelles

L'adaptateur comprend un outil qui vous permet de générer les ressources personnalisées handler, instance et rule.

Tableau 2.16. Utilisation
OptionDescriptionExigéeValeur par défaut

-h, --help

Produit une sortie d'aide pour les options disponibles

Non

 

--name

Nom unique pour cet URL, paire de jetons

Oui

 

-n, --namespace

Espace de noms pour générer des modèles

Non

istio-system

-t, --token

jeton d'accès 3scale

Oui

 

-u, --url

uRL du portail administratif 3scale

Oui

 

--backend-url

uRL du backend 3scale. Si elle est définie, elle remplace la valeur lue dans la configuration du système

Non

 

-s, --service

iD API/Service 3scale

Non

 

--auth

modèle d'authentification à 3 niveaux à spécifier (1=clé API, 2=identification de l'application/clé de l'application, 3=OIDC)

Non

Hybride

-o, --output

Fichier dans lequel enregistrer les manifestes produits

Non

Sortie standard

--version

Affiche la version de l'interface de programmation et quitte immédiatement

Non

 
2.11.1.1.1. Générer des modèles à partir d'exemples d'URL
Note
  • Exécutez les commandes suivantes via oc exec à partir de l'image du conteneur de l'adaptateur 3scale dans Générer des manifestes à partir d'un adaptateur déployé.
  • Utilisez la commande 3scale-config-gen pour éviter les erreurs de syntaxe et d'indentation de YAML.
  • Vous pouvez omettre le site --service si vous utilisez les annotations.
  • Cette commande doit être invoquée à partir de l'image du conteneur via oc exec.

Procédure

  • Utilisez la commande 3scale-config-gen pour autogénérer des fichiers modèles permettant à la paire token, URL d'être partagée par plusieurs services en tant que gestionnaire unique :

    $ 3scale-config-gen --name=admin-credentials --url="https://<organization>-admin.3scale.net:443" --token="[redacted]"
  • L'exemple suivant génère les modèles avec l'identifiant du service intégré dans le gestionnaire :

    $ 3scale-config-gen --url="https://<organization>-admin.3scale.net" --name="my-unique-id" --service="123456789" --token="[redacted]"

Ressources supplémentaires

2.11.1.2. Générer des manifestes à partir d'un adaptateur déployé

Note
  • NAME est un identifiant que vous utilisez pour vous identifier auprès du service que vous gérez avec 3scale.
  • La référence CREDENTIALS_NAME est un identifiant qui correspond à la section match dans la configuration de la règle. Si vous utilisez l'outil CLI, l'identifiant NAME est automatiquement utilisé.
  • Sa valeur n'a pas besoin d'être spécifique : la valeur de l'étiquette doit simplement correspondre au contenu de la règle. Voir Routage du trafic de service à travers l'adaptateur pour plus d'informations.
  1. Exécutez cette commande pour générer des manifestes à partir d'un adaptateur déployé dans l'espace de noms istio-system:

    $ export NS="istio-system" URL="https://replaceme-admin.3scale.net:443" NAME="name" TOKEN="token"
    oc exec -n ${NS} $(oc get po -n ${NS} -o jsonpath='{.items[?(@.metadata.labels.app=="3scale-istio-adapter")].metadata.name}') \
    -it -- ./3scale-config-gen \
    --url ${URL} --name ${NAME} --token ${TOKEN} -n ${NS}
  2. Cela produira des exemples de sortie dans le terminal. Modifiez ces exemples si nécessaire et créez les objets à l'aide de la commande oc create.
  3. Lorsque la requête atteint l'adaptateur, ce dernier doit savoir comment le service correspond à une API sur 3scale. Vous pouvez fournir cette information de deux façons :

    1. Étiqueter la charge de travail (recommandé)
    2. Le code dur du gestionnaire est le suivant service_id
  4. Mettre à jour la charge de travail avec les annotations requises :

    Note

    Il suffit de mettre à jour l'identifiant de service fourni dans cet exemple s'il n'est pas déjà intégré dans le gestionnaire. The setting in the handler takes precedence.

    $ export CREDENTIALS_NAME="replace-me"
    export SERVICE_ID="replace-me"
    export DEPLOYMENT="replace-me"
    patch="$(oc get deployment "${DEPLOYMENT}"
    patch="$(oc get deployment "${DEPLOYMENT}" --template='{"spec":{"template":{"metadata":{"labels":{ {{ range $k,$v := .spec.template.metadata.labels }}"{{ $k }}":"{{ $v }}",{{ end }}"service-mesh.3scale.net/service-id":"'"${SERVICE_ID}"'","service-mesh.3scale.net/credentials":"'"${CREDENTIALS_NAME}"'"}}}}}' )"
    oc patch deployment "${DEPLOYMENT}" --patch ''"${patch}"''

2.11.1.3. Acheminement du trafic de service via l'adaptateur

Suivez les étapes suivantes pour générer du trafic pour votre service grâce à l'adaptateur 3scale.

Conditions préalables

  • Les informations d'identification et l'identifiant de service de votre administrateur 3scale.

Procédure

  1. Correspondre à la règle destination.labels["service-mesh.3scale.net/credentials"] == "threescale" que vous avez précédemment créée dans la configuration, dans la ressource kind: rule.
  2. Ajoutez l'étiquette ci-dessus à PodTemplateSpec sur le Déploiement de la charge de travail cible pour intégrer un service. la valeur, threescale, fait référence au nom du gestionnaire généré. Ce gestionnaire stocke le jeton d'accès requis pour appeler 3scale.
  3. Ajoutez l'étiquette destination.labels["service-mesh.3scale.net/service-id"] == "replace-me" à la charge de travail pour transmettre l'identifiant du service à l'adaptateur via l'instance au moment de la demande.

2.11.2. Configurer les paramètres d'intégration dans 3scale

Suivez cette procédure pour configurer les paramètres d'intégration de 3scale.

Note

Pour les clients SaaS de 3scale, Red Hat OpenShift Service Mesh est activé dans le cadre du programme Early Access.

Procédure

  1. Naviguez vers [your_API_name] Integration
  2. Cliquez sur Settings.
  3. Sélectionnez l'option Istio sous Deployment.

    • L'option API Key (user_key) sous Authentication est sélectionnée par défaut.
  4. Cliquez sur Update Product pour enregistrer votre sélection.
  5. Cliquez sur Configuration.
  6. Cliquez sur Update Configuration.

2.11.3. Comportement de mise en cache

Les réponses des API du système 3scale sont mises en cache par défaut dans l'adaptateur. Les entrées sont supprimées du cache lorsqu'elles sont plus anciennes que la valeur cacheTTLSeconds. Par défaut également, le rafraîchissement automatique des entrées mises en cache sera tenté quelques secondes avant leur expiration, sur la base de la valeur cacheRefreshSeconds. Vous pouvez désactiver le rafraîchissement automatique en définissant cette valeur à un niveau supérieur à la valeur cacheTTLSeconds.

La mise en cache peut être entièrement désactivée en donnant à cacheEntriesMax une valeur non positive.

En utilisant le processus de rafraîchissement, les valeurs mises en cache dont les hôtes deviennent inaccessibles seront réessayées avant d'être finalement purgées lorsqu'elles auront dépassé leur date d'expiration.

2.11.4. Authentification des demandes

Cette version prend en charge les méthodes d'authentification suivantes :

  • Standard API Keysles systèmes d'authentification sont des chaînes ou des hachages aléatoires uniques qui servent d'identificateur et de jeton secret.
  • Application identifier and key pairsles chaînes d'identification immuables et les chaînes de clés secrètes mutables.
  • OpenID authentication methodchaîne d'identification du client analysée à partir du jeton Web JSON.

2.11.4.1. Application de modèles d'authentification

Modifiez la ressource personnalisée instance, comme illustré dans les exemples de méthodes d'authentification suivants, pour configurer le comportement d'authentification. Vous pouvez accepter les informations d'authentification de :

  • En-têtes de la demande
  • Paramètres de la demande
  • Les en-têtes et les paramètres de la requête
Note

Lorsque vous spécifiez des valeurs à partir d'en-têtes, elles doivent être en minuscules. Par exemple, si vous souhaitez envoyer un en-tête sous la forme User-Key, il doit être référencé dans la configuration sous la forme request.headers["user-key"].

2.11.4.1.1. Méthode d'authentification de la clé API

Service Mesh recherche la clé API dans les paramètres de requête et les en-têtes de demande spécifiés dans l'option user du paramètre de ressource personnalisée subject. Il vérifie les valeurs dans l'ordre indiqué dans le fichier de ressources personnalisées. Vous pouvez limiter la recherche de la clé API aux paramètres de requête ou aux en-têtes de requête en omettant l'option indésirable.

Dans cet exemple, Service Mesh recherche la clé API dans le paramètre de requête user_key. Si la clé API ne figure pas dans le paramètre de la requête, Service Mesh vérifie alors l'en-tête user-key.

Exemple de méthode d'authentification par clé API

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
  namespace: istio-system
spec:
  template: authorization
  params:
    subject:
      user: request.query_params["user_key"] | request.headers["user-key"] | ""
    action:
      path: request.url_path
      method: request.method | "get"

Si vous souhaitez que l'adaptateur examine un paramètre de requête ou un en-tête de requête différent, modifiez le nom en conséquence. Par exemple, pour vérifier la clé API dans un paramètre de requête nommé "key", remplacez request.query_params["user_key"] par request.query_params["key"].

2.11.4.1.2. Méthode d'authentification de l'ID de l'application et de la paire de clés de l'application

Service Mesh recherche l'identifiant et la clé de l'application dans les paramètres de la requête et les en-têtes de la demande, comme spécifié dans l'option properties du paramètre de ressource personnalisée subject. La clé d'application est facultative. Il vérifie les valeurs dans l'ordre indiqué dans le fichier de ressources personnalisées. Vous pouvez limiter la recherche des informations d'identification aux paramètres de requête ou aux en-têtes de requête en n'incluant pas l'option "unwanted".

Dans cet exemple, Service Mesh recherche d'abord l'identifiant et la clé de l'application dans les paramètres de la requête, puis passe aux en-têtes de la requête si nécessaire.

Exemple de méthode d'authentification par ID d'application et paire de clés d'application

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
  namespace: istio-system
spec:
  template: authorization
  params:
    subject:
        app_id: request.query_params["app_id"] | request.headers["app-id"] | ""
        app_key: request.query_params["app_key"] | request.headers["app-key"] | ""
    action:
      path: request.url_path
      method: request.method | "get"

Si vous souhaitez que l'adaptateur examine un paramètre de requête ou un en-tête de requête différent, modifiez le nom en conséquence. Par exemple, pour vérifier l'ID de l'application dans un paramètre de requête nommé identification, remplacez request.query_params["app_id"] par request.query_params["identification"].

2.11.4.1.3. Méthode d'authentification OpenID

Pour utiliser le champ OpenID Connect (OIDC) authentication method, utilisez la valeur properties sur le champ subject pour définir client_id, et éventuellement app_key.

Vous pouvez manipuler cet objet à l'aide des méthodes décrites précédemment. Dans l'exemple de configuration ci-dessous, l'identifiant du client (ID de l'application) est extrait du jeton Web JSON (JWT) sous l'étiquette azp. Vous pouvez le modifier si nécessaire.

Exemple de méthode d'authentification OpenID

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
spec:
  template: threescale-authorization
  params:
    subject:
      properties:
        app_key: request.query_params["app_key"] | request.headers["app-key"] | ""
        client_id: request.auth.claims["azp"] | ""
      action:
        path: request.url_path
        method: request.method | "get"
        service: destination.labels["service-mesh.3scale.net/service-id"] | ""

Pour que cette intégration fonctionne correctement, l'OIDC doit toujours être effectué dans 3scale pour que le client soit créé dans le fournisseur d'identité (IdP). Vous devez créer une autorisation de demande pour le service que vous voulez protéger dans le même espace de noms que ce service. Le JWT est transmis dans l'en-tête Authorization de la requête.

Dans l'exemple RequestAuthentication défini ci-dessous, remplacez issuer, jwksUri, et selector comme il convient.

Exemple de politique OpenID

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: jwt-example
  namespace: info
spec:
  selector:
    matchLabels:
      app: productpage
  jwtRules:
  - issuer: >-
      http://keycloak-keycloak.34.242.107.254.nip.io/auth/realms/3scale-keycloak
    jwksUri: >-
      http://keycloak-keycloak.34.242.107.254.nip.io/auth/realms/3scale-keycloak/protocol/openid-connect/certs

2.11.4.1.4. Méthode d'authentification hybride

Vous pouvez choisir de ne pas appliquer une méthode d'authentification particulière et d'accepter toutes les informations d'identification valides pour l'une ou l'autre méthode. Si une clé API et une paire ID d'application/clé d'application sont fournies, Service Mesh utilise la clé API.

Dans cet exemple, Service Mesh vérifie la présence d'une clé API dans les paramètres de la requête, puis dans les en-têtes de la requête. S'il n'y a pas de clé API, il recherche alors un identifiant et une clé d'application dans les paramètres de la requête, puis dans les en-têtes de la requête.

Exemple de méthode d'authentification hybride

apiVersion: "config.istio.io/v1alpha2"
kind: instance
metadata:
  name: threescale-authorization
spec:
  template: authorization
  params:
    subject:
      user: request.query_params["user_key"] | request.headers["user-key"] |
      properties:
        app_id: request.query_params["app_id"] | request.headers["app-id"] | ""
        app_key: request.query_params["app_key"] | request.headers["app-key"] | ""
        client_id: request.auth.claims["azp"] | ""
    action:
      path: request.url_path
      method: request.method | "get"
      service: destination.labels["service-mesh.3scale.net/service-id"] | ""

2.11.5. 3scale Adapter metrics

L'adaptateur, par défaut, rapporte diverses mesures Prometheus qui sont exposées sur le port 8080 au point de terminaison /metrics. Ces métriques donnent un aperçu de la façon dont les interactions entre l'adaptateur et 3scale se déroulent. Le service est étiqueté pour être automatiquement découvert et scrappé par Prometheus.

2.11.6. vérification de l'adaptateur Istio 3scale

Vous voudrez peut-être vérifier si l'adaptateur 3scale Istio fonctionne comme prévu. Si votre adaptateur ne fonctionne pas, suivez les étapes suivantes pour résoudre le problème.

Procédure

  1. Assurez-vous que le pod 3scale-adapter fonctionne dans l'espace de noms du plan de contrôle Service Mesh :

    oc get pods -n <istio-system>
  2. Vérifiez que le pod 3scale-adapter a imprimé des informations sur son démarrage, telles que sa version :

    oc logs <istio-system>
  3. Lors de l'exécution de requêtes vers les services protégés par l'intégration de l'adaptateur 3scale, essayez toujours les requêtes qui n'ont pas les bonnes informations d'identification et assurez-vous qu'elles échouent. Vérifiez les journaux de l'adaptateur 3scale pour recueillir des informations supplémentaires.

2.11.7. liste de contrôle de dépannage de l'adaptateur Istio 3scale

En tant qu'administrateur installant l'adaptateur 3scale Istio, il y a un certain nombre de scénarios qui peuvent faire que votre intégration ne fonctionne pas correctement. Utilisez la liste suivante pour dépanner votre installation :

  • Indentation YAML incorrecte.
  • Sections YAML manquantes.
  • J'ai oublié d'appliquer les changements dans le YAML au cluster.
  • Oublié d'étiqueter les charges de travail de service avec la clé service-mesh.3scale.net/credentials.
  • Oublié d'étiqueter les charges de travail de service avec service-mesh.3scale.net/service-id lorsque l'on utilise des gestionnaires qui ne contiennent pas de service_id afin qu'ils soient réutilisables par compte.
  • La ressource personnalisée Rule pointe vers le mauvais gestionnaire ou les mauvaises ressources personnalisées d'instance, ou les références n'ont pas le suffixe de l'espace de noms correspondant.
  • La section Rule custom resource match ne peut pas correspondre au service que vous configurez, ou elle pointe vers une charge de travail de destination qui n'est pas en cours d'exécution ou qui n'existe pas.
  • Mauvais jeton d'accès ou URL pour le portail d'administration 3scale dans le gestionnaire.
  • La section params/subject/properties de la ressource personnalisée Instance ne répertorie pas les bons paramètres pour app_id, app_key ou client_id, soit parce qu'ils spécifient le mauvais emplacement, comme les paramètres de requête, les en-têtes et les demandes d'autorisation, soit parce que les noms des paramètres ne correspondent pas aux requêtes utilisées pour les tests.
  • Ne pas utiliser le générateur de configuration sans se rendre compte qu'il se trouve dans l'image du conteneur de l'adaptateur et qu'il a besoin de oc exec pour l'invoquer.
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.