1.11. Mise à niveau du maillage de services


Pour accéder aux fonctionnalités les plus récentes de Red Hat OpenShift Service Mesh, mettez à niveau vers la version actuelle, 2.3.3.

1.11.1. Comprendre les versions

Red Hat utilise la version sémantique pour les versions de ses produits. La version sémantique est un numéro à trois composants au format X.Y.Z, où :

  • X correspond à une version majeure. Les versions majeures indiquent généralement une sorte de changement radical : changements architecturaux, changements d'API, changements de schéma et autres mises à jour majeures similaires.
  • Y correspond à une version mineure. Les versions mineures contiennent de nouvelles caractéristiques et fonctionnalités tout en maintenant la compatibilité ascendante.
  • Z correspond à une version de correctif (également connue sous le nom de "z-stream release"). Les versions de correctifs sont utilisées pour remédier aux vulnérabilités et expositions communes (CVE) et pour publier des corrections de bogues. Les nouvelles caractéristiques et fonctionnalités ne sont généralement pas publiées dans le cadre d'une version Patch.

1.11.1.1. Comment les versions affectent les mises à jour de Service Mesh

La procédure de mise à jour varie en fonction de la version de la mise à jour que vous effectuez.

  • Patch updates - Les mises à jour des correctifs sont gérées par le gestionnaire du cycle de vie des opérateurs (OLM) ; elles se produisent automatiquement lorsque vous mettez à jour vos opérateurs.
  • Minor upgrades - Les mises à niveau mineures nécessitent à la fois une mise à jour vers la version la plus récente de Red Hat OpenShift Service Mesh Operator et une modification manuelle de la valeur spec.version dans vos ressources ServiceMeshControlPlane.
  • Major upgrades - Les mises à niveau majeures nécessitent à la fois une mise à jour vers la version la plus récente de Red Hat OpenShift Service Mesh Operator et une modification manuelle de la valeur spec.version dans vos ressources ServiceMeshControlPlane. Étant donné que les mises à niveau majeures peuvent contenir des changements qui ne sont pas rétrocompatibles, des modifications manuelles supplémentaires peuvent être nécessaires.

1.11.1.2. Comprendre les versions de Service Mesh

Afin de comprendre quelle version de Red Hat OpenShift Service Mesh vous avez déployée sur votre système, vous devez comprendre comment chacune des versions des composants est gérée.

  • Operator version - La version la plus récente de l'opérateur est 2.3.3. Le numéro de version de l'opérateur indique uniquement la version de l'opérateur actuellement installé. Étant donné que l'Opérateur Red Hat OpenShift Service Mesh prend en charge plusieurs versions du plan de contrôle Service Mesh, la version de l'Opérateur ne détermine pas la version de vos ressources ServiceMeshControlPlane déployées.

    Important

    La mise à niveau vers la dernière version de l'opérateur applique automatiquement les mises à jour des correctifs, mais ne met pas automatiquement à niveau votre plan de contrôle Service Mesh vers la dernière version mineure.

  • ServiceMeshControlPlane version - La version ServiceMeshControlPlane détermine la version de Red Hat OpenShift Service Mesh que vous utilisez. La valeur du champ spec.version dans la ressource ServiceMeshControlPlane contrôle l'architecture et les paramètres de configuration utilisés pour installer et déployer Red Hat OpenShift Service Mesh. Lorsque vous créez le plan de contrôle Service Mesh, vous pouvez définir la version de deux manières :

    • Pour configurer la vue formulaire, sélectionnez la version dans le menu Control Plane Version.
    • Pour configurer la vue YAML, définissez la valeur de spec.version dans le fichier YAML.

Operator Lifecycle Manager (OLM) ne gère pas les mises à niveau du plan de contrôle de Service Mesh, de sorte que le numéro de version de votre opérateur et de ServiceMeshControlPlane (SMCP) peut ne pas correspondre, à moins que vous n'ayez mis à niveau manuellement votre SMCP.

1.11.2. Considérations relatives à la mise à niveau

L'étiquette ou l'annotation maistra.io/ ne doit pas être utilisée sur une ressource personnalisée créée par l'utilisateur, car elle indique que la ressource a été générée et doit être gérée par le Red Hat OpenShift Service Mesh Operator.

Avertissement

Pendant la mise à niveau, l'opérateur apporte des modifications, y compris la suppression ou le remplacement de fichiers, aux ressources qui comprennent les étiquettes ou annotations suivantes indiquant que la ressource est gérée par l'opérateur.

Avant de procéder à la mise à niveau, vérifiez si des ressources personnalisées créées par l'utilisateur comportent les étiquettes ou les annotations suivantes :

  • maistra.io/ ET l'étiquette app.kubernetes.io/managed-by définie sur maistra-istio-operator (Red Hat OpenShift Service Mesh)
  • kiali.io/ (Kiali)
  • jaegertracing.io/ (Plate-forme de traçage distribuée Red Hat OpenShift)
  • logging.openshift.io/ (Red Hat Elasticsearch)

Avant la mise à niveau, vérifiez que les ressources personnalisées créées par l'utilisateur ne comportent pas d'étiquettes ou d'annotations indiquant qu'elles sont gérées par l'opérateur. Supprimez l'étiquette ou l'annotation des ressources personnalisées que vous ne souhaitez pas voir gérées par l'opérateur.

Lors du passage à la version 2.0, l'opérateur ne supprime que les ressources portant ces étiquettes dans le même espace de noms que le SMCP.

Lors du passage à la version 2.1, l'opérateur supprime les ressources portant ces étiquettes dans tous les espaces de noms.

