Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Configure an NLB with annotations

Dernière mise à jour :Sep 23, 2026

Vous pouvez utiliser des annotations dans le fichier YAML d'un Service pour activer des fonctionnalités d'équilibrage de charge supplémentaires pour son Network Load Balancer (NLB), telles que la spécification du type de réseau du NLB, l'activation de la protection contre les modifications et la configuration de l'authentification mutuelle. Cette rubrique explique comment utiliser ces annotations pour configurer le NLB. Les configurations sont organisées selon trois types de ressources : l'instance NLB, les écouteurs et les groupes de serveurs.

Index

Catégorie

Catégorie de fonctionnalité

Lien de configuration

Prérequis

Opérations NLB

Création

Configuration de l'instance

Opérations sur les écouteurs

Création

Configuration de l'écouteur

Configuration de sécurité

Opérations sur les groupes de serveurs

Configuration du serveur

Notes

  • Assurez-vous que votre cluster est en version v1.24 ou ultérieure et que le module complémentaire Cloud Controller Manager (CCM) est en version v2.5.0 ou ultérieure. Pour mettre à niveau le cluster, consultez Mettre à niveau manuellement un cluster ; pour mettre à niveau le module complémentaire, consultez Gérer les composants.

  • Dans la définition du Service, définissez spec.loadBalancerClass sur alibabacloud.com/nlb. Si ce paramètre n'est pas spécifié, un Classic Load Balancer (CLB) est créé par défaut.

  • Une fois un Service créé, vous ne pouvez pas modifier le champ spec.loadBalancerClass. Vous ne pouvez pas convertir le type d'équilibreur de charge de CLB en NLB ou vice versa.

  • Vous ne pouvez pas gérer les instances NLB dans la console ACK. Vous devez utiliser les commandes kubectl pour effectuer toutes les opérations de gestion.

Opérations NLB

Créer un NLB public

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps

Description

Versions CCM prises en charge

Spécifie la zone, le vSwitch, l'adresse IP privée et les informations EIP pour le NLB. Le format est le suivant :

{zone}:{vSwitchID}:{privateIPAddress}:{EIPInstanceID}. Séparez plusieurs entrées par une virgule (,).

  • Zone et ID de vSwitch : Obligatoire. Spécifiez au moins deux paires, par exemple cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.

    Pour obtenir la liste des régions et zones prises en charge pour NLB, consultez la console NLB.

  • Adresse IP privée : Facultatif.

  • ID d'instance EIP : Facultatif.

Zones et IDs de vSwitch : v2.5.0 ou ultérieure

Adresses IP privées et EIP : v2.12.1 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Créer un NLB privé

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type

Description

Versions CCM prises en charge

Spécifie le type de réseau du NLB. Vous pouvez modifier la valeur de cette annotation pour basculer le NLB entre public et privé. Valeurs valides :

  • internet : un NLB public.

  • intranet : un NLB privé.

Par défaut : internet

Vous pouvez vous connecter à la console NLB pour afficher les régions et zones prises en charge. Au moins deux zones sont requises. Plusieurs zones sont séparées par des virgules, par exemple cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Spécifier une adresse IP privée

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps

Description

Versions CCM prises en charge

Spécifie la zone, le vSwitch, l'adresse IP privée et les informations EIP pour le NLB. Le format est le suivant :

{zone}:{vSwitchID}:{privateIPAddress}:{EIPInstanceID}. Séparez plusieurs entrées par une virgule (,).

  • Zone et ID de vSwitch : Obligatoire. Spécifiez au moins deux paires. Par exemple, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.

    Pour obtenir la liste des régions et zones prises en charge pour NLB, consultez la console NLB.

  • Adresse IP privée : Facultatif.

  • ID d'instance EIP : Facultatif.

  • Zones et IDs de vSwitch : v2.5.0 ou ultérieure

  • Adresses IP privées et EIP : v2.12.1 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    # For example, cn-hangzhou-k:vsw-i123456:10.1.0.1,cn-hangzhou-j:vsw-j654321:10.2.0.1
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A}:${private-ipv4-A},${zone-B}:${vsw-B}:${private-ipv4-B}"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Spécifier un ID d'instance EIP

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps

Description

Versions CCM prises en charge

