ALB Ingress prend en charge les règles de transfert personnalisées. Une règle de transfert se compose de conditions et d'actions de transfert. Vous pouvez définir des conditions de transfert personnalisées en fonction du nom de domaine, du chemin d'accès, de l'en-tête de requête, de la chaîne de requête, de la méthode de requête, du cookie ou de l'adresse IP source. Vous pouvez également définir des actions de transfert personnalisées, telles que le renvoi d'une réponse fixe, la création d'une redirection, l'insertion ou la suppression d'un en-tête de requête, la mise en miroir du trafic, le transfert des requêtes vers plusieurs groupes de serveurs principaux ou la réécriture des requêtes. Configurez ces règles de transfert personnalisées dans la console ou en ajoutant des annotations à une ressource Ingress.
Prérequis
Le composant ALB Ingress Controller doit être installé et sa version doit être égale ou supérieure à la v2.5.0. Pour plus d'informations, consultez Gérer les composants.
Conditions de transfert
Une règle de transfert peut contenir au maximum 10 conditions.
Les conditions de transfert
ResponseHeaderetResponseStatusCodesont valides uniquement pour les règles de transfert basées sur la réponse.
Conditions de transfert
ALB Ingress permet de configurer des conditions de transfert via l'annotation alb.ingress.kubernetes.io/conditions.<service-name>. Les différents blocs de règles de routage entretiennent une relation logique ET (AND), tandis que les valeurs au sein d'un même bloc obéissent à une logique OU (OR). Par exemple, deux blocs de règles Header distincts sont liés par un ET logique, mais les valeurs spécifiées dans un même bloc Header sont évaluées selon un OU logique. Voici le détail des règles de routage.
Condition de transfert | Description |
Nom de domaine | Achemine les requêtes en fonction d'une correspondance avec le nom de domaine. Voici un exemple.
|
Chemin d'accès | Achemine les requêtes en fonction d'une correspondance avec le chemin d'accès. Voici un exemple.
|
En-tête | Achemine les requêtes en fonction d'une correspondance avec l'en-tête de requête. Voici un exemple.
|
Chaîne de requête | Achemine les requêtes en fonction d'une correspondance avec la chaîne de requête. Voici un exemple.
Pour un cas d'utilisation et un exemple, consultez Cas d'utilisation 3 : Acheminer le trafic en fonction de la chaîne de requête, de plusieurs en-têtes et de plusieurs chemins d'accès. |
Méthode de requête | Achemine les requêtes en fonction d'une correspondance avec la méthode de requête. Voici un exemple.
|
Cookie | Achemine les requêtes en fonction d'une correspondance avec le cookie. Voici un exemple.
Pour un cas d'utilisation et un exemple, consultez Cas d'utilisation 2 : Acheminer le trafic en fonction du nom de domaine, de la méthode de requête et du cookie. |
Adresse IP source | Achemine les requêtes en fonction d'une correspondance avec l'adresse IP source. Voici un exemple.
Pour un cas d'utilisation et un exemple, consultez Cas d'utilisation 1 : Acheminer le trafic en fonction de l'adresse IP source et de l'en-tête. |
En-tête de réponse | Fait correspondre l'en-tête de réponse et exécute l'action de transfert uniquement sur les réponses contenant l'en-tête correct. Notez que cette option doit être utilisée conjointement avec l'annotation
|
Code d'état de la réponse | Fait correspondre le code d'état de la réponse. Le service est accessible uniquement si le code d'état correct est renvoyé. Notez que cette fonctionnalité doit être utilisée avec une action de transfert orientée réponse et l'annotation de règle de transfert orientée réponse
|
Cas d'utilisation 1 : Routage par adresse IP source et en-tête
Vous pouvez spécifier au maximum cinq conditions source IP dans une seule règle de transfert.
Ce fichier YAML définit un Ingress qui achemine les requêtes uniquement lorsque l'adresse IP source, l'en-tête et le chemin d'accès correspondent aux conditions spécifiées.
Si l'adresse IP source d'une requête provient de 192.168.0.0/16 ou 172.16.0.0/16, si l'en-tête de requête contient gray-hello avec la valeur value1 ou value2, et si le chemin d'accès de la requête est /hello, alors la requête est acheminée vers le service gray-hello-svc. Dans le cas contraire, la requête est acheminée vers d'autres services.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "1"
alb.ingress.kubernetes.io/conditions.gray-hello-svc: | # The service name must match a backend service name in spec.rules. These conditions apply to that service.
[{
"type": "Header",
"headerConfig": {
"key":"gray-hello",
"values": [
"value1",
"value2"
]
}
},
{
"type": "SourceIp",
"sourceIpConfig": {
"values": [
"192.168.0.0/16",
"172.16.0.0/16"
]
}
}]
name: gray-hello-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
pathType: ImplementationSpecific
backend:
service:
name: gray-hello-svc # This backend service name must match the name in the `conditions` annotation for those conditions to apply.
port:
number: 88
alb.ingress.kubernetes.io/order : spécifie la priorité de l'Ingress. Plus le nombre est petit, plus la priorité est élevée.
Cas d'utilisation 2 : Routage par domaine, méthode et cookie
Ce fichier YAML définit un Ingress qui achemine les requêtes uniquement lorsque le nom de domaine, la méthode de requête et le cookie correspondent aux conditions spécifiées.
Cela signifie qu'une requête est acheminée vers le service-a uniquement si la méthode de requête est GET ou HEAD, si l'hôte de la requête est example.com ou *.edu, si le cookie de la requête possède la clé cookiekey1 et la valeur cookievalue1, et si le chemin d'accès de la requête est /test. Dans le cas contraire, la requête est acheminée vers le service-b.
Les règles de transfert pour les noms de domaine prennent en charge les caractères génériques.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: | # The service name must match a backend service name in spec.rules. These conditions apply to that service.
[{
"type": "Cookie",
"cookieConfig": {
"values": [
{
"key":"cookiekey1",
"value":"cookievalue1"
}
]
}
},
{
"type": "Method",
"methodConfig": {
"values": [
"GET",
"HEAD"
]
}
},
{
"type": "Host",
"hostConfig": {
"values": [
"example.com",
"*.edu"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a # This backend service name must match the name in the `conditions` annotation for those conditions to apply.
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88
Cas d'utilisation 3 : Routage par chaîne de requête, en-tête et chemin d'accès
Ce fichier YAML définit un Ingress qui achemine les requêtes uniquement lorsque la chaîne de requête, les en-têtes et le chemin d'accès correspondent aux conditions spécifiées.
Cela signifie qu'une requête est acheminée vers le service service-a si le chemin d'accès de la requête est /pathvalue1, /pathvalue2 ou /test, si la chaîne de requête possède la clé querystringkey1 et la valeur querystringvalue2, et si l'en-tête de requête doit contenir headerkey1 et headerkey2. De plus, pour l'en-tête de requête contenant headerkey1, la valeur doit être headervalue1 ou headervalue2, et pour l'en-tête de requête contenant headerkey2, la valeur doit être headervalue3 ou headervalue4. Dans le cas contraire, la requête est acheminée vers le service service-b.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: | # The service name must match a backend service name in spec.rules. These conditions apply to that service.
[{
"type": "Path",
"pathConfig": {
"values": [
"/pathvalue1",
"/pathvalue2"
]
}
},
{
"type": "QueryString",
"queryStringConfig": {
"values": [
{
"key":"querystringkey1",
"value":"querystringvalue2"
}
]
}
},
{
"type": "Header",
"headerConfig": {
"key":"headerkey1",
"values": [
"headervalue1",
"headervalue2"
]
}
},
{
"type": "Header",
"headerConfig": {
"key":"headerkey2",
"values": [
"headervalue3",
"headervalue4"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a # This backend service name must match the name in the `conditions` annotation for those conditions to apply.
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88
Actions de transfert
Actions de transfert
ALB Ingress vous permet de configurer des actions de transfert pour les requêtes et les réponses à l'aide de l'annotation alb.ingress.kubernetes.io/actions.<service-name>. Les actions prises en charge incluent le renvoi d'une réponse fixe, la redirection, l'insertion ou la suppression d'un en-tête, la mise en miroir du trafic, le transfert vers plusieurs groupes de serveurs backend et la réécriture des requêtes. En définissant ces actions de transfert, vous pouvez gérer avec flexibilité la façon dont les requêtes et les réponses sont traitées dans votre ALB Ingress.
Pour l'annotation
alb.ingress.kubernetes.io/actions.<service-name>, assurez-vous que le nom du service indiqué dans l'annotation correspond au nom du service sousbackenddans le champrule.N'utilisez qu'une seule action de transfert terminal, telle qu'une redirection, une réponse fixe ou un transfert vers plusieurs groupes de serveurs, dans la même règle de transfert.
Lorsque vous configurez une redirection, une réponse fixe ou un transfert vers plusieurs groupes de serveurs, vous devez définir
backend.service.port.namesuruse-annotation.
Actions de transfert de requête
Action | Description |
Réponse fixe | Envoie une réponse fixe au client depuis l'Application Load Balancer (ALB). Vous pouvez définir le code d'état de la réponse, le contenu et le type de contenu. Le code suivant fournit un exemple.
Pour un cas d'utilisation et un exemple, consultez Cas d'utilisation 1 : Définir une réponse fixe. |
Redirection | Redirige le client vers une adresse différente à l'aide d'un code d'état HTTP 3xx. Le code suivant fournit un exemple.
Important Vous pouvez configurer les paramètres host, path, port, protocol et query pour utiliser les valeurs de la requête d'origine, mais au moins l'un d'entre eux doit être défini sur une valeur non par défaut. Par exemple, si vous définissez host sur Pour un cas d'utilisation et un exemple, consultez Cas d'utilisation 2 : Utiliser une redirection 301. |
Mise en miroir du trafic | Copie la requête et la transfère vers un groupe de serveurs de mise en miroir du trafic. Vous devez spécifier l'ID du groupe de serveurs. Le code suivant fournit un exemple. Important
Pour un cas d'utilisation et un exemple, consultez Cas d'utilisation 4 : Mettre en miroir le trafic. |
Transfert vers plusieurs groupes de serveurs backend | Transfère les requêtes ALB vers plusieurs groupes de serveurs backend. Vous pouvez spécifier les groupes de serveurs backend à l'aide de ServerGroupID, ou créer ou joindre des groupes de serveurs à l'aide de ServiceName+ServicePort. Vous pouvez également définir un poids de transfert pour chaque groupe de serveurs backend et activer la persistance de session entre les groupes de serveurs. Important
Pour un cas d'utilisation et un exemple, consultez Cas d'utilisation 5 : Transférer vers plusieurs groupes de serveurs. |
Réécriture | Réécrit la requête avant de la transférer au backend. L'Application Load Balancer (ALB) peut modifier l'hôte, le chemin et la chaîne de requête de la requête. Important
Important Les paramètres host, path et query peuvent être configurés pour utiliser les valeurs de la requête d'origine. Cependant, au moins l'un de ces paramètres doit être défini sur une valeur autre que la valeur par défaut. Par exemple, si vous définissez host sur Pour un cas d'utilisation et un exemple, consultez Cas d'utilisation 6 : Réécrire une requête. |
Insérer un en-tête | Définit le nom et le contenu du champ d'en-tête. Cela écrase tout en-tête existant portant le même nom dans la requête. Le code suivant fournit un exemple.
Pour un cas d'utilisation et un exemple, consultez Cas d'utilisation 3 : Insérer un en-tête de requête. |
Supprimer un en-tête | Supprime un en-tête de la requête. Le code suivant fournit un exemple. type : le type d'action de transfert. Définissez cette valeur sur RemoveHeader pour supprimer un en-tête de requête. key : le nom du champ d'en-tête à supprimer. |
Limitation QPS | Cette action limite le taux de requêtes en requêtes par seconde (QPS). Vous pouvez configurer une limite globale et une limite distincte pour chaque IP source cliente. Le code suivant fournit un exemple de configuration : Important
|
Actions de transfert de réponse
Action | Description |
Insérer un en-tête | Lorsqu'elle est appliquée à une règle de réponse, cette action définit un champ d'en-tête et sa valeur dans la réponse. Cela écrase tout en-tête de réponse existant portant le même nom. Le code suivant fournit un exemple.
Pour des cas d'utilisation et des exemples de modification des en-têtes de réponse, consultez Cas d'utilisation 7 : Modifier les en-têtes de réponse et Cas d'utilisation 8 : Modifier les en-têtes de réponse par code d'état. |
Supprimer un en-tête | Lorsqu'elle est appliquée à une règle de réponse, cette action supprime un en-tête de la réponse. Le code suivant fournit un exemple. type : le type d'action de transfert. Définissez cette valeur sur key : le nom du champ d'en-tête à supprimer. |
Cas d'utilisation 1 : Définir une réponse fixe
Console
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, sélectionnez .
-
Sur la page Ingresses, cliquez sur Create Ingress. Dans la boîte de dialogue Create Ingress, configurez l'Ingress.
Parameter
Description
Example
Gateway Type
Vous pouvez sélectionner ALB Ingress, MSE Ingress ou Nginx Ingress selon vos besoins.
Pour plus d'informations sur les différences entre ces types de passerelles, consultez la rubrique Comparison of Nginx Ingress, ALB Ingress, and MSE Ingress.
ALB Ingress
Name
Un nom personnalisé pour l'Ingress.
ingress
Ingress Class
Le nom de la classe Ingress associée.
alb
Rules
Cliquez sur + Add Rule pour ajouter des règles de routage.
Host : un hôte personnalisé.
Mappings : configurez les paramètres suivants.
Match type :
Prefix match : fait correspondre le préfixe du chemin d'URL de la requête.
Exact match : effectue une correspondance exacte avec le chemin d'URL de la requête.
ImplementationSpecific (Default Value) : le comportement dépend de l'implémentation du contrôleur Ingress. Pour ALB Ingress, cela correspond par défaut à une correspondance exacte.
Service : sélectionnez le service cible, qui est un Service Kubernetes.
Port : sélectionnez le port exposé par le service.
Un Ingress prend en charge plusieurs chemins sous le même hôte. Cliquez sur + Add pour ajouter un chemin.
Host : laissez vide.
Mappings :
Path : /
Match type : Prefix match
Service : response-503
Port : 80
Custom Forwarding Rules
Configurez des règles de transfert personnalisées pour une gestion fine du trafic.
RemarqueUne règle de transfert peut comporter au maximum 10 conditions.
Dans la liste déroulante Add Condition, sélectionnez une option.
Host :
Fait correspondre l'hôte de la requête. Si vous spécifiez plusieurs hôtes, ils sont évalués selon une logique
OR. Une fois ce paramètre défini, l'annotationalb.ingress.kubernetes.io/conditions.host-exampleest ajoutée.Path :
Fait correspondre le chemin de la requête. Si vous spécifiez plusieurs chemins, ils sont évalués selon une logique
OR. Une fois ce paramètre défini, l'annotationalb.ingress.kubernetes.io/conditions.path-exampleest ajoutée.HTTP Header :
Fait correspondre les informations d'en-tête de la requête sous forme de paire clé-valeur. Par exemple, définissez Key sur
headernameet Value surheadervalue1. Si vous spécifiez plusieurs valeurs d'en-tête, elles sont évaluées selon une logiqueOR. Une fois ce paramètre défini, l'annotationalb.ingress.kubernetes.io/conditions.http-header-exampleest ajoutée.
Dans la liste déroulante Action, sélectionnez une option.
Return Fixed Response
Renvoie une réponse fixe au client via l'ALB. Vous pouvez configurer le code d'état de la réponse, le contenu et le type de contenu. Configurez Response Status Code, Response Content Type (Optional) et Response Content (Optional) selon vos besoins.
Response Content Type :
text/plain : un type de contenu texte brut.
text/css : un type de contenu CSS.
text/html : un type de contenu HTML.
application/javascript : un type de contenu JavaScript.
application/json : un type de contenu JSON.
Add Condition : sélectionnez Path. (Conservez la valeur par défaut)
Action : Return Fixed Response
Response Status Code : 503
Response Content Type (Optional) : text/plain
Response Content (Optional) : error
Conservez les valeurs par défaut pour les autres paramètres.
Une fois la configuration terminée, cliquez sur OK.
Kubectl
L'extrait YAML suivant illustre comment renvoyer un code d'état 503 et le texte 503 error text lorsqu'une requête est adressée au service.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.service-name: | # Note: The "service-name" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "FixedResponse",
"FixedResponseConfig": {
"contentType": "text/plain",
"httpCode": "503",
"content": "503 error text"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-name # Note: The name of the backend service must match "service-name" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Cas d'utilisation 2 : Utiliser une redirection 301
Cet exemple YAML montre comment rediriger les requêtes vers le port HTTPS du service.
Redirection
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.redirect: | # Note: The "redirect" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "Redirect",
"RedirectConfig": {
"host": "demo.domain.ingress.top",
"path": "/test",
"port": "443",
"protocol": "https",
"query": "querystring",
"httpCode": "301"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: redirect # Note: The name of the backend service must match "redirect" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Multiple redirections
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: |
[{"HTTP": 8001}]
alb.ingress.kubernetes.io/actions.redirect-1: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "demo.domain.ingress.top",
"path": "/test",
"port": "443",
"protocol": "https",
"query": "querystring",
"httpCode": "301"
}
}]
alb.ingress.kubernetes.io/actions.redirect-2: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "demo.domain.ingress.top",
"path": "/test",
"port": "443",
"protocol": "https",
"httpCode": "301"
}
}]
spec:
ingressClassName: ml-test-ingressclass-rolechain-2
rules:
- http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: redirect-1
port:
name: use-annotation
- path: /bar
pathType: Prefix
backend:
service:
name: redirect-2
port:
name: use-annotation
Cas d'utilisation 3 : Insérer un en-tête de requête
Cet exemple YAML montre comment ajouter ou remplacer l'en-tête de requête par source: alibaba.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.insert-header: | # Note: The "insert-header" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: insert-header # Note: The name of the backend service must match "insert-header" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
number: 80
Cas d'utilisation 4 : Répliquer le trafic
L'extrait YAML suivant illustre comment répliquer le trafic vers un groupe de serveurs.
Connectez-vous à la console Application Load Balancer (ALB). Dans le volet de navigation de gauche, choisissez . Sur la page Server Groups, récupérez l'ID du groupe de serveurs.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traffic-mirror-ingress
annotations:
# The mirror-svc must be one of the backend.service names specified below.
# ALB Ingress mirrors traffic that is forwarded to mirror-svc to the backend server specified by "ServerGroupID".
# To configure traffic mirroring for multiple services, add a separate annotation for each service.
alb.ingress.kubernetes.io/actions.mirror-svc: | # Note: The "mirror-svc" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "TrafficMirror",
"TrafficMirrorConfig": {
"TargetType" : "ForwardGroupMirror",
"MirrorGroupConfig": {
"ServerGroupTuples" : [{
"ServerGroupID": "sgp-2auud2fxj1r46*****"
}]
}
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: mirror-svc # Note: The name of the backend service must match "mirror-svc" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
number: 80
Cas d'utilisation 5 : Transfert vers plusieurs groupes de serveurs
Console
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
-
Sur la page Ingresses, cliquez sur Create Ingress. Dans la boîte de dialogue Create Ingress, configurez l'Ingress.
Paramètre
Description
Exemple
Type de passerelle
Vous pouvez sélectionner ALB Ingress, MSE Ingress ou Nginx Ingress selon vos besoins.
Pour plus d'informations sur les différences entre ces types de passerelles, consultez la rubrique Comparaison de Nginx Ingress, ALB Ingress et MSE Ingress.
ALB Ingress
Nom
Un nom personnalisé pour l'Ingress.
forward-ingress
Classe Ingress
Le nom de la classe Ingress associée.
alb
Règles
Cliquez sur + Add Rule pour ajouter des règles de routage.
Host : un hôte personnalisé.
Mappings : configurez les paramètres suivants.
Match type :
Prefix match : correspond au préfixe du chemin d'URL de la requête.
Exact match : effectue une correspondance exacte avec le chemin d'URL de la requête.
ImplementationSpecific (Default Value) : dépend de la logique implémentée par le contrôleur Ingress. ALB Ingress utilise la logique de correspondance exacte.
Service : sélectionnez le service cible, qui est un service Kubernetes.
Port : sélectionnez le port exposé par le service.
Un Ingress prend en charge plusieurs chemins sous le même hôte. Cliquez sur + Add pour ajouter un chemin.
Host : demo.domain.ingress.top
Mappings :
Path : /path
Match type : Prefix match
Service : forward
Port : 80
Custom Forwarding Rules
Activez les règles de transfert personnalisées pour gérer le trafic entrant avec un contrôle granulaire.
RemarqueUne règle de transfert peut comporter au maximum 10 conditions.
Dans la liste déroulante Add Condition, sélectionnez une option.
Host :
Correspond à l'hôte de la requête. Si vous spécifiez plusieurs hôtes, ils sont évalués selon une logique
OR. Une fois ce paramètre défini, l'annotationalb.ingress.kubernetes.io/conditions.host-exampleest ajoutée.Path :
Correspond au chemin de la requête. Si vous spécifiez plusieurs chemins, ils sont évalués selon une logique
OR. Une fois ce paramètre défini, l'annotationalb.ingress.kubernetes.io/conditions.path-exampleest ajoutée.HTTP Header :
Correspond aux informations d'en-tête de la requête sous forme de paire clé-valeur. Par exemple, définissez Key sur
headernameet Value surheadervalue1. Si vous spécifiez plusieurs valeurs d'en-tête, elles sont évaluées selon une logiqueOR. Une fois ce paramètre défini, l'annotationalb.ingress.kubernetes.io/conditions.http-header-exampleest ajoutée.
Dans la liste déroulante Action, sélectionnez une option.
Forward To
Transfère les requêtes vers plusieurs groupes de serveurs backend. Dans le champ Service Name, sélectionnez le service cible. Dans le champ Port, sélectionnez le numéro de port cible. Configurez ensuite une valeur de pondération personnalisée.
RemarqueLes services ClusterIP ne sont pas pris en charge pour les clusters utilisant le plug-in réseau Flannel.
Lorsque vous sélectionnez Forward To, vous n'avez pas besoin de configurer les mappages de chemin dans la règle.
Add Condition : sélectionnez Host. Host : demo.domain.ingress.top
Action : Forward To
Service Name : tea-svc
Port : 80
Configure weight : 80
Add Service
Service Name : coffee-svc
Port : 80
Configure weight : 20
Conservez les valeurs par défaut pour les autres paramètres.
Une fois la configuration terminée, cliquez sur OK dans le coin inférieur gauche de la page Create Ingress.
Kubectl
Le fichier YAML suivant montre comment transférer une requête vers plusieurs services au sein du cluster.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: forward-ingress
annotations:
# The service in the annotation must exist in the cluster, and its name must match the service name under backend in the rule field.
alb.ingress.kubernetes.io/actions.service-name: | # Note: The "service-name" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "ForwardGroup",
"ForwardConfig": {
"ServerGroups" : [{
"ServiceName": "tea-svc",
"Weight": 80,
"ServicePort": 80
},
{
"ServiceName": "coffee-svc",
"Weight": 20,
"ServicePort": 80
}]
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /path
pathType: Prefix
backend:
service:
name: service-name # Note: The name of the backend service must match "service-name" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Cas d'utilisation 6 : Réécriture d'une requête
Une réécriture modifie l'URL d'une requête avant qu'elle ne soit transférée à un serveur backend. ALB Ingress peut modifier l'hôte, le chemin et la chaîne de requête, ce qui s'avère utile pour simplifier les URL, effectuer des redirections transparentes pour le client et masquer les détails d'implémentation du backend. Dans l'exemple suivant, une réécriture est configurée à l'aide de l'annotation alb.ingress.kubernetes.io/actions.service-name.
Par exemple, si un client accède à https://example.com/api/users, la réécriture modifie l'URL en https://example.org/users tout en conservant la chaîne de requête d'origine.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/actions.service-name: | # The "service-name" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "Rewrite",
"RewriteConfig": {
"Host": "example.org",
"Path": "/users",
"Query": "${query}" # ${query} indicates that the original request query string is used.
}
}]
spec:
ingressClassName: alb
rules:
- host: example.com
http:
paths:
- path: /api/users
pathType: ImplementationSpecific
backend:
service:
name: service-name # The name of the backend service must match "service-name" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
number: 80
Cas d'utilisation 7 : Modification des en-têtes de réponse
Par défaut, les règles de transfert ALB Ingress s'appliquent aux requêtes. Pour appliquer une règle à une réponse, vous devez définir l'annotation
alb.ingress.kubernetes.io/rule-direction.<service-name>surResponse.Lorsque vous créez une règle de transfert pour les réponses, vous devez définir
backend.service.port.namesuruse-annotation.
Le bloc de code suivant définit que lorsque ResponseHeader correspond, c'est-à-dire que l'en-tête contient response-hello avec une valeur de value1 ou value2, un nouvel en-tête de requête source: alibaba est inséré.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-header: Response
alb.ingress.kubernetes.io/conditions.response-header: | # Note: The "response-header" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding condition applies to that backend service.
[{
"type": "ResponseHeader",
"responseHeaderConfig": {
"key": "response-hello",
"values": [
"value1",
"value2"
]
}
}]
alb.ingress.kubernetes.io/actions.response-header: | # Note: The "response-header" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
name: response-header
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: response-header # Note: The name of the backend service must match "response-header" in the custom forwarding condition and action annotations. The configured conditions and actions apply to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Cas d'utilisation 8 : Modification des en-têtes de réponse par code d'état
Par défaut, les règles de transfert ALB Ingress s'appliquent aux requêtes. Pour appliquer une règle à une réponse, vous devez définir l'annotation
alb.ingress.kubernetes.io/rule-direction.<service-name>surResponse.Lorsque vous créez une règle de transfert pour les réponses, vous devez définir
backend.service.port.namesuruse-annotation.
Cet exemple YAML supprime l'en-tête response-hello de la réponse si le code d'état de la réponse est 200 ou 300.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-hello: Response
alb.ingress.kubernetes.io/conditions.response-hello: | # Note: The "response-hello" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding condition applies to that backend service.
[{
"type": "ResponseStatusCode",
"responseStatusCodeConfig": {
"values": [
"200",
"300"
]
}
}]
alb.ingress.kubernetes.io/actions.response-hello: | # Note: The "response-hello" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "RemoveHeader",
"RemoveHeaderConfig": {
"key": "response-hello"
}
}]
name: response-hello
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: response-hello # Note: The name of the backend service must match "response-hello" in the custom forwarding condition and action annotations. The configured conditions and actions apply to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Conditions et actions de transfert
Cas d'utilisation 1 : Transfert du trafic en fonction d'un nom de domaine
Cette section explique comment configurer les conditions et les actions de transfert basées sur un nom de domaine dans la console ACK afin d'acheminer le trafic vers un service spécifique.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, sélectionnez .
-
Sur la page Ingresses, cliquez sur Create Ingress. Dans la boîte de dialogue Create Ingress, configurez l'Ingress.
Paramètre
Description
Exemple
Gateway type
Vous pouvez sélectionner ALB Ingress, MSE Ingress ou Nginx Ingress selon vos besoins.
Pour plus d'informations sur les différences entre ces types de passerelles, consultez la rubrique Comparaison des Nginx Ingress, ALB Ingress et MSE Ingress.
ALB Ingress
Name
Un nom personnalisé pour l'Ingress.
alb_ingress
Ingress Class
Le nom de la classe Ingress associée.
alb
Rules
Cliquez sur + Add Rule pour ajouter une ou plusieurs règles de routage.
Domain name : Un nom de domaine personnalisé.
Mappings : Configurez les paramètres suivants.
Rule :
Prefix (prefix match) : Fait correspondre le préfixe du chemin URL de la requête.
Exact (exact match) : Fait correspondre exactement le chemin URL de la requête.
ImplementationSpecific (Default) : Le comportement dépend de l'implémentation du contrôleur Ingress. Pour ALB Ingress, cette option fonctionne comme une correspondance exacte.
Service name : Sélectionnez le service cible, qui est un Service Kubernetes.
Port : Sélectionnez le port exposé par le service.
Un Ingress prend en charge plusieurs chemins sous le même nom de domaine. Cliquez sur + Add Path pour ajouter d'autres chemins.
Domain name : *.example.com
Mappings :
Path : /tes
Rule : ImplementationSpecific
Service name : tea-svc
Port : 80
Custom forwarding rules
Définissez des règles de transfert personnalisées pour un contrôle granulaire du trafic entrant.
RemarqueUne règle de transfert peut comporter au maximum 10 conditions.
Dans la liste déroulante Condition, sélectionnez une option.
Domain name :
Fait correspondre le nom de domaine de la requête. Si vous spécifiez plusieurs noms de domaine, ils sont évalués selon une logique OU. Lorsque cette condition est définie, l'annotation
alb.ingress.kubernetes.io/conditions.host-exampleest ajoutée.Path :
Fait correspondre le chemin de la requête. Si vous spécifiez plusieurs chemins, ils sont évalués selon une logique OU. Lorsque cette condition est définie, l'annotation
alb.ingress.kubernetes.io/conditions.path-exampleest ajoutée.ImportantLorsque vous configurez une condition de transfert basée sur le chemin, la console ajoute automatiquement une règle de transfert avec le chemin
/created-by-<ALB-ID>à l'Ingress.HTTP header :
Fait correspondre une paire clé-valeur spécifiée dans l'en-tête de la requête. Par exemple, définissez Key sur
headernameet Value surheadervalue1. Si vous spécifiez plusieurs valeurs d'en-tête, elles sont évaluées selon une logique OU. Lorsque cette condition est définie, l'annotationalb.ingress.kubernetes.io/conditions.http-header-exampleest ajoutée.
Dans la liste déroulante Action, sélectionnez une option.
Forward to
Transmet les requêtes à plusieurs groupes de serveurs backend. Dans le champ Service name, sélectionnez le service cible. Dans le champ Port, sélectionnez le port cible. Configurez ensuite un poids.
RemarqueLes services ClusterIP ne sont pas pris en charge dans les clusters utilisant le plug-in réseau Flannel.
Lorsque vous sélectionnez Forward to, vous n'avez pas besoin de configurer Créer et utiliser un ALB Ingress pour exposer des services dans la règle.
Condition : Sélectionnez Domain Name, Path et HTTP Header.
Domain name : example.com. Cliquez sur Add domain name pour ajouter un autre nom de domaine, tel que test.com.
Action : Sélectionnez Forward to.
Service name : tea-svc
Port : 80
Weight : 100
Conservez les valeurs par défaut pour les autres paramètres.
La configuration est terminée. Dans le coin inférieur gauche de la page Create Ingress, cliquez sur OK.