1.11.2.1. Problèmes connus pouvant affecter la mise à jour

Les problèmes connus qui peuvent affecter votre mise à niveau sont les suivants :

  • Red Hat OpenShift Service Mesh ne prend pas en charge l'utilisation de la configuration EnvoyFilter, sauf lorsqu'elle est explicitement documentée. Ceci est dû à un couplage étroit avec les API Envoy sous-jacentes, ce qui signifie que la compatibilité ascendante ne peut pas être maintenue. Si vous utilisez des filtres Envoy et que la configuration générée par Istio a changé en raison de la dernière version d'Envoy introduite par la mise à niveau de votre ServiceMeshControlPlane, cela peut potentiellement casser tout EnvoyFilter que vous avez mis en œuvre.
  • OSSM-1505 ServiceMeshExtension ne fonctionne pas avec OpenShift Container Platform version 4.11. Parce que ServiceMeshExtension a été déprécié dans Red Hat OpenShift Service Mesh 2.2, ce problème connu ne sera pas corrigé et vous devez migrer vos extensions vers WasmPluging
  • OSSM-1396 Si une ressource passerelle contient le paramètre spec.externalIPs, au lieu d'être recréée lors de la mise à jour de ServiceMeshControlPlane, la passerelle est supprimée et n'est jamais recréée.
  • OSSM-1052 Lors de la configuration d'un service ExternalIP pour l'ingressgateway dans le plan de contrôle Service Mesh, le service n'est pas créé. Le schéma du SMCP ne contient pas le paramètre du service.

    Solution : Désactiver la création de la passerelle dans la spécification SMCP et gérer le déploiement de la passerelle entièrement manuellement (y compris le service, le rôle et le RoleBinding).

1.11.3. Mise à niveau des opérateurs

Pour que votre Service Mesh bénéficie des derniers correctifs de sécurité, des corrections de bogues et des mises à jour logicielles, vous devez mettre à jour vos opérateurs. Vous lancez les mises à jour des correctifs en mettant à niveau vos opérateurs.

Important

La version de l'opérateur ne not détermine pas la version de votre Service Mesh. La version de votre plan de contrôle Service Mesh déployé détermine votre version de Service Mesh.

not Étant donné que Red Hat OpenShift Service Mesh Operator prend en charge plusieurs versions du plan de contrôle Service Mesh, la mise à jour de Red Hat OpenShift Service Mesh Operator ne met pas à jour la valeur spec.version de votre ServiceMeshControlPlane déployé. Notez également que la valeur spec.version est un nombre à deux chiffres, par exemple 2.2, et que les mises à jour de correctifs, par exemple 2.2.1, ne sont pas reflétées dans la valeur de la version SMCP.

Operator Lifecycle Manager (OLM) contrôle l'installation, la mise à niveau et le contrôle d'accès basé sur les rôles (RBAC) des opérateurs dans un cluster. L'OLM s'exécute par défaut dans OpenShift Container Platform. OLM recherche les opérateurs disponibles ainsi que les mises à niveau des opérateurs installés.

Le fait que vous deviez ou non prendre des mesures pour mettre à jour vos opérateurs dépend des paramètres que vous avez sélectionnés lors de leur installation. Lorsque vous avez installé chacun de vos opérateurs, vous avez sélectionné un Update Channel et un Approval Strategy. La combinaison de ces deux paramètres détermine quand et comment vos opérateurs sont mis à jour.

Tableau 1.4. Interaction entre le canal de mise à jour et la stratégie d'approbation
 Canal versionné\Stabilité ou prévisibilité Chaîne

Automatic

L'opérateur est automatiquement mis à jour pour les versions mineures et les correctifs de cette version uniquement. Ne met pas automatiquement à jour la version majeure suivante (c'est-à-dire de la version 2.0 à la version 3.0). Une modification manuelle de l'abonnement à l'opérateur est nécessaire pour passer à la version majeure suivante.

Mise à jour automatique d'Operator pour toutes les versions majeures, mineures et correctives.

Manual

Mises à jour manuelles requises pour les versions mineures et les correctifs de la version spécifiée. Une modification manuelle de l'abonnement de l'opérateur est nécessaire pour passer à la version majeure suivante.

Mises à jour manuelles requises pour toutes les versions majeures, mineures et correctives.

Lorsque vous mettez à jour votre opérateur Red Hat OpenShift Service Mesh, le gestionnaire du cycle de vie de l'opérateur (OLM) supprime l'ancien pod de l'opérateur et démarre un nouveau pod. Une fois que le nouveau pod Operator démarre, le processus de réconciliation vérifie le site ServiceMeshControlPlane (SMCP), et s'il y a des images de conteneurs mises à jour disponibles pour l'un des composants du plan de contrôle Service Mesh, il remplace ces pods du plan de contrôle Service Mesh par ceux qui utilisent les nouvelles images de conteneurs.

Lorsque vous mettez à niveau les opérateurs de plateforme de traçage distribuée Kiali et Red Hat OpenShift, le processus de réconciliation OLM analyse le cluster et met à niveau les instances gérées vers la version du nouvel opérateur. Par exemple, si vous mettez à jour l'opérateur de plateforme de traçage distribuée Red Hat OpenShift de la version 1.30.2 à la version 1.34.1, l'opérateur recherche les instances en cours d'exécution de la plateforme de traçage distribuée et les met également à niveau vers la version 1.34.1.

Pour rester sur une version de correctif particulière de Red Hat OpenShift Service Mesh, vous devez désactiver les mises à jour automatiques et rester sur cette version spécifique de l'opérateur.

