1.18. Connexion des mailles de service


Federation est un modèle de déploiement qui vous permet de partager des services et des charges de travail entre des mailles séparées gérées dans des domaines administratifs distincts.

1.18.1. Vue d'ensemble de la Fédération

La fédération est un ensemble de fonctions qui vous permettent de connecter des services entre des mailles distinctes, ce qui permet d'utiliser les fonctions du Service Mesh telles que l'authentification, l'autorisation et la gestion du trafic dans plusieurs domaines administratifs distincts.

La mise en œuvre d'un maillage fédéré vous permet d'exécuter, de gérer et d'observer un maillage de services unique fonctionnant sur plusieurs clusters OpenShift. Red Hat OpenShift Service Mesh federation adopte une approche fondée sur l'opinion pour une mise en œuvre multi-clusters de Service Mesh qui suppose minimal la confiance entre les mailles.

La fédération de mailles de services suppose que chaque maille est gérée individuellement et conserve son propre administrateur. Par défaut, aucune communication n'est autorisée et aucune information n'est partagée entre les mailles. Le partage d'informations entre les mailles se fait sur la base d'un consentement explicite. Rien n'est partagé dans un maillage fédéré s'il n'a pas été configuré pour le partage. Les fonctions de support telles que la génération de certificats, les métriques et la collecte de traces restent locales dans leurs mailles respectives.

Vous configurez le site ServiceMeshControlPlane sur chaque maille de service pour créer des passerelles d'entrée et de sortie spécifiques à la fédération et pour spécifier le domaine de confiance pour la maille.

La fédération implique également la création de fichiers de fédération supplémentaires. Les ressources suivantes sont utilisées pour configurer la fédération entre deux ou plusieurs mailles.

  • Une ressource ServiceMeshPeer déclare la fédération entre une paire de mailles de services.
  • Une ressource ExportedServiceSet déclare qu'un ou plusieurs services du réseau maillé sont disponibles pour être utilisés par un réseau maillé homologue.
  • Une ressource ImportedServiceSet indique quels services exportés par une maille homologue seront importés dans la maille.

1.18.2. Caractéristiques de la Fédération

Les caractéristiques de l'approche fédérée de Red Hat OpenShift Service Mesh pour rejoindre les maillages sont les suivantes :

  • Prend en charge les certificats racine communs pour chaque maille.
  • Prend en charge des certificats racine différents pour chaque maille.
  • Les administrateurs de maillage doivent configurer manuellement les chaînes de certificats, les points d'extrémité de découverte de services, les domaines de confiance, etc. pour les mailles situées en dehors du maillage fédéré.
  • N'exportez/importez que les services que vous souhaitez partager entre les mailles.

    • Par défaut, les informations sur les charges de travail déployées ne sont pas partagées avec les autres mailles de la fédération. Un service peut être exported pour le rendre visible à d'autres mailles et permettre des requêtes de charges de travail en dehors de sa propre maille.
    • Un service qui a été exporté peut être imported vers une autre maille, ce qui permet aux charges de travail de cette maille d'envoyer des demandes au service importé.
  • Cryptage permanent des communications entre les mailles.
  • Permet de configurer l'équilibrage de la charge entre les charges de travail déployées localement et les charges de travail déployées dans une autre maille de la fédération.

Lorsqu'une maille est reliée à une autre maille, elle peut effectuer les opérations suivantes :

  • Fournir au réseau fédéré des informations de confiance le concernant.
  • Découvrez les informations de confiance sur le maillage fédéré.
  • Fournir des informations au maillage fédéré sur ses propres services exportés.
  • Découvrir des informations sur les services exportés par le maillage fédéré.

1.18.3. Sécurité de la Fédération

La fédération Red Hat OpenShift Service Mesh adopte une approche fondée sur l'opinion pour une mise en œuvre multi-clusters de Service Mesh qui suppose une confiance minimale entre les mailles. La sécurité des données est intégrée dans les fonctionnalités de la fédération.

  • Chaque maille est considérée comme un locataire unique, avec une administration unique.
  • Vous créez un domaine de confiance unique pour chaque maille de la fédération.
  • Le trafic entre les mailles fédérées est automatiquement crypté à l'aide de la sécurité mutuelle de la couche transport (mTLS).
  • Le graphique de Kiali n'affiche que votre maillage et les services que vous avez importés. Vous ne pouvez pas voir les autres mailles ou services qui n'ont pas été importés dans votre maille.

1.18.4. Limites de la Fédération

L'approche fédérée de Red Hat OpenShift Service Mesh pour joindre les mailles a les limitations suivantes :

  • La fédération de maillages n'est pas prise en charge sur OpenShift Dedicated.

1.18.5. Conditions préalables de la Fédération

L'approche fédérée de Red Hat OpenShift Service Mesh pour joindre les mailles a les prérequis suivants :

  • Deux ou plusieurs clusters OpenShift Container Platform 4.6 ou supérieur.
  • La fédération a été introduite dans Red Hat OpenShift Service Mesh 2.1 ou une version ultérieure. Vous devez avoir l'opérateur Red Hat OpenShift Service Mesh 2.1 ou ultérieur installé sur chaque maille que vous souhaitez fédérer.
  • Vous devez avoir une version 2.1 ou plus récente de ServiceMeshControlPlane déployée sur chaque maille que vous voulez fédérer.
  • Vous devez configurer les répartiteurs de charge prenant en charge les services associés aux passerelles de fédération pour qu'ils prennent en charge le trafic TLS brut. Le trafic de la fédération se compose de HTTPS pour la découverte et de TCP crypté brut pour le trafic de service.
  • Les services que vous souhaitez exposer à un autre maillage doivent être déployés avant de pouvoir les exporter et les importer. Il ne s'agit toutefois pas d'une exigence stricte. Vous pouvez spécifier des noms de services qui n'existent pas encore pour l'exportation/importation. Lorsque vous déployez les services nommés dans les adresses ExportedServiceSet et ImportedServiceSet, ils sont automatiquement mis à disposition pour l'exportation/l'importation.

1.18.6. Planification de votre fédération de maillage

Avant de commencer à configurer votre fédération de maillage, vous devez prendre le temps de planifier votre mise en œuvre.

  • Combien de mailles envisagez-vous d'intégrer dans une fédération ? Vous voudrez probablement commencer avec un nombre limité de mailles, peut-être deux ou trois.
  • Quelle convention de dénomination prévoyez-vous d'utiliser pour chaque maille ? Le fait de disposer d'une convention de dénomination prédéfinie facilitera la configuration et le dépannage. Les exemples de cette documentation utilisent des couleurs différentes pour chaque maille. Vous devez décider d'une convention de dénomination qui vous aidera à déterminer qui possède et gère chaque maille, ainsi que les ressources de fédération suivantes :

    • Noms des groupes
    • Noms de réseaux de clusters
    • Noms de mailles et espaces de noms
    • Passerelles d'entrée de la fédération
    • Passerelles de sortie de la fédération
    • Domaines de confiance en matière de sécurité

      Note

      Chaque maille de la fédération doit avoir son propre domaine de confiance.

  • Quels services de chaque maillage prévoyez-vous d'exporter vers le maillage fédéré ? Chaque service peut être exporté individuellement, ou vous pouvez spécifier des étiquettes ou utiliser des caractères génériques.

    • Souhaitez-vous utiliser des alias pour les espaces de noms des services ?
    • Souhaitez-vous utiliser des alias pour les services exportés ?
  • Quels sont les services exportés que chaque maille prévoit d'importer ? Chaque maille n'importe que les services dont elle a besoin.

    • Souhaitez-vous utiliser des alias pour les services importés ?