Spécifie la zone, le vSwitch, l'adresse IP privée et les informations EIP pour le NLB. Le format est le suivant :

{zone}:{vSwitchID}:{privateIPAddress}:{EIPInstanceID}. Séparez plusieurs entrées par une virgule (,).

  • Zones et IDs de vSwitch : Obligatoire. Spécifiez au moins deux paires, telles que cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.

    Pour obtenir la liste des régions et zones prises en charge pour NLB, consultez la console NLB.

  • Adresse IP privée : Facultatif.

  • ID d'instance EIP : Facultatif.

Zones et IDs de vSwitch : v2.5.0 ou ultérieure

Adresses IP privées et EIP : v2.12.1 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    # If you do not need a private IP address, leave the private IP address field empty.
    # For example, cn-hangzhou-k:vsw-i123456::eip-12345,cn-hangzhou-j:vsw-j654321::eip-54321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A}::${eip-A},${zone-B}:${vsw-B}::${eip-B}"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Spécifier le nom de l'équilibreur de charge

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name

Description

Versions CCM prises en charge

Spécifie le nom de l'instance d'équilibreur de charge. Le nom doit comporter entre 2 et 128 caractères, commencer par une lettre ou un caractère chinois et peut contenir des chiffres, des points (.), des traits de soulignement (_) et des traits d'union (-).

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name: "${your-nlb-name}" # The name of the NLB instance.
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Spécifier un groupe de ressources

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id

Description

Versions CCM prises en charge

Spécifie le groupe de ressources pour l'équilibreur de charge. L'ID du groupe de ressources ne peut pas être modifié après sa définition.

Vous pouvez trouver l'ID du groupe de ressources dans la console Resource Management.

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id:  "${your-resource-group-id}" # The ID of the resource group.
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Créer un NLB à pile double

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version

Pour attacher des serveurs backend IPv6, consultez Attacher des serveurs backend IPv6.

Description

Versions CCM prises en charge

Le mode kube-proxy du cluster doit être IPVS.

Spécifie la version du protocole IP du NLB. La version du protocole IP ne peut pas être modifiée après la création. Valeurs valides :

  • ipv4 : IPv4.

  • DualStack : Prend en charge à la fois IPv4 et IPv6.

    • Les deux vSwitches spécifiés dans service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps doivent tous deux avoir IPv6 activé.

    • L'adresse IPv6 générée est accessible uniquement depuis des environnements compatibles IPv6.

Par défaut : ipv4

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "DualStack"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Ajouter des tags supplémentaires

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags

Description

Versions CCM prises en charge

Vous pouvez ajouter des tags supplémentaires. Séparez plusieurs tags par une virgule (,). Par exemple, k1=v1,k2=v2. À partir de la version 2.10.0, vous pouvez modifier les tags des instances existantes et réutilisées.

Important

Après l'ajout de cette annotation, toute modification manuelle des tags appliquée à l'instance d'équilibreur de charge dans la console sera écrasée.

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags: "Key1=Value1,Key2=Value2"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Utiliser un équilibreur de charge existant

Important

N'ajoutez pas et ne modifiez pas l'annotation de réutilisation pour un service LoadBalancer existant. Cette opération pourrait entraîner l'échec de la réutilisation ou empêcher la libération de l'équilibreur de charge créé par le CCM.

Annotation : Plusieurs annotations sont utilisées, comme décrit dans le tableau suivant.

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id

Spécifie l'ID de l'équilibreur de charge existant.

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners

Indique s'il faut synchroniser les configurations des écouteurs NLB en fonction de la configuration du service. Valeurs possibles :

  • true : le CCM crée, met à jour et supprime les écouteurs NLB en fonction de la configuration du service.

  • false : le CCM ne traite pas les écouteurs NLB.

Valeur par défaut : false

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${your-nlb-id}" # The ID of the NLB instance.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Associer un package de bande passante partagé

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth-package-id

Description

Versions CCM prises en charge

Spécifie l'ID du package de bande passante partagé à associer.

Vous pouvez trouver l'ID du package de bande passante partagé dans la console VPC.

v2.9.1 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth-package-id: "cbwp-xxxxxxxxxx" 
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Configurer le transfert inter-zones

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cross-zone-enabled