Pour plus d'informations sur la mise à niveau des opérateurs, reportez-vous à la documentation du gestionnaire du cycle de vie des opérateurs.

1.11.4. Mise à niveau du plan de contrôle

Vous devez mettre à jour manuellement le plan de contrôle pour les versions mineures et majeures. Le projet communautaire Istio recommande des mises à niveau canary, Red Hat OpenShift Service Mesh ne prend en charge que les mises à niveau in-place. Red Hat OpenShift Service Mesh exige que vous mettiez à niveau chaque version mineure vers la version mineure suivante dans l'ordre. Par exemple, vous devez mettre à niveau la version 2.0 vers la version 2.1, puis vers la version 2.2. Vous ne pouvez pas mettre à jour Red Hat OpenShift Service Mesh 2.0 vers 2.2 directement.

Lorsque vous mettez à niveau le plan de contrôle du service mesh, toutes les ressources gérées par l'opérateur, par exemple les passerelles, sont également mises à niveau.

Bien que vous puissiez déployer plusieurs versions du plan de contrôle dans le même cluster, Red Hat OpenShift Service Mesh ne prend pas en charge les mises à niveau canari du maillage de services. En d'autres termes, vous pouvez avoir différentes ressources SCMP avec différentes valeurs pour spec.version, mais elles ne peuvent pas gérer le même maillage.

Pour plus d'informations sur la migration de vos extensions, reportez-vous à la section Migration des ressources ServiceMeshExtension vers WasmPlugin.

1.11.4.1. Changements dans la mise à jour de la version 2.2 à la version 2.3

La mise à niveau du plan de contrôle Service Mesh de la version 2.2 à la version 2.3 introduit les changements de comportement suivants :

  • Cette version nécessite l'utilisation de l'API WasmPlugin. La prise en charge de l'API ServiceMeshExtension, qui était obsolète dans la version 2.2, a été supprimée. Si vous tentez d'effectuer une mise à niveau alors que vous utilisez l'API ServiceMeshExtension, la mise à niveau échoue.

1.11.4.2. Changements dans la mise à jour de la version 2.1 à la version 2.2

La mise à niveau du plan de contrôle Service Mesh de la version 2.1 à la version 2.2 introduit les changements de comportement suivants :

  • Le DaemonSet istio-node est renommé en istio-cni-node pour correspondre au nom dans Istio en amont.
  • Istio 1.10 a mis à jour Envoy pour envoyer le trafic au conteneur d'application en utilisant eth0 au lieu de lo par défaut.
  • Cette version ajoute la prise en charge de l'API WasmPlugin et supprime l'API ServiceMeshExtension.

1.11.4.3. Changements dans la mise à jour de la version 2.0 à la version 2.1

La mise à niveau du plan de contrôle du Service Mesh de la version 2.0 à la version 2.1 introduit les changements architecturaux et comportementaux suivants.

Modifications de l'architecture

Mixer a été complètement supprimé dans Red Hat OpenShift Service Mesh 2.1. La mise à niveau d'une version Red Hat OpenShift Service Mesh 2.0.x vers 2.1 sera bloquée si Mixer est activé.

Si le message suivant apparaît lors de la mise à niveau de la version 2.0 à la version 2.1, mettez à jour le type Mixer existant en type Istiod dans la spécification du plan de contrôle existant avant de mettre à jour le champ .spec.version:

An error occurred
admission webhook smcp.validation.maistra.io denied the request: [support for policy.type "Mixer" and policy.Mixer options have been removed in v2.1, please use another alternative, support for telemetry.type "Mixer" and telemetry.Mixer options have been removed in v2.1, please use another alternative]”

Par exemple :

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
spec:
  policy:
    type: Istiod
  telemetry:
    type: Istiod
  version: v2.3

Changements de comportement

  • AuthorizationPolicy des mises à jour :

    • Avec le protocole PROXY, si vous utilisez ipBlocks et notIpBlocks pour spécifier des adresses IP distantes, mettez à jour la configuration pour utiliser remoteIpBlocks et notRemoteIpBlocks à la place.
    • Ajout de la prise en charge des réclamations JSON Web Token (JWT) imbriquées.
  • EnvoyFilter changements en cours>

    • Doit être utilisé typed_config
    • xDS v2 n'est plus supporté
    • Noms de filtres obsolètes
  • Les anciennes versions des serveurs mandataires peuvent signaler des codes d'état 503 lorsqu'ils reçoivent des codes d'état 1xx ou 204 de la part de serveurs mandataires plus récents.

1.11.4.4. Mise à jour du plan de contrôle du Service Mesh

Pour mettre à niveau Red Hat OpenShift Service Mesh, vous devez mettre à jour le champ de version de la ressource Red Hat OpenShift Service Mesh ServiceMeshControlPlane v2. Ensuite, une fois qu'elle est configurée et appliquée, redémarrez les pods d'application pour mettre à jour chaque proxy sidecar et sa configuration.

Conditions préalables

  • Vous utilisez OpenShift Container Platform 4.9 ou une version ultérieure.
  • Vous avez la dernière version de Red Hat OpenShift Service Mesh Operator.