1.18.7. Fédération de maillage entre clusters

Pour connecter une instance d'OpenShift Service Mesh avec une instance fonctionnant dans un cluster différent, la procédure n'est pas très différente de celle utilisée pour connecter deux meshs déployés dans le même cluster. Cependant, la passerelle d'entrée d'un maillage doit être accessible depuis l'autre maillage. Une façon de s'en assurer est de configurer le service de passerelle comme un service LoadBalancer si le cluster supporte ce type de service.

Le service doit être exposé par l'intermédiaire d'un équilibreur de charge qui fonctionne à la couche 4 du modèle OSI.

1.18.7.1. Exposer l'entrée de la fédération sur des clusters fonctionnant sur du métal nu

Si le cluster fonctionne sur du métal nu et prend entièrement en charge les services LoadBalancer, l'adresse IP indiquée dans le champ .status.loadBalancer.ingress.ip de l'objet Service de la passerelle d'entrée doit être spécifiée comme l'une des entrées du champ .spec.remote.addresses de l'objet ServiceMeshPeer.

Si le cluster ne prend pas en charge les services LoadBalancer, l'utilisation d'un service NodePort peut être une option si les nœuds sont accessibles depuis le cluster qui exécute l'autre maille. Dans l'objet ServiceMeshPeer, indiquez les adresses IP des nœuds dans le champ .spec.remote.addresses et les ports de nœud du service dans les champs .spec.remote.discoveryPort et .spec.remote.servicePort.

1.18.7.2. Exposer l'entrée de la fédération sur des clusters fonctionnant sur IBM Power et IBM zSystems

Si le cluster fonctionne sur une infrastructure IBM Power ou IBM zSystems et prend entièrement en charge les services LoadBalancer, l'adresse IP figurant dans le champ .status.loadBalancer.ingress.ip de l'objet Service de la passerelle d'entrée doit être spécifiée comme l'une des entrées du champ .spec.remote.addresses de l'objet ServiceMeshPeer.

Si le cluster ne prend pas en charge les services LoadBalancer, l'utilisation d'un service NodePort peut être une option si les nœuds sont accessibles depuis le cluster qui exécute l'autre maille. Dans l'objet ServiceMeshPeer, indiquez les adresses IP des nœuds dans le champ .spec.remote.addresses et les ports de nœud du service dans les champs .spec.remote.discoveryPort et .spec.remote.servicePort.

1.18.7.3. Exposer l'entrée de la fédération sur Amazon Web Services (AWS)

Par défaut, les services LoadBalancer dans les clusters fonctionnant sur AWS ne prennent pas en charge l'équilibrage de charge L4. Pour que la fédération Red Hat OpenShift Service Mesh fonctionne correctement, l'annotation suivante doit être ajoutée au service de passerelle d'entrée :

service.beta.kubernetes.io/aws-load-balancer-type : nlb

Le nom de domaine entièrement qualifié figurant dans le champ .status.loadBalancer.ingress.hostname de l'objet Service de la passerelle d'entrée doit être spécifié comme l'une des entrées du champ .spec.remote.addresses de l'objet ServiceMeshPeer.

1.18.7.4. Exposer l'entrée de la fédération sur Azure

Sur Microsoft Azure, il suffit de définir le type de service sur LoadBalancer pour que la fédération mesh fonctionne correctement.