Description

Versions CCM prises en charge

Indique s'il faut activer le transfert inter-zones. Valeurs possibles :

  • on

  • off

Valeur par défaut : on

v2.13.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cross-zone-enabled: "off" 
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Configurer une liste d'autorisation d'adresses IP source

Champ : .spec.loadBalancerRanges

Description

Versions CCM prises en charge

Cette fonctionnalité s'applique uniquement aux instances NLB créées et gérées par le CCM. Elle n'est pas prise en charge pour les instances réutilisées.

Lorsque vous configurez ce champ, le CCM crée automatiquement un groupe de sécurité, définit les règles d'accès requises et associe le groupe de sécurité à l'instance NLB. Si vous ne configurez pas ce champ ou si vous le laissez vide, aucun groupe de sécurité n'est associé.

Valeur par défaut : Vide

Important
  • L'ajout ou la modification de ce champ écrase les associations de groupes de sécurité existantes sur le NLB. Si d'autres groupes de sécurité sont associés manuellement au NLB, procédez avec prudence.

  • Ne modifiez pas le groupe de sécurité ni ses tags créés par le CCM. Sinon, l'association risque d'être supprimée ou les règles écrasées.

v2.14.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
  name: nginx
  namespace: default
spec:
  # Specify the allowed source IP address CIDR blocks.
  loadBalancerSourceRanges:
    - 10.0.0.0/8
    - 172.16.0.0/16
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Spécifier le type de réseau IPv6

Annotation : Plusieurs annotations sont utilisées, comme décrit dans le tableau suivant.

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version

Le mode kube-proxy du cluster doit être IPVS. Cette annotation spécifie la version du protocole IP pour le NLB. La version du protocole IP ne peut pas être modifiée après la création. Valeurs possibles :

  • ipv4 : IPv4.

  • DualStack : Prend en charge à la fois IPv4 et IPv6.

    • Les deux vSwitches spécifiés dans service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps doivent avoir l'IPv6 activé.

    • L'adresse IPv6 générée est accessible uniquement depuis des environnements compatibles IPv6.

Valeur par défaut : ipv4

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ipv6-address-type

Spécifie le type de réseau de l'adresse IPv6 du NLB. Valeurs possibles :

  • intranet : IPv6 privé.

  • internet : IPv6 public.

Valeur par défaut : intranet

Remarque

Pour utiliser une adresse IPv6 publique, une passerelle IPv6 doit exister dans le VPC où l'instance NLB est déployée. Pour plus d'informations, consultez Créer et gérer une passerelle IPv6.

v2.9.1 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "DualStack"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ipv6-address-type: internet # Specify the IPv6 network type as public.
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Opérations sur les écouteurs

Définir un groupe de sécurité pour l'écouteur

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-security-group-ids

Description

Versions CCM prises en charge

Spécifie les ID des groupes de sécurité à associer à l'écouteur. Séparez plusieurs ID par une virgule (,), par exemple sg-aaaaa,sg-bbbbb.

v2.6.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-security-group-ids: "sg-aaaaa,sg-bbbbb" # Separate multiple security group IDs with a comma (,).
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Configurer un écouteur TCP et UDP

Description

Versions CCM prises en charge

Cette fonctionnalité nécessite Kubernetes v1.24 ou une version ultérieure. Pour plus d'informations sur la mise à niveau d'un cluster, consultez Mettre à niveau un cluster ACK Kubernetes.

S.O.

apiVersion: v1
kind: Service
metadata:
  annotations:
      service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: udp
    port: 80
    protocol: UDP
    targetPort: 81
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Créer un écouteur TCP

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Créer un écouteur UDP

Remarque

Si vous ne spécifiez pas de vérification d'état lors de la création d'un écouteur UDP, une vérification d'état TCP est activée par défaut pour le groupe de serveurs. Pour les écouteurs UDP, nous vous recommandons d'utiliser une annotation pour spécifier explicitement une vérification d'état UDP ou pour désactiver les vérifications d'état.

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: udp
    port: 80
    protocol: UDP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Créer un écouteur TCPSSL

Annotation : Reportez-vous au tableau suivant pour connaître les annotations requises.

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Spécifie le protocole de l'écouteur. Pour spécifier plusieurs protocoles, séparez-les par une virgule (,), par exemple TCP:80,TCPSSL:443.

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