Procédure

  1. Passez au projet qui contient votre ressource ServiceMeshControlPlane. Dans cet exemple, istio-system est le nom du projet de plan de contrôle Service Mesh.

    $ oc project istio-system
  2. Vérifiez la validité de la configuration de votre ressource v2 ServiceMeshControlPlane.

    1. Exécutez la commande suivante pour afficher votre ressource ServiceMeshControlPlane en tant que ressource v2.

      $ oc get smcp -o yaml
      Astuce

      Sauvegardez la configuration du plan de contrôle de Service Mesh.

  3. Mettez à jour le champ .spec.version et appliquez la configuration.

    Par exemple :

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
    spec:
      version: v2.3

    Au lieu d'utiliser la ligne de commande, vous pouvez également utiliser la console web pour modifier le plan de contrôle Service Mesh. Dans la console web d'OpenShift Container Platform, cliquez sur Project et sélectionnez le nom du projet que vous venez de saisir.

    1. Cliquez sur Operators Installed Operators.
    2. Trouvez votre instance ServiceMeshControlPlane.
    3. Sélectionnez YAML view et mettez à jour le texte du fichier YAML, comme indiqué dans l'exemple précédent.
    4. Cliquez sur Save.

1.11.4.5. Migration de Red Hat OpenShift Service Mesh de la version 1.1 à la version 2.0

La mise à niveau de la version 1.1 à 2.0 nécessite des étapes manuelles qui migrent vos charges de travail et votre application vers une nouvelle instance de Red Hat OpenShift Service Mesh exécutant la nouvelle version.

Conditions préalables

  • Vous devez mettre à niveau vers OpenShift Container Platform 4.7. avant de mettre à niveau vers Red Hat OpenShift Service Mesh 2.0.
  • Vous devez avoir l'opérateur Red Hat OpenShift Service Mesh version 2.0. Si vous avez sélectionné le chemin de mise à niveau automatic, l'opérateur télécharge automatiquement les dernières informations. Cependant, vous devez suivre certaines étapes pour utiliser les fonctionnalités de Red Hat OpenShift Service Mesh version 2.0.
1.11.4.5.1. Mise à jour de Red Hat OpenShift Service Mesh

Pour mettre à niveau Red Hat OpenShift Service Mesh, vous devez créer une instance de la ressource Red Hat OpenShift Service Mesh ServiceMeshControlPlane v2 dans un nouvel espace de noms. Ensuite, une fois qu'elle est configurée, déplacez vos applications de microservices et vos charges de travail de votre ancien maillage vers le nouveau maillage de services.

Procédure

  1. Vérifiez que la configuration de votre ressource v1 ServiceMeshControlPlane est valide.

    1. Exécutez la commande suivante pour afficher votre ressource ServiceMeshControlPlane en tant que ressource v2.

      $ oc get smcp -o yaml
    2. Consultez le champ spec.techPreview.errored.message dans la sortie pour obtenir des informations sur les champs non valides.
    3. Si votre ressource v1 contient des champs non valides, la ressource n'est pas réconciliée et ne peut pas être éditée en tant que ressource v2. Toutes les mises à jour des champs de la v2 seront remplacées par les paramètres originaux de la v1. Pour corriger les champs non valides, vous pouvez remplacer, corriger ou éditer la version v1 de la ressource. Vous pouvez également supprimer la ressource sans la corriger. Une fois la ressource corrigée, elle peut être réconciliée et vous pouvez modifier ou consulter la version v2 de la ressource.
    4. Pour corriger la ressource en modifiant un fichier, utilisez oc get pour récupérer la ressource, modifiez le fichier texte localement et remplacez la ressource par le fichier que vous avez modifié.

      $ oc get smcp.v1.maistra.io <smcp_name> > smcp-resource.yaml
      #Edit the smcp-resource.yaml file.
      $ oc replace -f smcp-resource.yaml
    5. Pour corriger la ressource à l'aide d'un correctif, utilisez oc patch.

      $ oc patch smcp.v1.maistra.io <smcp_name> --type json --patch '[{"op" : \N "replace\N", \N "path\N":\N"/spec/path/to/bad/setting\N", \N "value\N":\N "corrected-value\N"]''
    6. Pour corriger la ressource en l'éditant à l'aide d'outils de ligne de commande, utilisez oc edit.

      oc edit smcp.v1.maistra.io <smcp_name>
  2. Sauvegardez votre configuration du plan de contrôle Service Mesh. Passez au projet qui contient votre ressource ServiceMeshControlPlane. Dans cet exemple, istio-system est le nom du projet de plan de contrôle Service Mesh.

    $ oc project istio-system
  3. Entrez la commande suivante pour récupérer la configuration actuelle. Votre <smcp_name> est spécifié dans les métadonnées de votre ressource ServiceMeshControlPlane, par exemple basic-install ou full-install.

    oc get servicemeshcontrolplanes.v1.maistra.io <smcp_name> -o yaml > <smcp_name>.v1.yaml
  4. Convertissez votre site ServiceMeshControlPlane en une version v2 du plan de contrôle qui contient des informations sur votre configuration comme point de départ.

    $ oc get smcp <smcp_name> -o yaml > <smcp_name>.v2.yaml
  5. Créez un projet. Dans le menu Projet de la console OpenShift Container Platform, cliquez sur New Project et entrez un nom pour votre projet, istio-system-upgrade, par exemple. Vous pouvez également exécuter cette commande à partir de la CLI.

    $ oc new-project istio-system-upgrade
  6. Mettez à jour le champ metadata.namespace de votre v2 ServiceMeshControlPlane avec le nouveau nom de votre projet. Dans cet exemple, utilisez istio-system-upgrade.
  7. Mettez à jour le champ version de 1.1 à 2.0 ou supprimez-le dans votre v2 ServiceMeshControlPlane.
  8. Créez un ServiceMeshControlPlane dans le nouvel espace de noms. Sur la ligne de commande, exécutez la commande suivante pour déployer le plan de contrôle avec la version v2 du ServiceMeshControlPlane que vous avez récupéré. Dans cet exemple, remplacez `<smcp_name.v2> `par le chemin d'accès à votre fichier.

    oc create -n istio-system-upgrade -f <smcp_name>.v2.yaml

    Vous pouvez également utiliser la console pour créer le plan de contrôle Service Mesh. Dans la console web d'OpenShift Container Platform, cliquez sur Project. Sélectionnez ensuite le nom du projet que vous venez de saisir.

    1. Cliquez sur Operators Installed Operators.
    2. Cliquez sur Create ServiceMeshControlPlane.
    3. Sélectionnez YAML view et collez le texte du fichier YAML que vous avez récupéré dans le champ. Vérifiez que le champ apiVersion est défini sur maistra.io/v2 et modifiez le champ metadata.namespace pour utiliser le nouvel espace de noms, par exemple istio-system-upgrade.
    4. Cliquez sur Create.
