Tous les produits
Search
Centre de documentation

Server Load Balancer:Migrer d'un NGINX autogéré vers ALB Ingress

Dernière mise à jour :Aug 12, 2026

Un outil de migration automatisé convertit vos configurations NGINX Ingress au format ALB Ingress, ce qui élimine le travail manuel. Basculez progressivement le trafic en ajustant les pondérations DNS pour garantir une migration sans interruption de service.

Processus de migration

Faites pointer un nom de domaine à la fois vers le NGINX Ingress et l'ALB Ingress, puis ajustez progressivement les pondérations DNS pour transférer le trafic de manière transparente. Le diagramme suivant illustre ce processus. L'Exemple de migration ci-dessous détaille chaque étape.

Le basculement du trafic via DNS constitue une méthode de migration sans interruption. Ce processus est fourni à titre indicatif uniquement.
image

Exemple de migration

L'exemple suivant détaille les opérations spécifiques à effectuer pour réaliser la migration.

Une entreprise exécute un contrôleur NGINX Ingress dans son cluster. Le Service de type LoadBalancer exposé sur Internet provisionne automatiquement une instance CLB accessible depuis Internet. Le DNS fait pointer www.example.net vers cette instance CLB, qui transfère ensuite les requêtes aux pods backend.

image

Étape 1 : Configurer l'ALB Ingress

Le NGINX Ingress ne répond plus aux exigences de performance et engendre des coûts d'exploitation et de maintenance élevés. L'entreprise utilise donc l'outil de migration pour convertir la configuration NGINX Ingress en ALB Ingress, puis ajoute l'ALB Ingress au DNS avec une pondération initiale faible.

Important

Le DNS ne permet pas à un même nom de domaine de pointer simultanément vers un enregistrement A et un enregistrement CNAME. Les instances CLB reçoivent les requêtes via des adresses IP, tandis que les instances ALB exposent un nom de domaine par défaut (Qu'est-ce qu'Application Load Balancer ?). Vous devez configurer un nom de domaine temporaire pour l'instance CLB afin de permettre une distribution du trafic basée sur des pondérations.

image

Étape 2 : Transférer progressivement le trafic vers l'ALB Ingress

Une fois le bon fonctionnement de l'ALB Ingress vérifié, augmentez sa pondération DNS pour y router une part croissante du trafic.

image

Étape 3 : Supprimer les ressources NGINX Ingress

Après la migration complète du trafic vers l'ALB Ingress, supprimez les entrées DNS du NGINX Ingress, retirez les ressources associées et désinstallez le composant additionnel du contrôleur NGINX Ingress.

image

Prérequis

Un client kubectl est connecté au cluster ACK. Pour plus d'informations, consultez Se connecter à un cluster ACK avec kubectl.