Pour obtenir l'ID, connectez-vous à la console Certificate Management Service, créez un certificat et recherchez l'ID sur la page SSL Certificate Management.

La figure suivante montre un exemple :

image

Important

Actuellement, les écouteurs TCP/SSL ne prennent pas en charge les groupes de serveurs avec la persistance de l'adresse IP du client activée. Cela signifie que vous ne pouvez pas configurer simultanément les annotations service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:${port}" et service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip: "on". Si vous devez obtenir les adresses IP des clients via NLB, consultez la rubrique Obtenir les adresses IP réelles des clients sur les serveurs backend via NLB.

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Configurer une plage de ports d'écouteur

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-listener-port-range

Description

Versions CCM prises en charge

Cette fonctionnalité nécessite le plug-in réseau Terway.

Vous pouvez configurer un écouteur pour qu'il écoute sur une plage de ports spécifiée. L'instance NLB transfère ensuite le trafic de cette plage de ports vers la même plage de ports sur les serveurs backend. Par exemple, si vous configurez la plage de ports 80-100, le trafic vers les ports 80 à 100 sur l'instance NLB est transféré vers les ports 80 à 100 sur les serveurs backend.

Le format est port-range:service-port. Séparez plusieurs valeurs par une virgule (,), par exemple 80-100:80,400-500:443. Les ports et les plages de ports pour le même protocole ne doivent pas se chevaucher.

Le paramètre targetPort spécifie le port de vérification d'état pour le groupe de serveurs et doit être un entier compris entre 1 et 65535.

v2.11.4 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    # Configure listeners for the 80-100 and 400-500 port ranges.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-listener-port-range: "80-100:80,400-500:443"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    # This port configuration is mapped to the 80-100 range.
    port: 80
    protocol: TCP
    # The targetPort specifies the health check port for the backend servers and must be an integer.
    targetPort: 80
  - name: https
    # This port configuration is mapped to the 400-500 range.
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Activer l'authentification mutuelle

Annotation : Reportez-vous au tableau suivant pour connaître les annotations requises.

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Spécifie le protocole de l'écouteur. Pour spécifier plusieurs protocoles, séparez-les par une virgule (,), par exemple TCP:80,TCPSSL:443.

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

Pour obtenir l'ID, connectez-vous à la console Certificate Management Service, créez un certificat et recherchez l'ID sur la page SSL Certificate Management.

La figure suivante montre un exemple :

image

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert-id

Pour obtenir l'ID, connectez-vous à la console Certificate Management Service et recherchez l'ID dans les détails du certificat sur la page PCA Certificate Management.

image

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert

Indique s'il faut activer l'authentification mutuelle. Valeurs possibles :

  • on : Active l'authentification mutuelle.

  • off : Désactive l'authentification mutuelle.

Valeur par défaut : off

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"   
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert-id: "${your-cacert-id}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert: "on"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Définir une politique de sécurité TLS

Annotation : Reportez-vous au tableau suivant pour connaître les annotations requises.

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Spécifie le protocole de l'écouteur. Pour spécifier plusieurs protocoles, séparez-les par une virgule (,), par exemple TCP:80,TCPSSL:443.

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

Pour obtenir l'ID, connectez-vous à la console Certificate Management Service, créez un certificat et recherchez l'ID sur la page SSL Certificate Management.

La figure suivante montre un exemple :

image

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy

L'ID de la politique de sécurité TLS. Vous pouvez utiliser des politiques de sécurité prédéfinies ou personnalisées. Valeurs possibles :

  • tls_cipher_policy_1_0

  • tls_cipher_policy_1_1

  • tls_cipher_policy_1_2

  • tls_cipher_policy_1_2_strict

  • tls_cipher_policy_1_2_strict_with_1_3

Valeur par défaut : tls_cipher_policy_1_0

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy: "tls_cipher_policy_1_0"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Activer Proxy Protocol

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol

Description

Versions CCM prises en charge

Indique s'il faut utiliser Proxy Protocol pour transmettre les adresses IP des clients aux serveurs backend. Valeurs possibles :

  • on : Active la fonctionnalité.

  • off : Désactive la fonctionnalité.