1.11.4.5.2. Configuration du ServiceMeshControlPlane 2.0

La ressource ServiceMeshControlPlane a été modifiée pour Red Hat OpenShift Service Mesh version 2.0. Après avoir créé une version v2 de la ressource ServiceMeshControlPlane, modifiez-la pour profiter des nouvelles fonctionnalités et pour l'adapter à votre déploiement. Tenez compte des changements suivants dans la spécification et le comportement de Red Hat OpenShift Service Mesh 2.0 lorsque vous modifiez votre ressource ServiceMeshControlPlane. Vous pouvez également vous référer à la documentation du produit Red Hat OpenShift Service Mesh 2.0 pour obtenir de nouvelles informations sur les fonctionnalités que vous utilisez. La ressource v2 doit être utilisée pour les installations Red Hat OpenShift Service Mesh 2.0.

1.11.4.5.2.1. Modifications de l'architecture

Les unités architecturales utilisées par les versions précédentes ont été remplacées par Istiod. Dans la version 2.0, les composants du plan de contrôle Service Mesh - Mixer, Pilot, Citadel, Galley - et la fonctionnalité de l'injecteur sidecar ont été combinés en un seul composant, Istiod.

Bien que Mixer ne soit plus supporté en tant que composant du plan de contrôle, les plugins de politique et de télémétrie Mixer sont maintenant supportés par des extensions WASM dans Istiod. Mixer peut être activé pour la politique et la télémétrie si vous avez besoin d'intégrer des plugins Mixer hérités.

Secret Discovery Service (SDS) est utilisé pour distribuer des certificats et des clés aux sidecars directement depuis Istiod. Dans Red Hat OpenShift Service Mesh version 1.1, des secrets ont été générés par Citadel, qui ont été utilisés par les proxys pour récupérer les certificats et les clés de leurs clients.

1.11.4.5.2.2. Modifications des annotations

Les annotations suivantes ne sont plus prises en charge dans la version 2.0. Si vous utilisez l'une de ces annotations, vous devez mettre à jour votre charge de travail avant de la transférer vers un plan de contrôle Service Mesh v2.0.

  • sidecar.maistra.io/proxyCPULimit a été remplacé par sidecar.istio.io/proxyCPULimit. Si vous utilisiez les annotations sidecar.maistra.io dans vos charges de travail, vous devez modifier ces charges de travail pour utiliser les équivalents sidecar.istio.io à la place.
  • sidecar.maistra.io/proxyMemoryLimit a été remplacé par sidecar.istio.io/proxyMemoryLimit
  • sidecar.istio.io/discoveryAddress n'est plus pris en charge. En outre, l'adresse de découverte par défaut est passée de pilot.<control_plane_namespace>.svc:15010 (ou du port 15011, si mtls est activé) à istiod-<smcp_name>.<control_plane_namespace>.svc:15012.
  • The health status port is no longer configurable and is hard-coded to 15021. * If you were defining a custom status port, for example, status.sidecar.istio.io/port, you must remove the override before moving the workload to a v2.0 Service Mesh control plane. Readiness checks can still be disabled by setting the status port to 0.
  • Les ressources Kubernetes Secret ne sont plus utilisées pour distribuer les certificats clients pour les sidecars. Les certificats sont désormais distribués par le service SDS d'Istiod. Si vous vous appuyiez sur des secrets montés, ils ne sont plus disponibles pour les charges de travail dans les plans de contrôle Service Mesh v2.0.
1.11.4.5.2.3. Changements de comportement

Certaines fonctionnalités de Red Hat OpenShift Service Mesh 2.0 fonctionnent différemment de celles des versions précédentes.

  • Le port de préparation des passerelles est passé de 15020 à 15021.
  • La visibilité de l'hôte cible inclut les ressources VirtualService et ServiceEntry. Elle inclut toutes les restrictions appliquées par le biais des ressources Sidecar.
  • La fonction TLS mutuelle automatique est activée par défaut. La communication de proxy à proxy est automatiquement configurée pour utiliser mTLS, indépendamment des politiques globales de PeerAuthentication en place.
  • Les connexions sécurisées sont toujours utilisées lorsque les proxies communiquent avec le plan de contrôle du Service Mesh, quel que soit le paramètre spec.security.controlPlane.mtls. Le paramètre spec.security.controlPlane.mtls n'est utilisé que lors de la configuration des connexions pour la télémétrie ou la politique de Mixer.
1.11.4.5.2.4. Détails de la migration pour les ressources non prises en charge

Politique (authentication.istio.io/v1alpha1)

Les ressources de politique doivent être migrées vers de nouveaux types de ressources à utiliser avec les plans de contrôle Service Mesh v2.0, PeerAuthentication et RequestAuthentication. En fonction de la configuration spécifique de votre ressource de stratégie, il se peut que vous deviez configurer plusieurs ressources pour obtenir le même effet.