Étape 1 : Configurer l'ALB Ingress

  1. Connectez-vous à la console Container Service for Kubernetes (ACK) et installez le composant additionnel du contrôleur ALB Ingress dans le cluster cible de la migration.Connectez-vous à la console Container Compute Service et installez le composant additionnel du contrôleur ALB Ingress dans le cluster cible de la migration. L'outil de migration convertit automatiquement les ressources AlbConfig, IngressClass et Ingress. Par conséquent, lors de l'installation du composant additionnel, sélectionnez None pour ALB Instance.

    Important

    Pour accéder aux services via un ALB Ingress dans un cluster dédié ACK, accordez les permissions nécessaires au contrôleur ALB Ingress avant de déployer vos services. Consultez Accorder des permissions au contrôleur ALB Ingress dans un cluster dédié ACK.

  2. Créez un fichier nommé ingress2albconfig.yaml avec le contenu suivant.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: ingress2albconfig
      namespace: default
    spec:
      template:
        spec:
          containers:
          - name: ingress2albconfig
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/ingress2albconfig:0.0.2
            command: ["/bin/ingress2albconfig", "print", "-A"]
          restartPolicy: Never
          serviceAccount: ingress2albconfig
          serviceAccountName: ingress2albconfig
      backoffLimit: 4
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: system:ingress2albconfig
    rules:
    - apiGroups:
      - networking.k8s.io
      resources:
      - ingresses
      - ingressclasses
      verbs:
      - get
      - list
      - watch
      - update
      - create
      - patch
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ingress2albconfig
      namespace: default
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: system:ingress2albconfig
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:ingress2albconfig
    subjects:
      - kind: ServiceAccount
        name: ingress2albconfig
        namespace: default
  3. Exécutez la commande suivante pour démarrer le Job. Celui-ci convertit les configurations NGINX Ingress existantes en ressources AlbConfig, IngressClass, Ingress et autres, puis affiche les résultats dans les journaux du pod.

    kubectl apply -f ingress2albconfig.yaml

    Sortie attendue :

    job.batch/ingress2albconfig created
    clusterrole.rbac.authorization.k8s.io/system:ingress2albconfig created
    serviceaccount/ingress2albconfig created
    clusterrolebinding.rbac.authorization.k8s.io/system:ingress2albconfig created
  4. Consultez le pod associé au Job.

    kubectl get pod -l job-name=ingress2albconfig

    Sortie attendue :

    NAME                READY   STATUS      RESTARTS   AGE
    ingress2albconfig-vw***   0/1     Completed   0          16m
  5. Consultez les journaux du pod.

    kubectl logs ingress2albconfig-vw*** # Replace this with the pod name from the previous step.

    Sortie attendue. Déployez ces ressources dans le cluster pour configurer l'ALB Ingress.

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: from-nginx
    spec:
      config:
        accessLogConfig: {}
        edition: Standard
        name: from-nginx
        tags:
        - key: converted/ingress2albconfig
          value: "true"
        zoneMappings:
        - vSwitchId: vsw-xxx # Replace this with the ID of a vSwitch in your VPC.
        - vSwitchId: vsw-xxx # Replace this with the ID of a vSwitch in your VPC.
      listeners:
      - port: 80
        protocol: HTTP
    ---
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: from-nginx
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: from-nginx
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80}]'
      name: from-ingress1
      namespace: default
    spec:
      ingressClassName: from-nginx
      rules:
      - http:
          paths:
          - backend:
              service:
                name: nginx-svc-g1msr
                port:
                  number: 80
            path: /
            pathType: Prefix
    status:
      loadBalancer: {}

Annotations converties automatiquement

L'outil de migration convertit les annotations NGINX Ingress suivantes en annotations ALB Ingress.

Important

Les annotations absentes de ce tableau sont ignorées lors de la conversion. Vérifiez la configuration de l'ALB Ingress après la conversion.

Liste des annotations

Annotation NGINX Ingress

Annotation ALB Ingress

nginx.ingress.kubernetes.io/canary

alb.ingress.kubernetes.io/canary

nginx.ingress.kubernetes.io/canary-by-header

alb.ingress.kubernetes.io/canary-by-header

nginx.ingress.kubernetes.io/canary-by-header-value

alb.ingress.kubernetes.io/canary-by-header-value

nginx.ingress.kubernetes.io/canary-by-cookie

alb.ingress.kubernetes.io/canary-by-cookie

nginx.ingress.kubernetes.io/canary-weight

alb.ingress.kubernetes.io/canary-weight

nginx.ingress.kubernetes.io/use-regex

alb.ingress.kubernetes.io/use-regex

nginx.ingress.kubernetes.io/rewrite-target

alb.ingress.kubernetes.io/rewrite-target

nginx.ingress.kubernetes.io/ssl-redirect

alb.ingress.kubernetes.io/ssl-redirect

nginx.ingress.kubernetes.io/enable-cors

alb.ingress.kubernetes.io/enable-cors