Valeur par défaut : off

Important

Avant d'activer Proxy Protocol, assurez-vous que vos services backend prennent en charge Proxy Protocol v2. Sinon, les connexions échoueront. Configurez ce paramètre avec précaution.

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol: "on"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Transmettre des informations supplémentaires via Proxy Protocol

Annotation : Reportez-vous au tableau suivant pour connaître les annotations requises.

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol

Indique s'il faut utiliser Proxy Protocol pour transmettre les adresses IP des clients aux serveurs backend. Valeurs possibles :

  • on : Active la fonctionnalité.

  • off : Désactive la fonctionnalité.

Valeur par défaut : off

Important

Avant d'activer Proxy Protocol, assurez-vous que vos services backend prennent en charge Proxy Protocol v2. Sinon, les connexions échoueront. Configurez ce paramètre avec précaution.

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-vpc-id-enabled

Indique s'il faut utiliser Proxy Protocol pour transmettre le VpcId aux serveurs backend. Valeurs possibles :

  • on : Active la fonctionnalité.

  • off : Désactive la fonctionnalité.

Valeur par défaut : off

v2.9.1 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-ep-id-enabled

Indique s'il faut utiliser Proxy Protocol pour transmettre le PrivateLinkEpId aux serveurs backend. Valeurs possibles :

  • on : Active la fonctionnalité.

  • off : Désactive la fonctionnalité.

Valeur par défaut : off

v2.9.1 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-eps-id-enabled

Indique s'il faut utiliser Proxy Protocol pour transmettre le PrivateLinkEpsId aux serveurs backend. Valeurs possibles :

  • on : Active la fonctionnalité.

  • off : Désactive la fonctionnalité.

Valeur par défaut : off

v2.9.1 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-ep-id-enabled: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-eps-id-enabled: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-vpc-id-enabled: "on"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Définir une limite de taux de connexion pour l'écouteur

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cps

Description

Versions CCM prises en charge

Le nombre maximal de nouvelles connexions par seconde pour une instance Network Load Balancer (NLB). La valeur doit être un entier compris entre 0 et 1 000 000. Une valeur de 0 indique qu'il n'y a aucune limite.

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cps: "100"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Définir le délai d'inactivité d'un écouteur

Annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout

Description

Versions CCM prises en charge

Délai d'expiration des connexions inactives, en secondes. Valeurs valides : 10 à 900.

Valeur par défaut : 900

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout: "60"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Définir une stratégie ALPN

Annotation : Reportez-vous au tableau suivant pour connaître les annotations requises.

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Spécifie le protocole de l'écouteur. Pour spécifier plusieurs protocoles, séparez-les par une virgule (,), par exemple TCP:80,TCPSSL:443.

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

Pour obtenir l'ID, connectez-vous à la console Certificate Management Service, créez un certificat et recherchez l'ID sur la page SSL Certificate Management.

La figure suivante illustre un exemple :

image

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn

Indique s'il faut activer la négociation de protocole au niveau de la couche application (ALPN). Valeurs valides :

  • on : Active l'ALPN.

  • off : Désactive l'ALPN.

Valeur par défaut : off

v2.10.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn-policy

Stratégie ALPN. Valeurs valides :

  • HTTP1Only : Négocie uniquement le protocole HTTP/1.x. Priorité : HTTP/1,1 > HTTP/1,0.

  • HTTP2Only : Négocie uniquement le protocole HTTP/2,0.

  • HTTP2Optional : Privilégie le protocole HTTP/1.x mais accepte également le protocole HTTP/2,0. Priorité : HTTP/1,1 > HTTP/1,0 > HTTP/2,0.

  • HTTP2Preferred : Privilégie le protocole HTTP/2 mais accepte également le protocole HTTP/1.x. Priorité : HTTP/2,0 > HTTP/1,1 > HTTP/1,0.

Pour plus d'informations, consultez le paramètre AlpnPolicy dans la référence de l'API CreateListener.

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn-policy: "HTTP1Only" 
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Configurer des certificats supplémentaires

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Spécifie le protocole de l'écouteur. Pour spécifier plusieurs protocoles, séparez-les par une virgule (,), par exemple TCP:80,TCPSSL:443.

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