TLS mutuel

L'application mutuelle de TLS est réalisée à l'aide de la ressource security.istio.io/v1beta1 PeerAuthentication. L'ancien champ spec.peers.mtls.mode correspond directement au champ spec.mtls.mode de la nouvelle ressource. Les critères de sélection sont passés de la spécification d'un nom de service dans spec.targets[x].name à un sélecteur d'étiquettes dans spec.selector.matchLabels. Dans PeerAuthentication, les étiquettes doivent correspondre au sélecteur sur les services nommés dans la liste des cibles. Tout paramètre spécifique à un port devra être mappé dans spec.portLevelMtls.

Authentification

Les méthodes d'authentification supplémentaires spécifiées dans spec.origins doivent être mappées dans une ressource security.istio.io/v1beta1 RequestAuthentication. spec.selector.matchLabels doit être configuré de la même manière que le champ PeerAuthentication. La configuration spécifique aux mandants JWT des éléments spec.origins.jwt correspond à des champs similaires dans les éléments spec.rules.

  • spec.origins[x].jwt.triggerRules spécifié dans la politique doit être mappé dans une ou plusieurs ressources security.istio.io/v1beta1 AuthorizationPolicy. Tout spec.selector.labels doit être configuré de manière similaire au même champ sur RequestAuthentication.
  • spec.origins[x].jwt.triggerRules.excludedPaths doit être mappée dans une AuthorizationPolicy dont le spec.action est défini sur ALLOW, avec spec.rules[x].to.operation.path entrées correspondant aux chemins exclus.
  • spec.origins[x].jwt.triggerRules.includedPaths doit être mappée dans une AuthorizationPolicy distincte dont spec.action est défini sur ALLOW, avec des entrées spec.rules[x].to.operation.path correspondant aux chemins inclus, et des entrées spec.rules.[x].from.source.requestPrincipals qui s'alignent sur specified spec.origins[x].jwt.issuer dans la ressource Policy.

ServiceMeshPolicy (maistra.io/v1)

ServiceMeshPolicy a été configuré automatiquement pour le plan de contrôle Service Mesh via le paramètre spec.istio.global.mtls.enabled dans la ressource v1 ou spec.security.dataPlane.mtls dans la ressource v2. Pour les plans de contrôle v2, une ressource PeerAuthentication fonctionnellement équivalente est créée lors de l'installation. Cette fonctionnalité est obsolète dans Red Hat OpenShift Service Mesh version 2.0

RbacConfig, ServiceRole, ServiceRoleBinding (rbac.istio.io/v1alpha1)

Ces ressources ont été remplacées par la ressource security.istio.io/v1beta1 AuthorizationPolicy.

Pour imiter le comportement de RbacConfig, il faut écrire une AuthorizationPolicy par défaut dont les paramètres dépendent du spec.mode spécifié dans RbacConfig.

  • Lorsque spec.mode est défini sur OFF, aucune ressource n'est requise car la politique par défaut est ALLOW, à moins qu'une AuthorizationPolicy ne s'applique à la demande.
  • Lorsque spec.mode est réglé sur ON, réglez spec: {}. Vous devez créer des politiques AuthorizationPolicy pour tous les services du maillage.
  • spec.mode est défini sur ON_WITH_INCLUSION, doit créer une AuthorizationPolicy avec spec: {} dans chaque espace de noms inclus. L'inclusion de services individuels n'est pas prise en charge par AuthorizationPolicy. Toutefois, dès qu'une AuthorizationPolicy s'appliquant aux charges de travail du service est créée, toutes les autres demandes qui ne sont pas explicitement autorisées sont rejetées.
  • Lorsque spec.mode est défini sur ON_WITH_EXCLUSION, il n'est pas pris en charge par AuthorizationPolicy. Une politique DENY globale peut être créée, mais une AuthorizationPolicy doit être créée pour chaque charge de travail dans le maillage car il n'existe pas de politique allow-all pouvant être appliquée à un espace de noms ou à une charge de travail.

AuthorizationPolicy comprend la configuration à la fois du sélecteur auquel la configuration s'applique, qui est similaire à la fonction ServiceRoleBinding, et des règles qui doivent être appliquées, qui sont similaires à la fonction ServiceRole.

ServiceMeshRbacConfig (maistra.io/v1)

Cette ressource est remplacée par une ressource security.istio.io/v1beta1 AuthorizationPolicy avec un spec.selector vide dans l'espace de noms du plan de contrôle du Service Mesh. Cette politique sera la politique d'autorisation par défaut appliquée à toutes les charges de travail dans le maillage. Pour plus de détails sur la migration, voir RbacConfig ci-dessus.

1.11.4.5.2.5. Plugins de mixage

Les composants Mixer sont désactivés par défaut dans la version 2.0. Si votre charge de travail repose sur des plugins Mixer, vous devez configurer votre version 2.0 ServiceMeshControlPlane pour inclure les composants Mixer.

Pour activer les composants de la politique Mixer, ajoutez l'extrait suivant à votre site ServiceMeshControlPlane.

spec:
  policy:
    type: Mixer

Pour activer les composants de télémétrie de Mixer, ajoutez l'extrait suivant à votre site ServiceMeshControlPlane.

spec:
  telemetry:
    type: Mixer

Les anciens plugins de mélangeur peuvent également être migrés vers WASM et intégrés à l'aide de la nouvelle ressource personnalisée ServiceMeshExtension (maistra.io/v1alpha1).