L'adresse IP figurant dans le champ .status.loadBalancer.ingress.ip de l'objet "ingress gateway" (passerelle d'entrée) Service doit être spécifiée comme l'une des entrées du champ .spec.remote.addresses de l'objet ServiceMeshPeer.

1.18.7.5. Exposer l'entrée de la fédération sur Google Cloud Platform (GCP)

Sur Google Cloud Platform, il suffit de définir le type de service sur LoadBalancer pour que la fédération de maillage fonctionne correctement.

L'adresse IP figurant dans le champ .status.loadBalancer.ingress.ip de l'objet "ingress gateway" (passerelle d'entrée) Service doit être spécifiée comme l'une des entrées du champ .spec.remote.addresses de l'objet ServiceMeshPeer.

1.18.8. Liste de contrôle pour la mise en œuvre de la fédération

La fédération de maillages de services implique les activités suivantes :

  • ❏ Configurez le réseau entre les clusters que vous allez fédérer.

    • ❏ Configurer les équilibreurs de charge prenant en charge les services associés aux passerelles de fédération pour prendre en charge le trafic TLS brut.
  • ❏ Installation de l'opérateur Red Hat OpenShift Service Mesh version 2.1 ou ultérieure dans chacun de vos clusters.
  • ❏ Déployer une version 2.1 ou ultérieure de ServiceMeshControlPlane sur chacun de vos clusters.
  • ❏ Configurer le SMCP pour la fédération pour chaque maille que vous voulez fédérer :

    • ❏ Créez une passerelle de sortie de fédération pour chaque maille avec laquelle vous allez vous fédérer.
    • ❏ Créez une passerelle d'entrée de fédération pour chaque maille avec laquelle vous allez vous fédérer.
    • ❏ Configurer un domaine de confiance unique.
  • ❏ Fédérer deux ou plusieurs mailles en créant une ressource ServiceMeshPeer pour chaque paire de mailles.
  • ❏ Exporter des services en créant une ressource ExportedServiceSet pour rendre les services disponibles d'un maillage à un maillage homologue.
  • ❏ Importer des services en créant une ressource ImportedServiceSet pour importer des services partagés par un pair maillé.

1.18.9. Configuration d'un plan de contrôle Service Mesh pour la fédération

Avant de pouvoir fédérer une maille, vous devez configurer le site ServiceMeshControlPlane pour la fédération de mailles. Comme toutes les mailles membres de la fédération sont égales et que chaque maille est gérée indépendamment, vous devez configurer le SMCP pour la maille each qui participera à la fédération.

Dans l'exemple suivant, l'administrateur de red-mesh configure le SMCP pour la fédération avec green-mesh et blue-mesh.

Exemple de SMCP pour red-mesh

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: red-mesh
  namespace: red-mesh-system
spec:
  version: v2.3
  runtime:
    defaults:
      container:
        imagePullPolicy: Always
  gateways:
    additionalEgress:
      egress-green-mesh:
        enabled: true
        requestedNetworkView:
        - green-network
        routerMode: sni-dnat
        service:
          metadata:
            labels:
              federation.maistra.io/egress-for: egress-green-mesh
          ports:
          - port: 15443
            name: tls
          - port: 8188
            name: http-discovery  #note HTTP here
      egress-blue-mesh:
        enabled: true
        requestedNetworkView:
        - blue-network
        routerMode: sni-dnat
        service:
          metadata:
            labels:
              federation.maistra.io/egress-for: egress-blue-mesh
          ports:
          - port: 15443
            name: tls
          - port: 8188
            name: http-discovery  #note HTTP here
    additionalIngress:
      ingress-green-mesh:
        enabled: true
        routerMode: sni-dnat
        service:
          type: LoadBalancer
          metadata:
            labels:
              federation.maistra.io/ingress-for: ingress-green-mesh
          ports:
          - port: 15443
            name: tls
          - port: 8188
            name: https-discovery  #note HTTPS here
      ingress-blue-mesh:
        enabled: true
        routerMode: sni-dnat
        service:
          type: LoadBalancer
          metadata:
            labels:
              federation.maistra.io/ingress-for: ingress-blue-mesh
          ports:
          - port: 15443
            name: tls
          - port: 8188
            name: https-discovery  #note HTTPS here
  security:
    trust:
      domain: red-mesh.local

Tableau 1.6. Paramètres de configuration de la fédération ServiceMeshControlPlane
ParamètresDescriptionValeursValeur par défaut
spec:
  cluster:
    name:

Nom de la grappe. Vous n'êtes pas obligé de spécifier un nom de cluster, mais cela peut être utile pour le dépannage.

String

N/A

spec:
  cluster:
    network:

Nom du réseau du cluster. Vous n'êtes pas obligé de spécifier un nom pour le réseau, mais cela peut être utile pour la configuration et le dépannage.

String

N/A

1.18.9.1. Comprendre les passerelles de fédération

Vous utilisez un site gateway pour gérer le trafic entrant et sortant de votre maillage, ce qui vous permet de spécifier le trafic qui doit entrer ou sortir du maillage.

Vous utilisez des passerelles d'entrée et de sortie pour gérer le trafic entrant et sortant du maillage de services (trafic nord-sud). Lorsque vous créez un maillage fédéré, vous créez des passerelles d'entrée et de sortie supplémentaires pour faciliter la découverte des services entre les mailles fédérées, la communication entre les mailles fédérées et pour gérer le flux de trafic entre les mailles de service (trafic est-ouest).

Pour éviter les conflits de noms entre les mailles, vous devez créer des passerelles de sortie et d'entrée distinctes pour chaque maille. Par exemple, red-mesh aura des passerelles de sortie distinctes pour le trafic allant vers green-mesh et blue-mesh.

Tableau 1.7. Paramètres de la passerelle de la fédération
ParamètresDescriptionValeursValeur par défaut
spec:
  gateways:
    additionalEgress:
      <egressName>:

Définir une passerelle de sortie supplémentaire pour each mesh peer dans la fédération.

  
spec:
  gateways:
    additionalEgress:
      <egressName>:
        enabled:

Ce paramètre permet d'activer ou de désactiver la sortie de la fédération.

true/false

true

spec:
  gateways:
    additionalEgress:
      <egressName>:
        requestedNetworkView:

Réseaux associés aux services exportés.

Définir la valeur de spec.cluster.network dans le SMCP pour la maille, sinon utiliser <ServiceMeshPeer-name>-network. Par exemple, si la ressource ServiceMeshPeer pour cette maille est nommée west, le réseau sera nommé west-network.

 
spec:
  gateways:
    additionalEgress:
      <egressName>:
        routerMode:

Le mode routeur à utiliser par la passerelle.

sni-dnat

 
spec:
  gateways:
    additionalEgress:
      <egressName>:
        service:
          metadata:
            labels:
              federation.maistra.io/egress-for:

Spécifiez une étiquette unique pour la passerelle afin d'empêcher le trafic fédéré de passer par les passerelles système par défaut du cluster.

  
spec:
  gateways:
    additionalEgress:
      <egressName>:
        service:
          ports:

Permet de spécifier les adresses port: et name: utilisées pour TLS et la découverte de services. Le trafic de la fédération consiste en un trafic de service TCP crypté brut.

Le port 15443 est nécessaire pour envoyer des requêtes de service TLS à d'autres mailles de la fédération. Le port 8188 est nécessaire pour envoyer des requêtes de découverte de service à d'autres mailles de la fédération.

 
spec:
  gateways:
    additionalIngress:

Définir une passerelle d'entrée supplémentaire pour each mesh peer dans la fédération.

  
spec:
  gateways:
    additionalIgress:
      <ingressName>:
        enabled:

Ce paramètre permet d'activer ou de désactiver l'entrée de la fédération.

true/false

true

spec:
  gateways:
    additionalIngress:
      <ingressName>:
        routerMode:

Le mode routeur à utiliser par la passerelle.

sni-dnat

 
spec:
  gateways:
    additionalIngress:
      <ingressName>:
        service:
          type:

Le service de passerelle d'entrée doit être exposé par l'intermédiaire d'un équilibreur de charge qui fonctionne à la couche 4 du modèle OSI et qui est accessible au public.

LoadBalancer

 
spec:
  gateways:
    additionalIngress:
      <ingressName>:
        service:
          type:

Si le cluster ne prend pas en charge les services LoadBalancer, le service de passerelle d'entrée peut être exposé par le biais d'un service NodePort.

NodePort

 
spec:
  gateways:
    additionalIngress:
      <ingressName>:
        service:
          metadata:
            labels:
              federation.maistra.io/ingress-for:

Spécifiez une étiquette unique pour la passerelle afin d'empêcher le trafic fédéré de passer par les passerelles système par défaut du cluster.

  
spec:
  gateways:
    additionalIngress:
      <ingressName>:
        service:
          ports:

Permet de spécifier les adresses port: et name: utilisées pour TLS et la découverte de services. Le trafic de la fédération consiste en un TCP crypté brut pour le trafic de service. Le trafic de la fédération consiste en HTTPS pour la découverte.

Le port 15443 est nécessaire pour recevoir des demandes de service TLS vers d'autres mailles de la fédération. Le port 8188 est nécessaire pour recevoir des demandes de découverte de service vers d'autres mailles de la fédération.

 
spec:
  gateways:
    additionalIngress:
      <ingressName>:
        service:
          ports:
            nodePort:

Utilisé pour spécifier l'adresse nodePort: si le cluster ne prend pas en charge les services LoadBalancer.

S'il est spécifié, il est requis en plus de port: et name: pour TLS et la découverte de services. nodePort: doit être compris entre 30000 et32767.

 

Dans l'exemple suivant, l'administrateur configure le SMCP pour la fédération avec le site green-mesh à l'aide d'un service NodePort.

Exemple de SMCP pour NodePort

  gateways:
     additionalIngress:
      ingress-green-mesh:
        enabled: true
        routerMode: sni-dnat
        service:
          type: NodePort
          metadata:
            labels:
              federation.maistra.io/ingress-for: ingress-green-mesh
          ports:
          - port: 15443
            nodePort: 30510
            name: tls
          - port: 8188
            nodePort: 32359
            name: https-discovery

1.18.9.2. Comprendre les paramètres du domaine de confiance de la fédération

Chaque maille de la fédération doit avoir son propre domaine de confiance. Cette valeur est utilisée lors de la configuration de la fédération de mailles dans la ressource ServiceMeshPeer.

kind: ServiceMeshControlPlane
metadata:
  name: red-mesh
  namespace: red-mesh-system
spec:
  security:
    trust:
      domain: red-mesh.local
Tableau 1.8. Paramètres de sécurité de la fédération
ParamètresDescriptionValeursValeur par défaut
spec:
  security:
    trust:
      domain:

Utilisé pour spécifier un nom unique pour le domaine de confiance de la maille. Les domaines doivent être uniques pour chaque maille de la fédération.

<mesh-name>.local

N/A

Procédure à partir de la console

Suivez cette procédure pour éditer le site ServiceMeshControlPlane avec la console web d'OpenShift Container Platform. Cet exemple utilise le site red-mesh comme exemple.

  1. Connectez-vous à la console web d'OpenShift Container Platform en tant qu'utilisateur ayant le rôle d'administrateur de cluster.
  2. Naviguez jusqu'à Operators Installed Operators.
  3. Cliquez sur le menu Project et sélectionnez le projet dans lequel vous avez installé le plan de contrôle Service Mesh. Par exemple, red-mesh-system.
  4. Cliquez sur l'opérateur Red Hat OpenShift Service Mesh.
  5. Dans l'onglet Istio Service Mesh Control Plane, cliquez sur le nom de votre ServiceMeshControlPlane, par exemple red-mesh.
  6. Sur la page Create ServiceMeshControlPlane Details, cliquez sur YAML pour modifier votre configuration.
  7. Modifiez votre ServiceMeshControlPlane pour ajouter les passerelles d'entrée et de sortie de la fédération et pour spécifier le domaine de confiance.
  8. Cliquez sur Save.

Procédure à partir du CLI

Suivez cette procédure pour créer ou modifier le site ServiceMeshControlPlane à l'aide de la ligne de commande. Cet exemple utilise le site red-mesh.

  1. Connectez-vous au CLI de OpenShift Container Platform en tant qu'utilisateur ayant le rôle cluster-admin. Entrez la commande suivante. Saisissez ensuite votre nom d'utilisateur et votre mot de passe lorsque vous y êtes invité.

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. Accédez au projet dans lequel vous avez installé le plan de contrôle Service Mesh, par exemple red-mesh-system.

    $ oc project red-mesh-system
  3. Modifiez le fichier ServiceMeshControlPlane pour ajouter les passerelles d'entrée et de sortie de la fédération et pour spécifier le domaine de confiance.
  4. Exécutez la commande suivante pour modifier le plan de contrôle Service Mesh où red-mesh-system est l'espace de noms du système et red-mesh est le nom de l'objet ServiceMeshControlPlane:

    $ oc edit -n red-mesh-system smcp red-mesh
  5. Entrez la commande suivante, où red-mesh-system est l'espace de noms du système, pour voir l'état de l'installation du plan de contrôle Service Mesh.

    $ oc get smcp -n red-mesh-system

    L'installation est terminée avec succès lorsque la colonne READY indique que tous les composants sont prêts.

    NAME       READY   STATUS            PROFILES      VERSION   AGE
    red-mesh   10/10   ComponentsReady   ["default"]   2.1.0     4m25s

1.18.10. Rejoindre un maillage fédéré

Vous déclarez la fédération entre deux mailles en créant une ressource ServiceMeshPeer. La ressource ServiceMeshPeer définit la fédération entre deux mailles, et vous l'utilisez pour configurer la découverte de la maille homologue, l'accès à la maille homologue, et les certificats utilisés pour valider les clients de l'autre maille.

Service Mesh federated mesh peers illustration

Les mailles sont fédérées sur une base un à un, de sorte que chaque paire de pairs nécessite une paire de ressources ServiceMeshPeer spécifiant la connexion de fédération à l'autre maille de service. Par exemple, la fédération de deux mailles nommées red et green nécessiterait deux fichiers ServiceMeshPeer.

  1. Sur le système de maillage rouge, créez un site ServiceMeshPeer pour le maillage vert.
  2. Sur le système de maillage vert, créez un site ServiceMeshPeer pour le maillage rouge.

La fédération de trois maillages nommés red, blue et green nécessiterait six fichiers ServiceMeshPeer.

  1. Sur le système de maillage rouge, créez un site ServiceMeshPeer pour le maillage vert.
  2. Sur le système de maillage rouge, créez un site ServiceMeshPeer pour le maillage bleu.
  3. Sur le système de maillage vert, créez un site ServiceMeshPeer pour le maillage rouge.
  4. Sur le système de maillage vert, créez un site ServiceMeshPeer pour le maillage bleu.
  5. Sur le système de maillage bleu, créez un site ServiceMeshPeer pour le maillage rouge.
  6. Sur le système de maillage bleu, créez un site ServiceMeshPeer pour le maillage vert.

La configuration de la ressource ServiceMeshPeer comprend les éléments suivants :

  • Adresse de la passerelle d'entrée de l'autre maille, utilisée pour la découverte et les demandes de service.
  • Les noms des passerelles d'entrée et de sortie locales utilisées pour les interactions avec le réseau homologue spécifié.
  • L'ID du client utilisé par l'autre maillage lorsqu'il envoie des demandes à ce maillage.
  • Le domaine de confiance utilisé par l'autre maillage.
  • Le nom d'un site ConfigMap contenant un certificat racine utilisé pour valider les certificats des clients dans le domaine de confiance utilisé par l'autre maillage.

Dans l'exemple suivant, l'administrateur de red-mesh configure la fédération avec green-mesh.

Exemple de ressource ServiceMeshPeer pour red-mesh

kind: ServiceMeshPeer
apiVersion: federation.maistra.io/v1
metadata:
  name: green-mesh
  namespace: red-mesh-system
spec:
  remote:
    addresses:
    - ingress-red-mesh.green-mesh-system.apps.domain.com
  gateways:
    ingress:
      name: ingress-green-mesh
    egress:
      name: egress-green-mesh
  security:
    trustDomain: green-mesh.local
    clientID: green-mesh.local/ns/green-mesh-system/sa/egress-red-mesh-service-account
    certificateChain:
      kind: ConfigMap
      name: green-mesh-ca-root-cert

Tableau 1.9. Paramètres de configuration de ServiceMeshPeer
ParamètresDescriptionValeurs
metadata:
  name:

Nom de la maille homologue avec laquelle cette ressource configure la fédération.

String

metadata:
  namespace:

Espace de noms du système pour ce maillage, c'est-à-dire l'endroit où le plan de contrôle du maillage de services est installé.

String

spec:
  remote:
    addresses:

Liste des adresses publiques des passerelles d'entrée des mailles homologues qui traitent les demandes de cette maille.

 
spec:
  remote:
    discoveryPort:

Le port sur lequel les adresses traitent les demandes de découverte.

La valeur par défaut est 8188

spec:
  remote:
    servicePort:

Le port sur lequel les adresses traitent les demandes de service.

La valeur par défaut est 15443

spec:
  gateways:
    ingress:
      name:

Nom de l'entrée sur ce maillage qui répond aux demandes reçues du maillage homologue. Par exemple, ingress-green-mesh.

 
spec:
  gateways:
    egress:
      name:

Nom de la sortie sur ce maillage qui traite les demandes envoyées au maillage homologue. Par exemple, egress-green-mesh.

 
spec:
  security:
    trustDomain:

Le domaine de confiance utilisé par la maille homologue.

<peerMeshName>.local

spec:
  security:
    clientID:

L'identifiant du client utilisé par la maille homologue lors d'un appel à cette maille.

<peerMeshTrustDomain>/ns/<peerMeshSystem>/sa/<peerMeshEgressGatewayName>-service-account

spec:
  security:
    certificateChain:
      kind: ConfigMap
      name:

Le type (par exemple, ConfigMap) et le nom d'une ressource contenant le certificat racine utilisé pour valider le(s) certificat(s) de client et de serveur présenté(s) à ce maillage par le maillage homologue. La clé de l'entrée de la carte de configuration contenant le certificat doit être root-cert.pem.

kind : ConfigMap name : <peerMesh>-ca-root-cert

1.18.10.1. Création d'une ressource ServiceMeshPeer

Conditions préalables

  • Deux ou plusieurs clusters OpenShift Container Platform 4.6 ou supérieur.
  • Les clusters doivent déjà être en réseau.
  • Les répartiteurs de charge supportant les services associés aux passerelles de fédération doivent être configurés pour supporter le trafic TLS brut.
  • Chaque cluster doit avoir une version 2.1 ou plus récente de ServiceMeshControlPlane configurée pour supporter la fédération déployée.
  • Un compte avec le rôle cluster-admin.

Procédure à partir du CLI

Suivez cette procédure pour créer une ressource ServiceMeshPeer à partir de la ligne de commande. Cet exemple montre la création par red-mesh d'une ressource homologue pour green-mesh.

  1. Connectez-vous au CLI de OpenShift Container Platform en tant qu'utilisateur ayant le rôle cluster-admin. Entrez la commande suivante. Saisissez ensuite votre nom d'utilisateur et votre mot de passe lorsque vous y êtes invité.

    $ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
  2. Accédez au projet dans lequel vous avez installé le plan de contrôle, par exemple, red-mesh-system.

    $ oc project red-mesh-system
  3. Créez un fichier ServiceMeshPeer basé sur l'exemple suivant pour les deux maillages que vous souhaitez fédérer.

    Exemple de ressource ServiceMeshPeer pour le maillage rouge vers le maillage vert

    kind: ServiceMeshPeer
    apiVersion: federation.maistra.io/v1
    metadata:
      name: green-mesh
      namespace: red-mesh-system
    spec:
      remote:
        addresses:
        - ingress-red-mesh.green-mesh-system.apps.domain.com
      gateways:
        ingress:
          name: ingress-green-mesh
        egress:
          name: egress-green-mesh
      security:
        trustDomain: green-mesh.local
        clientID: green-mesh.local/ns/green-mesh-system/sa/egress-red-mesh-service-account
        certificateChain:
          kind: ConfigMap
          name: green-mesh-ca-root-cert

  4. Exécutez la commande suivante pour déployer la ressource, où red-mesh-system est l'espace de noms du système et servicemeshpeer.yaml inclut un chemin complet vers le fichier que vous avez modifié :

    $ oc create -n red-mesh-system -f servicemeshpeer.yaml
  5. Pour confirmer que la connexion entre la maille rouge et la maille verte est établie, vérifiez l'état de la maille verte ServiceMeshPeer dans l'espace de noms du système de la maille rouge :

    $ oc -n red-mesh-system get servicemeshpeer green-mesh -o yaml

    Exemple de connexion ServiceMeshPeer entre la maille rouge et la maille verte

    status:
      discoveryStatus:
        active:
        - pod: istiod-red-mesh-b65457658-9wq5j
          remotes:
          - connected: true
            lastConnected: "2021-10-05T13:02:25Z"
            lastFullSync: "2021-10-05T13:02:25Z"
            source: 10.128.2.149
          watch:
            connected: true
            lastConnected: "2021-10-05T13:02:55Z"
            lastDisconnectStatus: 503 Service Unavailable
            lastFullSync: "2021-10-05T13:05:43Z"

    Le champ status.discoveryStatus.active.remotes indique que l'istiod de la maille homologue (dans cet exemple, la maille verte) est connecté à l'istiod de la maille courante (dans cet exemple, la maille rouge).

    Le champ status.discoveryStatus.active.watch indique qu'istiod dans le maillage actuel est connecté à istiod dans le maillage homologue.

    Si vous consultez le site servicemeshpeer nommé red-mesh dans green-mesh-system, vous trouverez des informations sur les deux mêmes connexions du point de vue de la maille verte.

    Lorsque la connexion entre deux mailles n'est pas établie, le statut ServiceMeshPeer l'indique dans le champ status.discoveryStatus.inactive.

    Pour plus d'informations sur la raison de l'échec d'une tentative de connexion, consultez le journal Istiod, le journal d'accès de la passerelle de sortie gérant le trafic de sortie pour le pair et la passerelle d'entrée gérant le trafic d'entrée pour le maillage actuel dans le maillage du pair.

    Par exemple, si la maille rouge ne peut pas se connecter à la maille verte, vérifiez les journaux suivants :

    • istiod-red-mesh dans red-mesh-system
    • egress-green-mesh in red-mesh-system
    • ingress-red-mesh in green-mesh-system

1.18.11. Exporter un service à partir d'un maillage fédéré

L'exportation de services permet à une maille de partager un ou plusieurs de ses services avec un autre membre de la maille fédérée.

Service Mesh federation exporting service illustration

Vous utilisez une ressource ExportedServiceSet pour déclarer les services d'une maille que vous mettez à la disposition d'un autre pair dans la maille fédérée. Vous devez déclarer explicitement chaque service à partager avec un pair.

  • Vous pouvez sélectionner les services par espace de noms ou par nom.
  • Vous pouvez utiliser des caractères génériques pour sélectionner des services, par exemple pour exporter tous les services d'un espace de noms.
  • Vous pouvez exporter des services en utilisant un alias. Par exemple, vous pouvez exporter le service foo/bar en tant que custom-ns/bar.
  • Vous ne pouvez exporter que des services visibles dans l'espace de noms du système de maillage. Par exemple, un service dans un autre espace de noms avec un label networking.istio.io/exportTo défini sur '.' ne serait pas un candidat à l'exportation.
  • Pour les services exportés, les services cibles ne verront que le trafic provenant de la passerelle d'entrée, et non du demandeur initial (c'est-à-dire qu'ils ne verront pas l'identifiant du client de la passerelle de sortie de l'autre maille ou de la charge de travail à l'origine de la demande)

L'exemple suivant concerne les services que red-mesh exporte vers green-mesh.

Exemple de ressource ExportedServiceSet

kind: ExportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: green-mesh
  namespace: red-mesh-system
spec:
  exportRules:
  # export ratings.mesh-x-info as ratings.bookinfo
  - type: NameSelector
    nameSelector:
      namespace: red-mesh-info
      name: red-ratings
      alias:
        namespace: info
        name: ratings
  # export any service in red-mesh-info namespace with label export-service=true
  - type: LabelSelector
    labelSelector:
      namespace: red-mesh-info
      selector:
        matchLabels:
          export-service: "true"
      aliases: # export all matching services as if they were in the info namespace
      - namespace: "*"
        name: "*"
        alias:
          namespace: info

Tableau 1.10. Paramètres de l'ExportedServiceSet
ParamètresDescriptionValeurs
metadata:
  name:

Nom du ServiceMeshPeer auquel vous exposez ce service.

Doit correspondre à la valeur name pour la maille dans la ressource ServiceMeshPeer.

metadata:
  namespace:

Nom du projet/espace de noms contenant cette ressource (devrait être l'espace de noms du système pour le maillage) .

 
spec:
  exportRules:
  - type:

Type de règle qui régira l'exportation pour ce service. La première règle correspondante trouvée pour le service sera utilisée pour l'exportation.

NameSelector, LabelSelector

spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      namespace:
      name:

Pour créer une règle NameSelector, spécifiez le namespace du service et le name du service tel que défini dans la ressource Service.

 
spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      alias:
        namespace:
        name:

Pour créer une règle NameSelector qui utilise un alias pour le service, après avoir spécifié namespace et name pour le service, spécifiez ensuite l'alias pour namespace et l'alias à utiliser pour name du service.

 
spec:
  exportRules:
  - type: LabelSelector
    labelSelector:
      namespace: <exportingMesh>
      selector:
        matchLabels:
          <labelKey>: <labelValue>

Pour créer une règle LabelSelector, spécifiez le namespace du service et spécifiez le label défini dans la ressource Service. Dans l'exemple ci-dessus, l'étiquette est export-service.

 
spec:
  exportRules:
  - type: LabelSelector
    labelSelector:
      namespace: <exportingMesh>
      selector:
        matchLabels:
          <labelKey>: <labelValue>
      aliases:
      - namespace:
        name:
        alias:
          namespace:
          name:

Pour créer une règle LabelSelector qui utilise des alias pour les services, après avoir spécifié selector, spécifiez les alias à utiliser pour name ou namespace du service. Dans l'exemple ci-dessus, l'alias de l'espace de noms est info pour tous les services correspondants.

 

Exporter les services portant le nom "ratings" de tous les espaces de noms de la maille rouge vers la maille bleue.

kind: ExportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: blue-mesh
  namespace: red-mesh-system
spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      namespace: "*"
      name: ratings

Exporter tous les services de l'espace de noms west-data-center vers green-mesh

kind: ExportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: green-mesh
  namespace: red-mesh-system
spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      namespace: west-data-center
      name: "*"

1.18.11.1. Création d'un ExportedServiceSet

Vous créez une ressource ExportedServiceSet pour déclarer explicitement les services que vous souhaitez mettre à la disposition d'un homologue maillé.

Les services sont exportés en tant que <export-name>.<export-namespace>.svc.<ServiceMeshPeer.name>-exports.local et seront automatiquement acheminés vers le service cible. Il s'agit du nom sous lequel le service exporté est connu dans le maillage d'exportation. Lorsque la passerelle d'entrée reçoit une demande destinée à ce nom, elle est acheminée vers le service exporté. Par exemple, si un service nommé ratings.red-mesh-info est exporté vers green-mesh sous le nom ratings.bookinfo, le service sera exporté sous le nom ratings.bookinfo.svc.green-mesh-exports.local, et le trafic reçu par la passerelle d'entrée pour ce nom d'hôte sera acheminé vers le service ratings.red-mesh-bookinfo.

Conditions préalables

  • Le cluster et ServiceMeshControlPlane ont été configurés pour la fédération de maillage.
  • Un compte avec le rôle cluster-admin.
Note

Vous pouvez configurer des services pour l'exportation même s'ils n'existent pas encore. Lorsqu'un service correspondant à la valeur spécifiée dans le ExportedServiceSet est déployé, il est automatiquement exporté.

Procédure à partir du CLI

Suivez cette procédure pour créer un site ExportedServiceSet à partir de la ligne de commande.

  1. Connectez-vous au CLI de OpenShift Container Platform en tant qu'utilisateur ayant le rôle cluster-admin. Entrez la commande suivante. Saisissez ensuite votre nom d'utilisateur et votre mot de passe lorsque vous y êtes invité.

    $ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
  2. Accédez au projet dans lequel vous avez installé le plan de contrôle Service Mesh ; par exemple, red-mesh-system.

    $ oc project red-mesh-system
  3. Créez un fichier ExportedServiceSet basé sur l'exemple suivant où red-mesh exporte des services vers green-mesh.

    Exemple de ressource ExportedServiceSet de la maille rouge à la maille verte

    apiVersion: federation.maistra.io/v1
    kind: ExportedServiceSet
    metadata:
      name: green-mesh
      namespace: red-mesh-system
    spec:
      exportRules:
      - type: NameSelector
        nameSelector:
          namespace: red-mesh-info
          name: ratings
          alias:
            namespace: info
            name: red-ratings
      - type: NameSelector
        nameSelector:
          namespace: red-mesh-info
          name: reviews

  4. Exécutez la commande suivante pour télécharger et créer la ressource ExportedServiceSet dans l'espace de noms red-mesh-system.

    $ oc create -n <ControlPlaneNamespace> -f <ExportedServiceSet.yaml>

    Par exemple :

    $ oc create -n red-mesh-system -f export-to-green-mesh.yaml
  5. Créez des ExportedServiceSets supplémentaires si nécessaire pour chaque pair de maillage dans votre maillage fédéré.
  6. Pour valider les services que vous avez exportés de red-mesh pour les partager avec green-mesh, exécutez la commande suivante :

    $ oc get exportedserviceset <PeerMeshExportedTo> -o yaml

    Par exemple :

    $ oc get exportedserviceset green-mesh -o yaml
  7. Exécutez la commande suivante pour valider les services que red-mesh exporte pour les partager avec green-mesh :

    $ oc get exportedserviceset <PeerMeshExportedTo> -o yaml

    Par exemple :

    $ oc -n red-mesh-system get exportedserviceset green-mesh -o yaml

    Exemple de validation des services exportés de la maille rouge qui sont partagés avec la maille verte.

      status:
        exportedServices:
        - exportedName: red-ratings.info.svc.green-mesh-exports.local
          localService:
            hostname: ratings.red-mesh-info.svc.cluster.local
            name: ratings
            namespace: red-mesh-info
        - exportedName: reviews.red-mesh-info.svc.green-mesh-exports.local
          localService:
            hostname: reviews.red-mesh-info.svc.cluster.local
            name: reviews
            namespace: red-mesh-info

    Le tableau status.exportedServices répertorie les services qui sont actuellement exportés (ces services correspondent aux règles d'exportation de ExportedServiceSet object). Chaque entrée du tableau indique le nom du service exporté et des détails sur le service local exporté.

    Si un service que vous vous attendiez à voir exporté est manquant, vérifiez que l'objet Service existe, que son nom ou ses étiquettes correspondent au exportRules défini dans l'objet ExportedServiceSet et que l'espace de noms de l'objet Service est configuré en tant que membre du maillage de services à l'aide de l'objet ServiceMeshMemberRoll ou ServiceMeshMember.

1.18.12. Importer un service dans un maillage fédéré

L'importation de services vous permet de spécifier explicitement quels services exportés d'un autre maillage doivent être accessibles dans votre maillage de services.

Service Mesh federation importing service illustration

Vous utilisez une ressource ImportedServiceSet pour sélectionner les services à importer. Seuls les services exportés par un pair maillé et explicitement importés sont disponibles dans le maillage. Les services que vous n'importez pas explicitement ne sont pas disponibles dans le maillage.

  • Vous pouvez sélectionner les services par espace de noms ou par nom.
  • Vous pouvez utiliser des caractères génériques pour sélectionner des services, par exemple pour importer tous les services qui ont été exportés vers l'espace de noms.
  • Vous pouvez sélectionner les services à exporter à l'aide d'un sélecteur d'étiquettes, qui peut être global pour le maillage ou limité à un espace de noms membre spécifique.
  • Vous pouvez importer des services en utilisant un alias. Par exemple, vous pouvez importer le service custom-ns/bar en tant que other-mesh/bar.
  • Vous pouvez spécifier un suffixe de domaine personnalisé, qui sera ajouté au name.namespace d'un service importé pour son nom de domaine complet ; par exemple, bar.other-mesh.imported.local.

L'exemple suivant concerne l'importation par green-mesh d'un service exporté par red-mesh.

Exemple ImportedServiceSet

kind: ImportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: red-mesh #name of mesh that exported the service
  namespace: green-mesh-system #mesh namespace that service is being imported into
spec:
  importRules: # first matching rule is used
  # import ratings.info as ratings.bookinfo
  - type: NameSelector
    importAsLocal: false
    nameSelector:
      namespace: info
      name: ratings
      alias:
        # service will be imported as ratings.info.svc.red-mesh-imports.local
        namespace: info
        name: ratings

Tableau 1.11. Paramètres de l'ensemble de services importé
ParamètresDescriptionValeurs
metadata:
  name:

Nom du ServiceMeshPeer qui a exporté le service vers le maillage fédéré.

 
metadata:
  namespace:

Nom de l'espace de noms contenant la ressource ServiceMeshPeer (espace de noms du système maillé).

 
spec:
  importRules:
  - type:

Type de règle qui régira l'importation du service. La première règle correspondante trouvée pour le service sera utilisée pour l'importation.

NameSelector

spec:
  importRules:
  - type: NameSelector
    nameSelector:
      namespace:
      name:

Pour créer une règle NameSelector, spécifiez les adresses namespace et name du service exporté.

 
spec:
  importRules:
  - type: NameSelector
    importAsLocal:

La valeur true permet d'agréger le point de terminaison distant avec les services locaux. Lorsque true, les services seront importés en tant que <name>.<namespace>.svc.cluster.local

true/false

spec:
  importRules:
  - type: NameSelector
    nameSelector:
      namespace:
      name:
      alias:
        namespace:
        name:

Pour créer une règle NameSelector qui utilise un alias pour le service, après avoir spécifié namespace et name pour le service, spécifiez ensuite l'alias pour namespace et l'alias à utiliser pour name du service.

 

Importer le service "info/ratings" du maillage rouge dans le maillage bleu

kind: ImportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: red-mesh
  namespace: blue-mesh-system
spec:
  importRules:
  - type: NameSelector
    importAsLocal: false
    nameSelector:
      namespace: info
      name: ratings

Importer tous les services de l'espace de noms west-data-center du red-mesh dans le green-mesh. Ces services seront accessibles en tant que <name>.west-data-center.svc.red-mesh-imports.local

kind: ImportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: red-mesh
  namespace: green-mesh-system
spec:
  importRules:
  - type: NameSelector
    importAsLocal: false
    nameSelector:
      namespace: west-data-center
      name: "*"

1.18.12.1. Création d'un ImportedServiceSet

Vous créez une ressource ImportedServiceSet pour déclarer explicitement les services que vous souhaitez importer dans votre maillage.

Les services sont importés avec le nom <exported-name>.<exported-namespace>.svc.<ServiceMeshPeer.name>.remote qui est un service "caché", visible uniquement dans l'espace de noms de la passerelle egress et associé au nom d'hôte du service exporté. Le service sera disponible localement sous le nom <export-name>.<export-namespace>.<domainSuffix>, où domainSuffix est svc.<ServiceMeshPeer.name>-imports.local par défaut, sauf si importAsLocal est défini à true, auquel cas domainSuffix est svc.cluster.local. Si importAsLocal est défini à false, le suffixe de domaine dans la règle d'importation sera appliqué. Vous pouvez traiter l'importation locale comme n'importe quel autre service dans le maillage. Il passe automatiquement par la passerelle de sortie, où il est redirigé vers le nom distant du service exporté.

Conditions préalables

  • Le cluster et ServiceMeshControlPlane ont été configurés pour la fédération de maillage.
  • Un compte avec le rôle cluster-admin.
Note

Vous pouvez configurer des services pour l'importation même s'ils n'ont pas encore été exportés. Lorsqu'un service correspondant à la valeur spécifiée dans ImportedServiceSet est déployé et exporté, il est automatiquement importé.

Procédure à partir du CLI

Suivez cette procédure pour créer un site ImportedServiceSet à partir de la ligne de commande.

  1. Connectez-vous au CLI de OpenShift Container Platform en tant qu'utilisateur ayant le rôle cluster-admin. Entrez la commande suivante. Saisissez ensuite votre nom d'utilisateur et votre mot de passe lorsque vous y êtes invité.

    $ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
  2. Accédez au projet dans lequel vous avez installé le plan de contrôle Service Mesh ; par exemple, green-mesh-system.

    $ oc project green-mesh-system
  3. Créez un fichier ImportedServiceSet basé sur l'exemple suivant où green-mesh importe des services précédemment exportés par red-mesh.

    Exemple de ressource ImportedServiceSet de la maille rouge à la maille verte

    kind: ImportedServiceSet
    apiVersion: federation.maistra.io/v1
    metadata:
      name: red-mesh
      namespace: green-mesh-system
    spec:
      importRules:
      - type: NameSelector
        importAsLocal: false
        nameSelector:
          namespace: info
          name: red-ratings
          alias:
            namespace: info
            name: ratings

  4. Exécutez la commande suivante pour télécharger et créer la ressource ImportedServiceSet dans l'espace de noms green-mesh-system.

    $ oc create -n <ControlPlaneNamespace> -f <ImportedServiceSet.yaml>

    Par exemple :

    $ oc create -n green-mesh-system -f import-from-red-mesh.yaml
  5. Créez des ressources ImportedServiceSet supplémentaires si nécessaire pour chaque pair de maillage dans votre maillage fédéré.
  6. Pour valider les services que vous avez importés dans green-mesh, exécutez la commande suivante :

    $ oc get importedserviceset <PeerMeshImportedInto> -o yaml

    Par exemple :

    $ oc get importedserviceset green-mesh -o yaml
  7. Exécutez la commande suivante pour valider les services importés dans un maillage.

    $ oc get importedserviceset <PeerMeshImportedInto> -o yaml

    Exemple de validation de l'importation dans la maille verte des services exportés de la maille rouge à l'aide de la section status de l'espace de noms importedserviceset/red-mesh' object in the 'green-mesh-system:

    $ oc -n green-mesh-system get importedserviceset/red-mesh -o yaml

    status:
      importedServices:
      - exportedName: red-ratings.info.svc.green-mesh-exports.local
        localService:
          hostname: ratings.info.svc.red-mesh-imports.local
          name: ratings
          namespace: info
      - exportedName: reviews.red-mesh-info.svc.green-mesh-exports.local
        localService:
          hostname: ""
          name: ""
          namespace: ""

    Dans l'exemple précédent, seul le service d'évaluation est importé, comme l'indiquent les champs remplis sous localService. Le service de critiques est disponible pour l'importation, mais il n'est pas importé pour l'instant parce qu'il ne correspond à aucun importRules dans l'objet ImportedServiceSet.

1.18.13. Configuration d'un maillage fédéré pour le basculement

Le basculement est la capacité de basculer automatiquement et de manière transparente vers un système de sauvegarde fiable, par exemple un autre serveur. Dans le cas d'un maillage fédéré, vous pouvez configurer un service dans un maillage pour qu'il bascule vers un service dans un autre maillage.

Vous configurez la Fédération pour le basculement en définissant les paramètres importAsLocal et locality dans une ressource ImportedServiceSet, puis en configurant une ressource DestinationRule qui configure le basculement du service vers la localité spécifiée dans la ressource ImportedServiceSet.

Conditions préalables

  • Deux ou plusieurs clusters OpenShift Container Platform 4.6 ou plus, déjà mis en réseau et fédérés.
  • ExportedServiceSet déjà créées pour chaque pair de maillage dans le maillage fédéré.
  • ImportedServiceSet déjà créées pour chaque pair de maillage dans le maillage fédéré.
  • Un compte avec le rôle cluster-admin.

1.18.13.1. Configuration d'un ImportedServiceSet pour le basculement

L'équilibrage de charge pondéré par la localité permet aux administrateurs de contrôler la distribution du trafic vers les points d'extrémité en fonction des localités d'où le trafic provient et où il aboutit. Ces localités sont spécifiées à l'aide d'étiquettes arbitraires qui désignent une hiérarchie de localités sous la forme {région}/{zone}/{sous-zone}.

Dans les exemples de cette section, le site green-mesh est situé dans la région us-east et le site red-mesh est situé dans la région us-west.

Exemple ImportedServiceSet ressource du maillage rouge au maillage vert

kind: ImportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: red-mesh #name of mesh that exported the service
  namespace: green-mesh-system #mesh namespace that service is being imported into
spec:
  importRules: # first matching rule is used
  # import ratings.info as ratings.bookinfo
  - type: NameSelector
    importAsLocal: true
    nameSelector:
      namespace: info
      name: ratings
      alias:
        # service will be imported as ratings.info.svc.red-mesh-imports.local
        namespace: info
        name: ratings
  #Locality within which imported services should be associated.
  locality:
    region: us-west

Tableau 1.12. ImportedServiceLocality tableau des champs
NomDescriptionType

région :

Région dans laquelle les services importés sont situés.

chaîne de caractères

sous-zone :

Sous-zone dans laquelle se trouvent les services importés. Si la sous-zone est spécifiée, la zone doit également l'être.

chaîne de caractères

zone :

Zone dans laquelle les services importés sont situés. Si la zone est spécifiée, la région doit également l'être.

chaîne de caractères

Procédure

  1. Connectez-vous au CLI de OpenShift Container Platform en tant qu'utilisateur ayant le rôle cluster-admin et entrez la commande suivante :

    $ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
  2. Passez au projet dans lequel vous avez installé le plan de contrôle Service Mesh et entrez la commande suivante :

    oc project <smcp-system>

    Par exemple, green-mesh-system.

    $ oc project green-mesh-system
  3. Modifiez le fichier ImportedServiceSet, où <ImportedServiceSet.yaml> comprend le chemin d'accès complet au fichier que vous souhaitez modifier, en entrant la commande suivante :

    $ oc edit -n <smcp-system> -f <ImportedServiceSet.yaml>

    Par exemple, si vous souhaitez modifier le fichier qui importe du système à mailles rouges vers le système à mailles vertes, comme indiqué dans l'exemple précédent ImportedServiceSet.

    $ oc edit -n green-mesh-system -f import-from-red-mesh.yaml
  4. Modifier le fichier :

    1. Définir spec.importRules.importAsLocal à true.
    2. Définissez spec.locality comme étant region, zone, ou subzone.
    3. Enregistrez vos modifications.

1.18.13.2. Configuration d'une règle de destination pour le basculement

Créez une ressource DestinationRule qui configure les éléments suivants :

  • Détection des valeurs aberrantes pour le service. Cette fonction est nécessaire pour que le basculement fonctionne correctement. En particulier, elle configure les mandataires sidecar pour qu'ils sachent quand les points d'extrémité d'un service ne sont pas sains, ce qui déclenche éventuellement un basculement vers la localité suivante.
  • Politique de basculement entre les régions. Cela permet de s'assurer que le basculement au-delà d'une région se déroulera de manière prévisible.

Procédure

  1. Connectez-vous au CLI de OpenShift Container Platform en tant qu'utilisateur ayant le rôle cluster-admin. Entrez la commande suivante. Saisissez ensuite votre nom d'utilisateur et votre mot de passe lorsque vous y êtes invité.

    $ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
  2. Passez au projet dans lequel vous avez installé le plan de contrôle Service Mesh.

    oc project <smcp-system>

    Par exemple, green-mesh-system.

    $ oc project green-mesh-system
  3. Créez un fichier DestinationRule basé sur l'exemple suivant où, si green-mesh est indisponible, le trafic doit être acheminé depuis green-mesh dans la région us-east vers red-mesh dans us-west.

    Exemple DestinationRule

    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: default-failover
      namespace: info
    spec:
      host: "ratings.info.svc.cluster.local"
      trafficPolicy:
        loadBalancer:
          localityLbSetting:
            enabled: true
            failover:
              - from: us-east
                to: us-west
        outlierDetection:
          consecutive5xxErrors: 3
          interval: 10s
          baseEjectionTime: 1m

  4. Déployez le fichier DestinationRule, où <DestinationRule> comprend le chemin complet de votre fichier, en entrant la commande suivante :

    oc create -n <application namespace> -f <DestinationRule.yaml>

    Par exemple :

    $ oc create -n info -f green-mesh-us-west-DestinationRule.yaml

1.18.14. Supprimer un service du maillage fédéré

Si vous devez supprimer un service du maillage fédéré, par exemple s'il est devenu obsolète ou s'il a été remplacé par un autre service, vous pouvez le faire.

1.18.14.1. Pour supprimer un service d'une seule maille

Supprimer l'entrée du service de la ressource ImportedServiceSet pour l'homologue maillé qui ne doit plus accéder au service.

1.18.14.2. Pour supprimer un service de l'ensemble du maillage fédéré

Supprimer l'entrée du service de la ressource ExportedServiceSet pour la maille qui possède le service.

1.18.15. Supprimer une maille du maillage fédéré

Si vous devez retirer une maille de la fédération, vous pouvez le faire.

  1. Modifier la ressource ServiceMeshControlPlane de la maille supprimée pour supprimer toutes les passerelles d'entrée de fédération pour les mailles homologues.
  2. Pour chaque pair de maillage avec lequel le maillage supprimé a été fédéré :

    1. Supprimer la ressource ServiceMeshPeer qui relie les deux mailles.
    2. Modifiez la ressource ServiceMeshControlPlane de la maille homologue pour supprimer la passerelle de sortie qui dessert la maille supprimée.
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.