Pour obtenir l'ID, connectez-vous à la console Certificate Management Service, créez un certificat et recherchez l'ID sur la page SSL Certificate Management.

La figure suivante illustre un exemple :

image

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-cert-ids

IDs des certificats supplémentaires. Séparez les IDs de plusieurs certificats par une virgule (,). Pour obtenir les IDs, connectez-vous à la console Certificate Management Service, créez les certificats et recherchez leurs IDs sur la page SSL Certificate Management.

La figure suivante illustre un exemple :

image

v2.13.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-cert-ids: "${CertIdentifier-1},${CertIdentifier-2}" # Separate multiple additional certificate IDs with a comma (,).
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Opérations typiques pour les groupes de serveurs

Algorithme de planification

annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler

Description

Versions CCM prises en charge

Algorithme de planification. Valeurs valides :

  • wrr : tourniquet pondéré. Les serveurs backend ayant un poids plus élevé reçoivent davantage de requêtes.

  • rr : tourniquet. Les requêtes sont distribuées séquentiellement aux serveurs backend.

  • sch : hachage de l'adresse IP source. Les requêtes provenant de la même adresse IP source sont toujours routées vers le même serveur backend.

  • tch : hachage du quadruplet. Les requêtes sont routées selon un hachage cohérent d'un quadruplet (adresse IP source, adresse IP de destination, port source et port de destination). Cela garantit que le trafic issu du même flux est toujours dirigé vers le même serveur backend.

  • wlc : moindre connexion pondérée. Les requêtes sont distribuées en fonction à la fois du poids et de la charge actuelle (nombre de connexions actives) de chaque serveur backend. Si les serveurs backend ont le même poids, celui qui possède le moins de connexions actives est plus susceptible de recevoir la prochaine requête.

Valeur par défaut : wrr

Pour plus d'informations sur les valeurs de cette annotation, consultez le paramètre Scheduler dans la référence de l'API CreateServerGroup.

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: "sch"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Vidage de connexion

annotation : Plusieurs annotations sont disponibles, comme décrit dans le tableau suivant.

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain

Indique s'il faut activer le vidage de connexion. Si cette option est activée, le comportement suivant se produit lorsqu'un serveur backend est supprimé ou échoue aux vérifications d'état :

  • on : Maintient les connexions existantes actives pendant le délai d'expiration spécifié, ce qui permet leur fermeture gracieuse.

  • off : L'équilibreur de charge ne termine pas les connexions existantes. Elles ne se ferment que lorsque le client se déconnecte ou que la session expire.

Valeur par défaut : off

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout

Délai d'expiration pour le vidage de connexion.

  • Unité : secondes.

  • Valeurs valides : 0 à 900. Une valeur de 0 termine immédiatement les connexions.

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: "30"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Préservation de l'adresse IP du client

annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip

Description

Versions CCM prises en charge

Indique s'il faut activer la préservation de l'adresse IP du client. Valeurs valides :

  • on : Active la fonctionnalité.

  • off : Désactive la fonctionnalité.

Valeur par défaut : on

v2.5.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip: "on"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Vérifications d'état TCP

annotation : Plusieurs annotations sont disponibles, comme décrit dans le tableau suivant. Pour configurer les vérifications d'état TCP, toutes les annotations suivantes sont requises. Par défaut, les vérifications d'état sont activées pour les ports TCP.

Annotation

Description

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag

Indique s'il faut activer les vérifications d'état. Valeurs valides :

  • on : Active les vérifications d'état.

  • off : Désactive les vérifications d'état.

Valeur par défaut : on

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type

Protocole de vérification d'état. Valeurs valides :

  • tcp

  • udp

  • http

Valeur par défaut : tcp

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-port

Port du serveur backend utilisé pour les vérifications d'état. Valeurs valides : 0 à 65535. La valeur par défaut 0 indique que le port du serveur backend est utilisé.

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout

Temps maximal d'attente pour une réponse de vérification d'état. Unité : secondes. Valeurs valides : 1 à 300.

Valeur par défaut : 5

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold

Nombre de vérifications d'état réussies consécutives nécessaires pour qu'un serveur backend soit considéré comme sain. Valeurs valides : 2 à 10.