Les filtres WASM intégrés inclus dans la distribution Istio en amont ne sont pas disponibles dans Red Hat OpenShift Service Mesh 2.0.

1.11.4.5.2.6. Changements mutuels TLS

Lors de l'utilisation de mTLS avec des stratégies PeerAuthentication spécifiques à la charge de travail, une DestinationRule correspondante est nécessaire pour autoriser le trafic si la stratégie de la charge de travail diffère de la stratégie globale/de l'espace de noms.

La fonction Auto mTLS est activée par défaut, mais peut être désactivée en attribuant la valeur false à spec.security.dataPlane.automtls dans la ressource ServiceMeshControlPlane. Lors de la désactivation de mTLS auto, les règles de destination peuvent être nécessaires pour assurer une communication correcte entre les services. Par exemple, le fait de définir PeerAuthentication sur STRICT pour un espace de noms peut empêcher les services d'autres espaces de noms d'y accéder, à moins qu'une règle de destination ne configure le mode TLS pour les services de l'espace de noms.

Pour plus d'informations sur mTLS, voir Activation de la sécurité mutuelle de la couche transport (mTLS)

1.11.4.5.2.6.1. Autres exemples de mTLS

Pour désactiver le service mTLS For productpage dans l'exemple d'application info, votre ressource Policy a été configurée de la manière suivante pour Red Hat OpenShift Service Mesh v1.1.

Exemple de ressource politique

apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: productpage-mTLS-disable
  namespace: <namespace>
spec:
  targets:
  - name: productpage

Pour désactiver le service mTLS For productpage dans l'application d'exemple info, utilisez l'exemple suivant pour configurer votre ressource PeerAuthentication pour Red Hat OpenShift Service Mesh v2.0.

Exemple de ressource PeerAuthentication

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: productpage-mTLS-disable
  namespace: <namespace>
spec:
  mtls:
    mode: DISABLE
  selector:
    matchLabels:
      # this should match the selector for the "productpage" service
      app: productpage

Pour activer mTLS avec authentification JWT pour le service productpage dans l'exemple d'application info, votre ressource Policy a été configurée de la manière suivante pour Red Hat OpenShift Service Mesh v1.1.

Exemple de ressource politique

apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: productpage-mTLS-with-JWT
  namespace: <namespace>
spec:
  targets:
  - name: productpage
    ports:
    - number: 9000
  peers:
  - mtls:
  origins:
  - jwt:
      issuer: "https://securetoken.google.com"
      audiences:
      - "productpage"
      jwksUri: "https://www.googleapis.com/oauth2/v1/certs"
      jwtHeaders:
      - "x-goog-iap-jwt-assertion"
      triggerRules:
      - excludedPaths:
        - exact: /health_check
  principalBinding: USE_ORIGIN

Pour activer l'authentification mTLS With JWT pour le service productpage dans l'application d'exemple info, utilisez l'exemple suivant pour configurer votre ressource PeerAuthentication pour Red Hat OpenShift Service Mesh v2.0.

Exemple de ressource PeerAuthentication

#require mtls for productpage:9000
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: productpage-mTLS-with-JWT
  namespace: <namespace>
spec:
  selector:
    matchLabels:
      # this should match the selector for the "productpage" service
      app: productpage
  portLevelMtls:
    9000:
      mode: STRICT
---
#JWT authentication for productpage
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: productpage-mTLS-with-JWT
  namespace: <namespace>
spec:
  selector:
    matchLabels:
      # this should match the selector for the "productpage" service
      app: productpage
  jwtRules:
  - issuer: "https://securetoken.google.com"
    audiences:
    - "productpage"
    jwksUri: "https://www.googleapis.com/oauth2/v1/certs"
    fromHeaders:
    - name: "x-goog-iap-jwt-assertion"
---
#Require JWT token to access product page service from
#any client to all paths except /health_check
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: productpage-mTLS-with-JWT
  namespace: <namespace>
spec:
  action: ALLOW
  selector:
    matchLabels:
      # this should match the selector for the "productpage" service
      app: productpage
  rules:
  - to: # require JWT token to access all other paths
      - operation:
          notPaths:
          - /health_check
    from:
      - source:
          # if using principalBinding: USE_PEER in the Policy,
          # then use principals, e.g.
          # principals:
          # - “*”
          requestPrincipals:
          - “*”
  - to: # no JWT token required to access health_check
      - operation:
          paths:
          - /health_check

1.11.4.5.3. Recettes de configuration

Ces recettes de configuration permettent de configurer les éléments suivants.

1.11.4.5.3.1. TLS mutuel dans un plan de données

TLS mutuel pour la communication du plan de données est configuré via spec.security.dataPlane.mtls dans la ressource ServiceMeshControlPlane, qui est false par défaut.

1.11.4.5.3.2. Clé de signature personnalisée

Istiod gère les certificats clients et les clés privées utilisés par les proxys de services. Par défaut, Istiod utilise un certificat auto-signé pour la signature, mais vous pouvez configurer un certificat et une clé privée personnalisés. Pour plus d'informations sur la configuration des clés de signature, voir Ajout d'une clé et d'un certificat d'autorité de certification externe

1.11.4.5.3.3. Traçage

Le traçage est configuré à l'adresse spec.tracing. Actuellement, le seul type de traceur pris en charge est Jaeger. L'échantillonnage est un nombre entier échelonné représentant des incréments de 0,01 %, par exemple, 1 est 0,01 et 10000 est 100 %. La mise en œuvre du traçage et le taux d'échantillonnage peuvent être spécifiés :

spec:
  tracing:
    sampling: 100 # 1%
    type: Jaeger