nginx.ingress.kubernetes.io/cors-allow-origin

alb.ingress.kubernetes.io/cors-allow-origin

nginx.ingress.kubernetes.io/cors-allow-methods

alb.ingress.kubernetes.io/cors-allow-methods

nginx.ingress.kubernetes.io/cors-allow-headers

alb.ingress.kubernetes.io/cors-allow-headers

nginx.ingress.kubernetes.io/cors-expose-headers

alb.ingress.kubernetes.io/cors-expose-headers

nginx.ingress.kubernetes.io/cors-allow-credentials

alb.ingress.kubernetes.io/cors-allow-credentials

nginx.ingress.kubernetes.io/backend-protocol

alb.ingress.kubernetes.io/backend-protocol

nginx.ingress.kubernetes.io/load-balance

alb.ingress.kubernetes.io/backend-scheduler

nginx.ingress.kubernetes.io/upstream-hash-by

alb.ingress.kubernetes.io/backend-scheduler-uch-value

Étape 2 : Transférer progressivement le trafic vers l'ALB Ingress

Avertissement
  • Avant de basculer le trafic, comparez et testez les règles de transfert de vos NGINX Ingress et ALB Ingress pour garantir une fonctionnalité identique.

  • Effectuez le basculement du trafic pendant les heures creuses.

  • Après avoir configuré l'ALB Ingress, dirigez-y une faible partie du trafic comme version canari. Vérifiez les règles de transfert et les configurations avant d'augmenter progressivement la pondération.

Configurer un domaine temporaire pour l'instance CLB

Le DNS ne prend pas en charge la résolution d'un nom de domaine vers un enregistrement A et un enregistrement CNAME simultanément. Comme les instances ALB utilisent un nom de domaine par défaut, vous devez configurer un nom de domaine temporaire pour l'instance CLB.

  1. Connectez-vous à la console Alibaba Cloud DNS.

  2. Sur la page Public Zone, recherchez et cliquez sur le nom de domaine DNS www.example.net qui pointe vers l'instance CLB à migrer.

  3. Sur la page Settings, localisez l'enregistrement A qui fait pointer www.example.net vers l'adresse IP de l'instance CLB. Dans la colonne Actions, cliquez sur Edit.

  4. Dans le panneau Edit Record, modifiez le champ Hostname, puis cliquez sur OK. Dans cet exemple, le champ Hostname devient web0. Conservez les autres paramètres inchangés.

  5. Sur la page Settings, cliquez sur Add Record. Dans le panneau Add Record, configurez les paramètres suivants et cliquez sur OK.

    Paramètre

    Description

    Record Type

    Sélectionnez CNAME.

    Hostname

    Préfixe du nom de domaine. Dans cet exemple, saisissez www.

    Query Source

    Sélectionnez Default.

    Record Value

    Nom de domaine temporaire. Dans cet exemple, saisissez web0.example.net.

    TTL

    Conservez la valeur par défaut.

    Remarque

    L'enregistrement CNAME résout désormais www.example.net vers web0.example.net, tandis que l'enregistrement A résout web0.example.net vers l'adresse IP du CLB.

Ajouter un enregistrement CNAME pour l'instance ALB

  1. Exécutez la commande suivante pour obtenir le nom de domaine de l'instance ALB.

    kubectl get albconfig

    Sortie attendue. alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com correspond au nom de domaine de l'instance ALB.

    NAME         ALBID                    DNSNAME                                               PORT&PROTOCOL   CERTID   AGE
    from_nginx   alb-a8mmh2tqbmrm11****   alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com                            20m
  2. Sur la page Settings, cliquez sur Add Record. Dans le panneau Add Record, configurez les paramètres suivants et cliquez sur OK.

    Paramètre

    Description

    Record Type

    Sélectionnez CNAME.

    Hostname

    Préfixe du nom de domaine. Dans cet exemple, saisissez www.

    Query Source

    Sélectionnez Default.

    Record Value

    Nom de domaine de l'instance ALB.

    TTL

    Conservez la valeur par défaut.

Définir la pondération du trafic

  1. Sur la page Settings, localisez l'enregistrement CNAME ajouté à l'étape précédente. Dans la colonne Actions, cliquez sur la flèche située à côté de Edit et sélectionnez Edit Record Set.

  2. Dans le panneau Edit Record, définissez la pondération du CLB à 100 et celle de l'ALB à 0. Cliquez sur OK.

  3. Diminuez progressivement la pondération du CLB tout en augmentant celle de l'ALB, après avoir confirmé l'absence d'impact sur l'activité.

  4. Exécutez plusieurs fois la commande dig pour vérifier l'effet du basculement du trafic.

    [root@xxx 2uvl6raykm3Z ~]# dig www.xxx.net
    
    ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> www.xxx.net
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31592
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.xxx.net.                IN      A
    
    ;; ANSWER SECTION:
    www.xxx.net.        5       IN      CNAME   web0.xxx.net.
    web0.xxx.net.       5       IN      A       47.xxx.144
    
    ;; Query time: 63 msec
    ;; SERVER: 100.xxx.136#53(100.xxx.136)
    ;; WHEN: Thu Jan 19 15:46:40 CST 2023
    ;; MSG SIZE  rcvd: 66
    [root@xxx ~]# dig www.xxx.net
    
    ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> www.xxx.net
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14224
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.xxx.net.                IN      A
    
    ;; ANSWER SECTION:
    www.xxx.net.        5       IN      CNAME   alb-a8mmh2xxxm74.cn-hangzhou.alb.aliyuncs.com.
    alb-a8mxxxm74.cn-hangzhou.alb.aliyuncs.com. 60 IN A 116.xxx.54
    alb-a8mxxxm74.cn-hangzhou.alb.aliyuncs.com. 60 IN A 118.xxx.39
    
    ;; Query time: 4 msec
    ;; SERVER: 100.xxx.136#53(100.xxx.136)
    ;; WHEN: Thu Jan 19 15:47:52 CST 2023
    ;; MSG SIZE  rcvd: 128
  5. Après vérification, réduisez progressivement la pondération du CLB à 0 et augmentez celle de l'ALB jusqu'à 100.

Si votre fournisseur de services DNS ne prend pas en charge la configuration de pondérations pour les enregistrements CNAME, cliquez ici pour découvrir une solution alternative de basculement du trafic.

Alternative traffic shifting solution

Étape 3 : Supprimer les ressources NGINX Ingress

Une fois toutes les connexions persistantes au NGINX Ingress fermées et aucun nouveau trafic ne lui parvenant, surveillez le système pendant une durée adaptée à votre activité avant de libérer les ressources redondantes.

  1. Supprimez les entrées DNS liées au NGINX Ingress depuis la console Alibaba Cloud DNS.

  2. Désinstallez le composant additionnel du contrôleur NGINX Ingress.

    1. Connectez-vous à la console ACK.

    2. Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Network > Ingresses.

    3. Localisez le NGINX Ingress. Dans la colonne Actions, choisissez image > Delete. Dans la boîte de dialogue qui s'affiche, cliquez sur Confirm Deletion.

    4. Dans le volet de navigation de gauche, choisissez Add-ons. Cliquez sur l'onglet Networking. Sur la carte NGINX Ingress controller, cliquez sur Uninstall.

    5. Dans la boîte de dialogue qui s'affiche, cliquez sur OK.

      La désinstallation du composant additionnel libère automatiquement l'instance CLB utilisée par le contrôleur NGINX Ingress, laquelle ne génère plus de frais.
  3. Connectez-vous à la console Container Compute Service. Dans le volet de navigation de gauche, cliquez sur Applications > Helm et désinstallez le composant additionnel du contrôleur NGINX Ingress.

Documents associés