Valeur par défaut : 2

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold

Nombre de vérifications d'état échouées consécutives nécessaires pour qu'un serveur backend soit considéré comme non sain. Valeurs valides : 2 à 10.

Valeur par défaut : 2

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval

Intervalle entre les vérifications d'état consécutives. Unité : secondes. Valeurs valides : 1 à 50.

Valeur par défaut : 5

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type: "tcp"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "8"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "5"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Contrôles d'état UDP

annotation : Plusieurs annotations sont disponibles et toutes sont obligatoires. Pour utiliser les contrôles d'état UDP, vérifiez que tous les ports définis dans le Service utilisent le protocole UDP.

Annotation

Description

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag

Indique s'il faut activer les contrôles d'état. Valeurs possibles :

  • on : Active les contrôles d'état.

  • off : Désactive les contrôles d'état.

Valeur par défaut : on

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type

Le protocole de contrôle d'état. Valeurs possibles :

  • tcp

  • udp

  • http

Valeur par défaut : tcp

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-port

Le port du serveur utilisé pour les contrôles d'état. Valeurs possibles : [0, 65535]. La valeur par défaut est 0, ce qui indique que le port réel du serveur backend est utilisé.

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout

Le délai d'attente de réponse pour un seul contrôle d'état. En cas de dépassement du délai, le contrôle actuel est considéré comme ayant échoué. Unité : secondes. Plage de valeurs : [1, 300]. Valeur par défaut : 5.

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold

Un serveur backend est considéré comme sain après avoir réussi le nombre spécifié de contrôles d'état consécutifs. Valeurs possibles : [2, 10]. Valeur par défaut : 2.

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold

Valeur par défaut : 2

Le serveur backend est considéré comme non sain après ce nombre d'échecs consécutifs des contrôles d'état. Valeurs possibles : [2, 10]. Valeur par défaut : 2.

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval

L'intervalle entre les contrôles d'état consécutifs. Unité : secondes. Plage de valeurs : [1, 300]. Valeur par défaut : 5.

Cette valeur doit être supérieure à la valeur de health-check-connect-timeout. Sinon, le contrôle d'état risque de ne pas fonctionner correctement.
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type: "udp"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "3"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "5"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: udp
    port: 80
    protocol: UDP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Contrôles d'état HTTP

annotation : Plusieurs annotations sont disponibles, comme décrit dans le tableau suivant. Pour configurer les contrôles d'état HTTP, toutes les annotations suivantes sont requises. Par défaut, les contrôles d'état utilisent le protocole TCP.

Annotation

Description

Versions CCM prises en charge

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag

Indique s'il faut activer les contrôles d'état. Valeurs possibles :

  • on : Active les contrôles d'état.

  • off : Désactive les contrôles d'état.

Valeur par défaut : on

v2.5.0 ou ultérieure

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type

Le protocole de contrôle d'état. Valeurs possibles :

  • tcp

  • udp

  • http

Valeur par défaut : tcp

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri

Le chemin d'accès pour le contrôle d'état. Il doit comporter entre 1 et 80 caractères, commencer par une barre oblique (/) et peut contenir des lettres, des chiffres et les caractères spéciaux suivants : - . _ % / ? # &. Pour plus d'informations, consultez CreateServerGroup.

Remarque

Ce paramètre n'est valide que lorsque service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type est défini sur http.

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain

Le nom de domaine utilisé pour les contrôles d'état. Valeurs possibles :

  • $SERVER_IP : L'adresse IP privée du serveur backend.

  • domain : Un nom de domaine spécifique. Le nom de domaine doit comporter entre 1 et 80 caractères et ne peut contenir que des lettres minuscules, des chiffres, des traits d'union (-) et des points (.).

Remarque

Ce paramètre n'est valide que lorsque service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type est défini sur http.

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-port

Le port du serveur backend utilisé pour les contrôles d'état. Valeurs possibles : 0 à 65535. La valeur par défaut 0 indique que le port du serveur backend est utilisé.

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout

Le temps maximal d'attente pour une réponse de contrôle d'état. Unité : secondes. Valeurs possibles : 1 à 300.

Valeur par défaut : 5

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold

Le nombre de contrôles d'état réussis consécutifs requis pour qu'un serveur backend soit considéré comme sain. Valeurs possibles : 2 à 10.

Valeur par défaut : 2

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold

Le nombre d'échecs consécutifs des contrôles d'état requis pour qu'un serveur backend soit considéré comme non sain. Valeurs possibles : 2 à 10.

Valeur par défaut : 2

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval

L'intervalle entre les contrôles d'état consécutifs. Unité : secondes. Valeurs possibles : 1 à 50.

Valeur par défaut : 5

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method

La méthode de contrôle d'état. Valeurs possibles :

  • GET

  • HEAD

Remarque

Ce paramètre n'est valide que lorsque service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type est défini sur http.

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type: "http"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri: "/test/index.html"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain: "www.test.com"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "10"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "5"
    # Set the health check method. This annotation is optional.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method: "head"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Type de groupe de serveurs

annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-server-group-type

Description

Versions CCM prises en charge

Le type de groupe de serveurs. Valeurs possibles :

  • Ip : Adresse IP. Vous pouvez ajouter des serveurs backends en spécifiant leurs adresses IP.

  • Instance (par défaut) : Vous pouvez ajouter des instances ECS ou des interfaces réseau élastiques (ENI) en tant que serveurs backends.

Valeur par défaut : Instance

Pour plus d'informations sur les types de groupes de serveurs NLB, consultez Groupes de serveurs.

v2.8.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-server-group-type: "Ip"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Serveurs backends IPv6

annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-ip-version

Description

Versions CCM prises en charge

La version IP des serveurs backends dans le groupe de serveurs.

  • ipv4 : Le groupe de serveurs contient uniquement des serveurs backends IPv4.

  • ipv6 : Le groupe de serveurs contient uniquement des serveurs backends IPv6.

  • DualStack : Le groupe de serveurs contient à la fois des serveurs backends IPv4 et IPv6, et l'affinité de version IP est automatiquement activée.

Valeur par défaut : ipv4

Remarque

Lorsque vous ajoutez à la fois des serveurs backends IPv4 et IPv6 à un groupe de serveurs, l'utilisation du quota de pods est doublée.

  • ipv6 : v2.9.1 ou ultérieure

  • DualStack : v2.14.0 ou ultérieure

Réutilisation d'un groupe de serveurs

annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port

Cette annotation vous permet de réutiliser un groupe de serveurs existant. Elle prend effet uniquement lorsque vous réutilisez une instance NLB existante. Pour un exemple, consultez Déployer des services entre clusters en réutilisant un équilibreur de charge.

Pondération du trafic de service

annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight

Dans les scénarios où plusieurs Services réutilisent la même instance NLB, vous pouvez utiliser cette annotation pour définir la pondération du trafic pour le Service actuel. Cette annotation prend effet uniquement lorsque vous réutilisez un groupe de serveurs existant. Pour un exemple, consultez Déployer des services entre clusters en réutilisant un équilibreur de charge.

Ignorer les mises à jour de pondération

annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ignore-weight-update

Description

Versions CCM prises en charge

Lorsqu'elle est définie sur on, le CCM ne met pas à jour les pondérations des serveurs backends dans le groupe de serveurs lors de la synchronisation du Service. Cela est utile si vous gérez les pondérations des serveurs backends à l'aide d'autres mécanismes.

  • on

  • off

Valeur par défaut : off

v2.11.1 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ignore-weight-update: "on"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Pondération par défaut des serveurs backends

annotation : service.beta.kubernetes.io/alibaba-cloud-loadbalancer-default-weight

Description

Versions CCM prises en charge

La pondération par défaut des serveurs backends dans le groupe de serveurs. Une pondération plus élevée signifie que le serveur reçoit une part plus importante du trafic entrant.

Le montant augmente.

Valeurs possibles : 0 à 100. Si cette annotation n'est pas configurée, le système utilise une pondération par défaut basée sur le type de réseau.

Cette configuration ne prend pas effet lorsque l'instance backend est une instance ECS et que la stratégie externalTrafficPolicy du Service est définie sur Local.

v2.14.0 ou ultérieure

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # For example, cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321
    # Sets the default weight of servers in the server group to 35.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-default-weight: "35"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer