Le champ listeners d'une configuration AlbConfig permet de configurer les écouteurs pour un Application Load Balancer (ALB). Cette rubrique décrit le comportement de mise à jour du champ listeners et explique comment créer, configurer et supprimer des écouteurs.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Deux vSwitch situés dans des zones différentes, au sein du même VPC que votre cluster, et dans des zones qui prennent en charge ALB. Pour plus d'informations, consultez la page Créer et gérer des vSwitches.
-
Le contrôleur ALB Ingress installé dans votre cluster. Pour plus d'informations, consultez la page Gérer le contrôleur ALB Ingress.
Pour utiliser un ALB Ingress afin d'accéder aux services déployés dans un cluster ACK dédié, vous devez d'abord accorder au cluster les autorisations requises par le contrôleur ALB Ingress. Pour plus d'informations, consultez la page Accorder à un cluster ACK dédié l'accès au contrôleur ALB Ingress .
Une ressource AlbConfig. Pour plus d'informations, consultez la section Créer une AlbConfig.
Notes d'utilisation
Les instances ALB créées par les clusters ACK sont des ressources gérées (ServiceManagedResource). Les restrictions et directives suivantes s'appliquent lorsque vous travaillez avec ces instances.
Restrictions de la console ALB
Ne créez, ne modifiez et ne supprimez pas d'écouteurs directement dans la console ALB. Par exemple, ne changez pas les ports des écouteurs et ne supprimez pas d'écouteurs depuis la console. ACK synchronise en continu la configuration des écouteurs depuis la CRD AlbConfig vers l'instance ALB. Toute modification manuelle effectuée dans la console ALB sera écrasée lors du prochain cycle de synchronisation.
Contourner AlbConfig et modifier directement les paramètres des écouteurs dans la console ALB entraîne les problèmes suivants :
La console ALB renvoie une erreur
OperationDenied.ServiceManagedResourcelorsque vous tentez de modifier les paramètres des écouteurs.Les écouteurs ajoutés manuellement (par exemple, le port 443) peuvent être automatiquement supprimés après la synchronisation de la configuration par ACK.
Lorsque vous réutilisez une instance ALB existante avec ACK, les paramètres des écouteurs configurés manuellement ne sont pas conservés.
Chemin de configuration correct
Toute la configuration des écouteurs, y compris les certificats HTTPS, les ports et les délais d'attente des requêtes, doit être gérée exclusivement via la ressource personnalisée AlbConfig dans votre cluster Kubernetes. AlbConfig constitue la source unique de vérité pour la configuration des écouteurs ALB et ne doit pas être modifiée depuis la console ALB.
Paramètres des écouteurs
Le tableau suivant répertorie tous les paramètres disponibles sous spec.listeners dans une AlbConfig.
**Paramètre**
|
**Type**
|
**Valeur par défaut**
|
**Protocoles**
|
**Description**
| | --- | --- | --- | --- | --- | |
`port`
|
Entier
|
—
|
HTTP, HTTPS, QUIC
|
Port de l'écouteur. Obligatoire. La modification de cette valeur supprime l'écouteur d'origine et en crée un nouveau.
| |
`protocol`
|
Chaîne
|
—
|
HTTP, HTTPS, QUIC
|
Protocole de l'écouteur. Obligatoire. La modification de cette valeur supprime l'écouteur d'origine et en crée un nouveau.
| |
`certificates[].CertificateId`
|
Chaîne
|
—
|
HTTPS
|
ID du certificat à attribuer à l'écouteur.
| |
`certificates[].IsDefault`
|
Booléen
|
—
|
HTTPS
|
Indique s'il s'agit du certificat par défaut.
| |
`caEnabled`
|
Booléen
|
`false`
|
HTTPS
|
Indique s'il faut activer la vérification des certificats CA.
| |
`securityPolicyId`
|
Chaîne
|
—
|
HTTPS
|
ID de la politique de sécurité TLS. Par exemple, `tls_cipher_policy_1_1`.
| |
`requestTimeout`
|
Entier
|
`60`
|
HTTP, HTTPS
|
Délai maximal (en secondes) d'attente d'une réponse du backend avant de renvoyer une erreur HTTP 504. Valeurs valides : 1–600.
| |
`tags[].key`
|
Chaîne
|
—
|
—
|
Clé du tag.
| |
`tags[].value`
|
Chaîne
|
—
|
—
|
Valeur du tag.
| |
`gzipEnabled`
|
Booléen
|
—
|
HTTP, HTTPS
|
Indique s'il faut activer la compression des données. `true` : compresse les types de contenu spécifiques. `false` : désactive toute compression.
| |
`xForwardedForConfig.XForwardedForEnabled`
|
Booléen
|
`true`
|
HTTP, HTTPS
|
Indique s'il faut inclure l'adresse IP du client dans l'en-tête `X-Forwarded-For` . Toujours activé ; ne peut pas être désactivé.
| |
`xForwardedForConfig.XForwardedForProtoEnabled`
|
Booléen
|
—
|
HTTP, HTTPS
|
Indique s'il faut inclure le protocole de l'écouteur dans les en-têtes de requête transférés aux serveurs backend.
| |
`xForwardedForConfig.XForwardedForSLBIdEnabled`
|
Booléen
|
—
|
HTTP, HTTPS
|
Indique s'il faut inclure l'ID de l'instance SLB dans les en-têtes de requête transférés aux serveurs backend.
| |
`xForwardedForConfig.XForwardedForSLBPortEnabled`
|
Booléen
|
—
|
HTTP, HTTPS
|
Indique s'il faut inclure le port d'écoute dans les en-têtes de requête transférés aux serveurs backend.
| |
`xForwardedForConfig.XForwardedForClientSourceIpsEnabled`
|
Booléen
|
—
|
HTTP, HTTPS
|
Indique s'il faut récupérer l'adresse IP réelle du client à partir de l'en-tête `X-Forwarded-For` .
| |
`xForwardedForConfig.XForwardedForClientSourceIpsTrusted`
|
Chaîne
|
—
|
HTTP, HTTPS
|
Liste séparée par des points-virgules des adresses IP ou des blocs CIDR de proxy approuvés. Prend effet uniquement lorsque `XForwardedForClientSourceIpsEnabled` est défini sur `true` .
| |
`aclConfig.aclType`
|
Chaîne
|
—
|
HTTP, HTTPS
|
Type de liste de contrôle d'accès (ACL) : `White` (liste d'autorisation) ou `Black` (liste de blocage).
| |
`aclConfig.aclEntries[]`
|
Chaîne
|
—
|
HTTP, HTTPS
|
Blocs CIDR pour le contrôle d'accès. Chaque entrée doit être un bloc CIDR complet.
|
Fonctionnement de la mise à jour du champ listeners
Le champ listeners étant un tableau, sa mise à jour s'effectue par remplacement intégral : la nouvelle configuration remplace complètement l'existante. Comprendre ce comportement vous aide à anticiper les effets de l'application d'une AlbConfig mise à jour.
Termes clés
Fichier de configuration de l'objet : le fichier YAML que vous appliquez, contenant l'état souhaité de l'AlbConfig.
Fichier de configuration de l'objet existant : la configuration déjà en cours d'exécution dans votre cluster.
last-applied-configuration: une annotation Kubernetes qui enregistre la configuration précédente. Elle n'est pas mise à jour en temps réel.
Règles de mise à jour
|**Scénario**
|
**Dans la nouvelle config.**
|
**Dans la config. existante**
|
**Dans ****last-applied-configuration**
|
**Résultat**
| | --- | --- | --- | --- | --- | |
①
|
Oui
|
Oui
|
—
|
Fusionne : applique les valeurs de la nouvelle configuration pour mettre à jour l'objet existant.
| |
②
|
Oui
|
Non
|
—
|
Crée : ajoute le nouvel écouteur.
| |
③
|
Non
|
—
|
Oui
|
Supprime : retire l'écouteur. Peut réinitialiser la valeur par défaut.
| |
④
|
Non
|
Oui
|
Non
|
Supprime : retire l'écouteur de la configuration existante.
|
Exemple
L'exemple suivant illustre l'application des règles lors de la mise à jour du champ listeners .
Nouvelle configuration (fichier de configuration de l'objet) :
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005 # New — will be added
protocol: HTTP
Configuration existante :
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Missing from new config and in last-applied-configuration — will be deleted
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8004 # Missing from new config but not in last-applied-configuration — will be deleted
protocol: HTTP
last-applied-configuration :
listeners:
- port: 8001
protocol: HTTP
- port: 8002
protocol: HTTP
- port: 8003
protocol: HTTP
Résultat après application de la nouvelle configuration :
listeners:
- port: 8001 # Meets condition ① — retained
protocol: HTTP
- port: 8003 # Meets condition ① — retained
protocol: HTTP
- port: 8005 # Meets condition ② — added
protocol: HTTP
# port 8002 meets condition ③ — deleted
# port 8004 meets condition ④ — deleted
Créer un écouteur
Un écouteur constitue le point d'entrée par lequel une instance ALB reçoit et distribue le trafic en fonction des informations de la couche application. Les champs port et protocol identifient conjointement un écouteur de manière unique.
La modification du port , du protocol ou de toute autre propriété de l'écouteur entraîne la suppression de l'écouteur d'origine et la création d'un nouvel écouteur.
Les écouteurs HTTP prennent automatiquement en charge WebSocket. Aucune configuration supplémentaire n'est requise.
Options de protocole pour le paramètre protocol : HTTP , HTTPS , QUIC .
Console
Connectez-vous à la console Container Service et cliquez sur Clusters dans le volet de navigation de gauche.
Cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, choisissez Workloads > Custom Resources .
Dans l'onglet , saisissez
AlbConfigdans la zone de recherche et cliquez sur le résultat AlbConfig .Dans le panneau AlbConfig , repérez la ressource AlbConfig (nommée
albpar défaut) et cliquez sur Edit YAML dans la colonne Actions .-
Dans le panneau , ajoutez les champs
spec.listeners.portetspec.listeners.protocol, puis cliquez sur OK .
kubectl
Exécutez la commande suivante pour modifier l'AlbConfig :
kubectl edit albconfig <AlbConfig_Name>
Ajoutez le champ listeners sous spec :
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
# ... other config fields
listeners:
- port: 80
protocol: HTTP # Options: HTTP, HTTPS, QUIC
Causes fréquentes d'échec de la création automatique d'une instance ALB
Si la création automatique d'une instance ALB par AlbConfig échoue, une configuration incomplète des écouteurs en est souvent la cause. Par exemple, si vos routes Ingress nécessitent TLS/HTTPS mais que l'AlbConfig n'inclut pas à la fois les écouteurs sur le port 80 (HTTP) et le port 443 (HTTPS), ou si le certificat HTTPS requis est manquant ou mal configuré, la création ou la synchronisation de l'instance peut échouer.
Pour éviter ce problème, vérifiez que la configuration des écouteurs de votre AlbConfig correspond aux exigences de votre Ingress avant de l'appliquer :
Les écouteurs sur les ports 80 et 443 sont définis lorsque des routes Ingress TLS/HTTPS sont utilisées.
Un certificat valide est attribué à l'écouteur HTTPS, ou la découverte automatique de certificat basée sur le nom de domaine est correctement configurée.
Configurer les certificats HTTPS
Définissez le champ certificates pour attribuer un ou plusieurs certificats à un écouteur HTTPS. ALB définit le premier certificat comme certificat par défaut. ALB utilise les autres certificats pour le chiffrement des requêtes uniquement si le certificat par défaut expire ou n'est plus applicable.
Si vous ne spécifiez pas de certificat, l'écouteur n'est pas créé immédiatement. Il est créé après l'association d'un Ingress et la découverte automatique d'un certificat basée sur le nom de domaine. Pour plus de détails, consultez la page Configurer des certificats HTTPS pour une communication chiffrée .
listeners:
- caEnabled: false
certificates:
- CertificateId: 756****-cn-hangzhou # Certificate ID
IsDefault: true
port: 443
protocol: HTTPS
Configurer une politique de sécurité TLS
Définissez securityPolicyId pour appliquer une politique de sécurité TLS à un écouteur HTTPS. Les politiques peuvent être personnalisées ou prédéfinies. Pour plus d'informations, consultez la page Politique de sécurité TLS .
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1 # Security policy ID
Définir le délai d'attente des requêtes
Définissez requestTimeout pour contrôler la durée pendant laquelle Server Load Balancer (SLB) attend une réponse d'un serveur backend après avoir reçu une requête client. Si aucune réponse n'est reçue dans le délai imparti, l'instance SLB cesse d'attendre et renvoie une erreur HTTP 504 au client.
Valeur par défaut :
60secondesValeurs valides : 1–600 (entier, en secondes)
Pour utiliser une valeur supérieure à 600, demandez une augmentation de quota dans le Quota Center .
listeners:
- port: 80
protocol: HTTP
requestTimeout: 60 # Seconds. Default: 60. Valid values: 1–600.
Portée d'application
Le paramètre requestTimeout est un paramètre au niveau de l'écouteur (au niveau du port). Il s'applique globalement à toutes les routes utilisant le même port d'écoute sur l'instance ALB. Il n'est pas possible de définir des délais d'inactivité de session frontend différents pour des routes individuelles sur le même écouteur.
Prise en charge des réponses en streaming pour l'IA
ALB prend en charge les interfaces de réponse en streaming pour l'IA (par exemple, la sortie en streaming des grands modèles de langage). Lorsque vous utilisez ALB avec des charges de travail de streaming IA :
Définissez
requestTimeoutsuffisamment haut pour couvrir toute la durée du transfert en streaming. Une valeur trop faible entraîne la fermeture de la connexion par ALB avant la fin du flux et renvoie une erreur HTTP 504 au client.Vérifiez les paramètres de délai d'attente de tous les composants de la chaîne de requête, tels que WAF et les services backend, afin d'éviter une terminaison prématurée de la connexion qui interromprait la session de streaming.
Ajouter des tags aux écouteurs
Utilisez le champ tags pour ajouter des tags clé-valeur à un écouteur.
listeners:
- port: 80
protocol: HTTP
tags:
- key: "key"
value: "value1"
Activer la compression des données
Définissez gzipEnabled pour contrôler si ALB compresse les données de réponse avant de les transmettre aux clients.
true: compresse les réponses à l'aide de Brotli ou Gzip, selon le type de contenu.false: désactive la compression pour tous les types de contenu.
La compression est déclenchée uniquement lorsque la valeur Content-Length dans l'en-tête de réponse dépasse 1 024 octets. Les deux algorithmes de compression fonctionnent comme suit :
Brotli : compresse tous les types de contenu.
Gzip : compresse
text/plain,text/css,application/javascript,application/x-javascript,application/rss+xml,application/atom+xml,application/xmletapplication/json.
L'exemple suivant désactive la compression :
listeners:
- port: 80
protocol: HTTP
gzipEnabled: false # true: compress specific content types. false: disable all compression.
Configurer les en-têtes X-Forwarded-For
Utilisez le champ xForwardedForConfig pour contrôler les informations qu'ALB inclut dans les en-têtes de requête lors du transfert du trafic vers les serveurs backend.
Tous les paramètres xForwardedForConfig s'appliquent uniquement aux écouteurs HTTP et HTTPS.
Récupérer l'adresse IP du client
XForwardedForEnabled est toujours activé et ne peut pas être désactivé. Lorsqu'il est activé, ALB ajoute l'adresse IP source du client à l'en-tête X-Forwarded-For .
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true
Récupérer le protocole de l'écouteur
Définissez XForwardedForProtoEnabled sur true pour inclure le protocole de l'écouteur dans les en-têtes transférés aux serveurs backend.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForProtoEnabled: true
Récupérer l'ID de l'instance SLB
Définissez XForwardedForSLBIdEnabled sur true pour inclure l'ID de l'instance SLB dans les en-têtes transférés aux serveurs backend.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true # true: include SLB instance ID. false: omit it.
Récupérer le port d'écoute
Définissez XForwardedForSLBPortEnabled sur true pour inclure le port d'écoute dans les en-têtes transférés aux serveurs backend.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true # true: include listening port. false: omit it.
Récupérer l'adresse IP réelle du client derrière les proxys
Lorsque les requêtes transitent par des proxys, l'en-tête X-Forwarded-For peut contenir une chaîne d'adresses IP. Définissez XForwardedForClientSourceIpsEnabled sur true pour permettre à ALB d'identifier l'adresse IP réelle du client en parcourant la liste de droite à gauche et en sélectionnant la première adresse IP ne figurant pas dans la liste de confiance.
Utilisez XForwardedForClientSourceIpsTrusted pour spécifier les adresses IP de proxy approuvées. Cela prend en charge des scénarios tels que la limitation du débit par adresse IP source.
Format : adresses IP ou blocs CIDR séparés par des points-virgules, sans espaces.
XForwardedForClientSourceIpsTrustedprend effet uniquement lorsqueXForwardedForClientSourceIpsEnabledest défini surtrue.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSourceIpsEnabled: true
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16 # Semicolon-separated, no spaces
Définir le contrôle d'accès
Utilisez le champ aclConfig pour activer le contrôle d'accès sur un écouteur ALB. Le contrôle d'accès vous permet d'autoriser ou de bloquer des adresses IP spécifiques en configurant une liste d'autorisation ou une liste de blocage. Pour plus d'informations, consultez la page Configurer des listes de contrôle d'accès pour le contrôle d'accès .
aclType: définissez surWhitepour une liste d'autorisation ou surBlackpour une liste de blocage.aclEntries: liste de blocs CIDR. Chaque entrée doit être un bloc CIDR complet.
listeners:
- port: 80
protocol: HTTP
aclConfig:
aclEntries:
- 127.0.0.1/32 # CIDR block must be complete
aclType: White # White: allowlist. Black: blocklist.
Supprimer un écouteur
Pour supprimer un écouteur, retirez-le du champ albconfig.spec.listeners .
Supprimez tous les Ingress associés à l'écouteur avant de le supprimer. Si un Ingress est encore associé, la suppression échouera.
Avant :
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Listener to delete
protocol: HTTP
Après :
listeners:
- port: 8001
protocol: HTTP