Service Mesh (ASM) propose deux CustomResourceDefinitions (CRD) pour la gestion des couloirs de trafic : ASMSwimLaneGroup et ASMSwimLane. Ces ressources vous permettent d'isoler des versions spécifiques de services ou des services présentant certaines caractéristiques dans des environnements d'exécution indépendants, appelés couloirs de trafic, puis d'acheminer les requêtes correspondantes vers ces versions.
Fonctionnement conjoint de ces CRD
Une ressource ASMSwimLaneGroup définit ce qu'il faut isoler : les services participant aux couloirs de trafic ainsi que la passerelle d'entrée qui leur achemine les requêtes. Une ressource ASMSwimLane définit comment isoler : quelles versions de pods appartiennent à un couloir et quelles règles de routage s'appliquent.
La relation entre ces ressources est la suivante :
Une ressource ASMSwimLaneGroup regroupe plusieurs services et spécifie une passerelle d'entrée partagée.
Plusieurs ressources ASMSwimLane sont associées à ce groupe via le libellé
swimlane-group: <group-name>. Chaque couloir cible une version spécifique des services regroupés.
ASM prend en charge deux modes de couloir :
Mode strict (
isPermissive: falseou non défini) : chaque couloir doit contenir tous les services définis dans le groupe.Mode permissif (
isPermissive: true) : les couloirs peuvent contenir un sous-ensemble des services du groupe. Les requêtes destinées aux services absents d'un couloir basculent vers un couloir de base.
Champs ASMSwimLaneGroup
ASMSwimLaneGroup définit un groupe de couloirs de trafic, c'est-à-dire la configuration partagée pour les services et le routage d'entrée au sein de plusieurs couloirs.
ASMSwimLaneGroupSpec
La section spec constitue la configuration principale.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
services |
ClusterServiceRef[] | Oui | Services d'un cluster Kubernetes participant aux couloirs de trafic. |
ingress |
SwimLaneGroupIngressConfiguration | Oui | Configuration de la passerelle d'entrée pour l'acheminement des requêtes vers différentes versions de service. |
isPermissive |
bool | Non | Mode du groupe de couloirs. true : mode permissif. false ou non défini : mode strict. Pour plus d'informations, consultez la rubrique Présentation des couloirs de trafic. |
permissiveModeConfiguration |
PermissiveSwimLaneGroupConfiguration | Non | Paramètres du mode permissif. Requis lorsque isPermissive est défini sur true. |
ClusterServiceRef
Référence un service Kubernetes participant aux couloirs de trafic.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
name |
string | Oui | Nom du service Kubernetes. |
namespace |
string | Oui | Namespace du service Kubernetes. |
cluster |
ClusterRef | Non | Référence au cluster Kubernetes. Utilisez ce champ lorsque l'instance ASM gère plusieurs clusters. |
ClusterRef
Identifie un cluster Kubernetes ajouté à l'instance ASM.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
name |
string | Non | Nom affiché du cluster Kubernetes. |
id |
string | Non | ID du cluster Kubernetes. |
SwimLaneGroupIngressConfiguration
Configure la passerelle d'entrée qui achemine les requêtes vers les services du groupe de couloirs.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
gateway | SwimLaneGatewayConfiguration | Oui | Passerelle Istio associée à la passerelle d'entrée. |
ingressRouting | SwimLaneGroupIngressRouteConfiguration | Non | Stratégie de routage des requêtes pour le groupe de couloirs. Remarque Requiert ASM v1.21.6.92 ou version ultérieure. |
SwimLaneGatewayConfiguration
Spécifie la passerelle Istio associée à la passerelle d'entrée.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
name | string | Oui | Nom de la passerelle Istio. |
namespace | string | Oui | Namespace de la passerelle Istio. |
type | string | Oui | Type de la passerelle Istio. Définissez cette valeur sur ASM, ce qui indique une passerelle Istio fournie par ASM. |
SwimLaneGroupIngressRouteConfiguration
Définit la stratégie de routage des requêtes pour le groupe de couloirs.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
ingressRoutingStrategy |
string | Non | Stratégie de routage. Valeurs valides : rule_based (par défaut) : chaque couloir définit ses propres règles de routage via ingressRules. weighted : les requêtes sont réparties entre les couloirs selon un poids, en utilisant une règle de routage partagée. |
weightedRoutingRule |
WeightedSwimLaneIngressConfiguration | Non | Règle unifiée de correspondance des requêtes pour le routage pondéré. Prend effet uniquement lorsque ingressRoutingStrategy est défini sur weighted. |
WeightedSwimLaneIngressConfiguration
Définit la règle unifiée de correspondance des requêtes utilisée avec le routage pondéré.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
hosts |
[]string | Oui | Hôtes à faire correspondre. Doivent être déclarés dans la passerelle Istio associée au groupe de couloirs. |
requestMatches |
SwimLaneIngressRequestMatch | Non | Conditions de correspondance pour l'URI et les en-têtes. |
PermissiveSwimLaneGroupConfiguration
Configure le mode permissif pour un groupe de couloirs de trafic. Obligatoire lorsque isPermissive est défini sur true.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
routeHeader |
string | Oui | En-tête de requête déterminant le couloir auquel appartient une requête lors de son parcours dans la chaîne d'appels. Les requêtes entrant par la passerelle d'entrée doivent porter cet en-tête. |
traceHeader |
string | Oui | En-tête de traçage de bout en bout (E2E) qui se propage tout au long de la chaîne d'appels. Doit être unique par requête lorsqu'il diffère de routeHeader. Exemple : x-b3-trace-id. |
fallbackTarget |
string | Non | Nom du couloir de base. Lorsqu'une requête ne peut pas atteindre la version cible du service dans son couloir désigné, elle bascule vers le même service dans ce couloir de base. |
Champs ASMSwimLane
ASMSwimLane définit un couloir de trafic unique, c'est-à-dire un ensemble de versions de services isolées conjointement. Associez un couloir à un groupe de couloirs en ajoutant le libellé swimlane-group: <group-name> à la ressource ASMSwimLane.
ASMSwimLaneSpec
La section spec constitue la configuration principale.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
labelSelector |
map |
Oui | Libellés utilisés pour faire correspondre les pods des services inclus dans ce couloir. Utilise généralement des libellés de version, tels que version: v1. |
services |
ClusterServiceRef[] | Non | Services déployés dans ce couloir. En mode strict, omettez ce champ : chaque couloir doit inclure tous les services du groupe. En mode permissif, spécifiez les services présents dans ce couloir. La liste doit être un sous-ensemble du champ services du groupe. Les requêtes destinées aux services absents de ce couloir sont transférées vers le couloir de base. |
ingressRules |
SwimLaneIngressRule[] | Non | Règles de routage qu'ASM convertit automatiquement en un service virtuel pour la passerelle d'entrée. Si omises, vous devez créer manuellement un service virtuel. |
ingressWeight |
SwimLaneIngressWeight | Non | Poids de routage pour ce couloir lorsque le groupe utilise le routage pondéré (ingressRoutingStrategy: weighted). |
SwimLaneIngressRule
Définit une règle de routage pour la passerelle d'entrée. ASM convertit chaque règle en une partie d'un service virtuel.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
online |
bool | Oui | Indique si cette règle est active. Le service virtuel n'est généré que si cette valeur est définie sur true. |
hosts |
string[] | Oui | Hôtes à faire correspondre. Correspond au champ hosts du service virtuel généré. |
name |
string | Non | Nom de cette règle de routage. Correspond au champ name sous http dans le service virtuel généré. |
match |
SwimLaneIngressRequestMatch | Non | Conditions de correspondance des requêtes. Correspond au champ match sous http dans le service virtuel généré. |
route |
SwimLaneIngressRoute | Oui | Service de destination pour les requêtes correspondantes. Correspond au champ route sous http dans le service virtuel généré. |
SwimLaneIngressWeight
Spécifie le poids de routage d'un couloir lorsque le routage pondéré est utilisé.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
weight |
int | Non | Poids de routage pour ce couloir. La valeur par défaut est 0. ASM utilise les poids de tous les couloirs pour calculer le ratio de distribution des requêtes. |
destination |
RouteDestination | Oui | Service de destination pour le routage pondéré. |
SwimLaneIngressRequestMatch
Définit les conditions de correspondance des requêtes par URI ou par en-têtes.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
uri |
StringMatch | Non | Condition de correspondance de l'URI. Prend en charge exact, prefix et regex (syntaxe RE2). |
headers |
map |
Non | Conditions de correspondance des en-têtes. Les clés correspondent aux noms d'en-têtes en minuscules avec des traits d'union (par exemple, x-request-id). Les valeurs définissent le type de correspondance. |
StringMatch
Définit la méthode de correspondance d'une valeur de chaîne. Spécifiez exactement un champ.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
exact |
string | Non | Correspondance exacte de la chaîne. |
prefix |
string | Non | Correspondance par préfixe. |
regex |
string | Non | Correspondance par expression régulière RE2. Consultez la rubrique Syntaxe RE2. |
SwimLaneIngressRoute
Spécifie le service de destination pour les requêtes correspondantes.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
destination |
RouteDestination | Oui | Service de destination. |
RouteDestination
Identifie le service Kubernetes cible.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
host | string | Oui | Nom de domaine complet (FQDN) du service Kubernetes. Exemple : mocka.default.svc.cluster.local. |
portNum | int | Non | Numéro de port du service. Exemple : 8000. Remarque Requiert ASM v1.21.4.104 ou version ultérieure. |
Rubriques connexes
Présentation des couloirs de trafic : concepts, cas d'utilisation et comparaison entre les modes strict et permissif.
Utiliser les couloirs de trafic en mode strict pour gérer le trafic de bout en bout
Utiliser les couloirs de trafic en mode permissif pour gérer le trafic de bout en bout