Jaeger est configuré dans la section addons de la ressource ServiceMeshControlPlane.

spec:
  addons:
    jaeger:
      name: jaeger
      install:
        storage:
          type: Memory # or Elasticsearch for production mode
          memory:
            maxTraces: 100000
          elasticsearch: # the following values only apply if storage:type:=Elasticsearch
            storage: # specific storageclass configuration for the Jaeger Elasticsearch (optional)
              size: "100G"
              storageClassName: "storageclass"
            nodeCount: 3
            redundancyPolicy: SingleRedundancy
  runtime:
    components:
      tracing.jaeger: {} # general Jaeger specific runtime configuration (optional)
      tracing.jaeger.elasticsearch: #runtime configuration for Jaeger Elasticsearch deployment (optional)
        container:
          resources:
            requests:
              memory: "1Gi"
              cpu: "500m"
            limits:
              memory: "1Gi"

L'installation de Jaeger peut être personnalisée à l'aide du champ install. La configuration des conteneurs, comme les limites des ressources, est configurée dans les champs liés à spec.runtime.components.jaeger. Si une ressource Jaeger correspondant à la valeur de spec.addons.jaeger.name existe, le plan de contrôle Service Mesh sera configuré pour utiliser l'installation existante. Utilisez une ressource Jaeger existante pour personnaliser entièrement votre installation Jaeger.

1.11.4.5.3.4. Visualisation

Kiali et Grafana sont configurés dans la section addons de la ressource ServiceMeshControlPlane.

spec:
  addons:
    grafana:
      enabled: true
      install: {} # customize install
    kiali:
      enabled: true
      name: kiali
      install: {} # customize install

Les installations Grafana et Kiali peuvent être personnalisées via leurs champs install respectifs. La personnalisation des conteneurs, comme les limites de ressources, est configurée dans spec.runtime.components.kiali et spec.runtime.components.grafana. Si une ressource Kiali existante correspondant à la valeur du nom existe, le plan de contrôle Service Mesh configure la ressource Kiali pour l'utiliser avec le plan de contrôle. Certains champs de la ressource Kiali sont remplacés, comme la liste accessible_namespaces, ainsi que les points de terminaison pour Grafana, Prometheus et le traçage. Utilisez une ressource existante pour personnaliser entièrement votre installation Kiali.

1.11.4.5.3.5. Utilisation des ressources et programmation

Les ressources sont configurées sous spec.runtime.<component>. Les noms de composants suivants sont pris en charge.

ComposantDescriptionVersions prises en charge

sécurité

Conteneur Citadel

v1.0/1.1

cuisine

Conteneur de cuisine

v1.0/1.1

pilote

Conteneur pilote/instiod

v1.0/1.1/2.0

mélangeur

conteneurs istio-télémétrie et istio-politique

v1.0/1.1

mixer.policy

conteneur de la politique de l'istio

v2.0

mixer.telemetry

conteneur istio-télémétrique

v2.0

global.ouathproxy

conteneur oauth-proxy utilisé avec divers addons

v1.0/1.1/2.0

sidecarInjectorWebhook

sidecar injector webhook container

v1.0/1.1

tracing.jaeger

le conteneur général de Jaeger - tous les paramètres peuvent ne pas être appliqués. La personnalisation complète de l'installation de Jaeger est possible en spécifiant une ressource Jaeger existante dans la configuration du plan de contrôle de Service Mesh.

v1.0/1.1/2.0

tracing.jaeger.agent

paramètres spécifiques à l'agent Jaeger

v1.0/1.1/2.0

tracing.jaeger.allInOne

paramètres spécifiques à Jaeger allInOne

v1.0/1.1/2.0

tracing.jaeger.collector

paramètres spécifiques au collecteur Jaeger

v1.0/1.1/2.0

tracing.jaeger.elasticsearch

paramètres spécifiques au déploiement de Jaeger elasticsearch

v1.0/1.1/2.0

tracing.jaeger.query

paramètres spécifiques à la requête Jaeger

v1.0/1.1/2.0

prometheus

conteneur prométhée

v1.0/1.1/2.0

kiali

Conteneur Kiali - la personnalisation complète de l'installation Kiali est possible en spécifiant une ressource Kiali existante dans la configuration du plan de contrôle Service Mesh.

v1.0/1.1/2.0

grafana

Conteneur Grafana

v1.0/1.1/2.0

3scale

conteneur 3scale

v1.0/1.1/2.0

wasmExtensions.cacher

Conteneur cacheur d'extensions WASM

v2.0 - aperçu technique

Certains composants prennent en charge la limitation des ressources et la planification. Pour plus d'informations, voir Performances et évolutivité.

1.11.4.5.4. Prochaines étapes de la migration de vos applications et charges de travail

Déplacez la charge de travail de l'application vers le nouveau maillage et supprimez les anciennes instances pour terminer la mise à niveau.

1.11.5. Mise à niveau du plan de données

Votre plan de données fonctionnera toujours après la mise à niveau du plan de contrôle. Mais pour appliquer les mises à jour du proxy Envoy et toute modification de la configuration du proxy, vous devez redémarrer vos pods d'application et vos charges de travail.

1.11.5.1. Mise à jour des applications et des charges de travail

Pour terminer la migration, redémarrez tous les pods d'application dans le maillage pour mettre à niveau les proxies Envoy sidecar et leur configuration.

Pour effectuer une mise à jour continue d'un déploiement, utilisez la commande suivante :

$ oc rollout restart <deployment>

Vous devez effectuer une mise à jour continue pour toutes les applications qui composent le maillage.

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.