Tous les produits
Search
Centre de documentation

Server Load Balancer:Migrer NGINX Ingress vers ALB Ingress

Dernière mise à jour :Sep 23, 2026

Un outil de migration automatisé convertit vos configurations NGINX Ingress au format ALB Ingress, éliminant ainsi les tâches manuelles. Répartissez progressivement le trafic en ajustant les pondérations DNS pour assurer une migration sans interruption.

Processus de migration

Faites pointer un nom de domaine à la fois vers NGINX Ingress et ALB Ingress, puis ajustez progressivement les pondérations DNS pour transférer le trafic de manière transparente. Le schéma suivant illustre ce processus. L'exemple de Migration example ci-dessous fournit des étapes détaillées.

La répartition du trafic basée sur le DNS est l'une des approches permettant une migration sans interruption. Ce processus est fourni à titre indicatif uniquement.
image

Exemple de migration

L'exemple suivant détaille la migration à travers des opérations spécifiques.

Une entreprise exécute un contrôleur NGINX Ingress dans son cluster. Le service de type LoadBalancer orienté Internet du contrôleur provisionne automatiquement une instance CLB orientée Internet. Le DNS résout www.example.net vers le CLB, qui transfère les requêtes aux pods backend.

image

Étape 1 : Configurer ALB Ingress

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 l'outil de migration pour convertir la configuration NGINX Ingress en ALB Ingress et ajoute ALB Ingress au DNS avec une pondération inférieure.

Important

Le DNS n'autorise pas la résolution simultanée d'un nom de domaine 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 (What is Application Load Balancer?). Vous devez configurer un nom de domaine temporaire pour l'instance CLB afin d'activer la répartition du trafic basée sur la pondération.

image

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

Après avoir vérifié qu'ALB Ingress fonctionne comme prévu, augmentez la pondération DNS d'ALB Ingress pour acheminer davantage de trafic via celui-ci.

image

Étape 3 : Supprimer les ressources NGINX Ingress

Une fois tout le trafic migré vers ALB Ingress, supprimez les entrées DNS de NGINX Ingress, retirez les ressources NGINX Ingress et désinstallez le module complémentaire du contrôleur NGINX Ingress.

image

Prérequis

Un client kubectl est connecté au cluster ACK. Pour plus d'informations, consultez la rubrique Connect to an ACK cluster using kubectl.

Étape 1 : Configurer ALB Ingress

  1. L'outil de migration convertit automatiquement les ressources AlbConfig, IngressClass et Ingress. Par conséquent, lors de l'installation du module complémentaire, sélectionnez None pour ALB Instance.

    Important

    Pour accéder aux services via ALB Ingress dans un ACK dedicated cluster, accordez les autorisations au contrôleur ALB Ingress avant de déployer les services. Consultez la rubrique Grant permissions to the ALB Ingress controller in an ACK dedicated cluster.

  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. Le Job convertit les configurations NGINX Ingress existantes en ressources AlbConfig, IngressClass, Ingress et autres, et 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 appartenant 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 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 ne figurant pas dans ce tableau sont ignorées lors de la conversion. Vérifiez la configuration 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 ALB Ingress

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

  • Effectuez le basculement du trafic pendant les heures creuses.

  • Après avoir configuré ALB Ingress, dirigez une petite partie du trafic vers celui-ci en tant que 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. Étant donné que 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 Alibaba Cloud DNS console.

  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, recherchez l'enregistrement A qui pointe de 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 Hostname, puis cliquez sur OK. Dans cet exemple, le Hostname est changé en 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

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

    Query Source

    Sélectionnez Default.

    Record Value

    Saisissez le 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, et 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 trouver le nom de domaine de l'instance ALB.

    kubectl get albconfig

    Sortie attendue. alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com est le 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

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

    Query Source

    Sélectionnez Default.

    Record Value

    Saisissez le 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, recherchez l'enregistrement CNAME que vous avez ajouté à l'étape précédente. Dans la colonne Actions, cliquez sur la flèche à 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 d'ALB à 0. Cliquez sur OK.

  3. Diminuez progressivement la pondération du CLB et augmentez celle d'ALB après avoir confirmé l'absence d'impact sur l'activité.

  4. Exécutez la commande dig plusieurs fois pour vérifier l'effet du transfert de 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, définissez progressivement la pondération du CLB à 0 et celle d'ALB à 100.

Si votre fournisseur de services DNS ne prend pas en charge la configuration de la pondération pour les enregistrements CNAME, cliquez ici pour voir une solution alternative de transfert de trafic.

Alternative traffic shifting solution

Étape 3 : Supprimer les ressources NGINX Ingress

Une fois toutes les connexions persistantes vers NGINX Ingress fermées et aucun nouveau trafic ne l'atteignant, surveillez le système pendant une période adaptée à votre activité avant de libérer les ressources redondantes.

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

  2. Désinstallez le module complémentaire du contrôleur NGINX Ingress.

    1. Connectez-vous à la ACK console.

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

    3. Recherchez 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 module complémentaire libère automatiquement l'instance CLB utilisée par le contrôleur NGINX Ingress, ce qui n'engendrera plus de frais.
  3. Connectez-vous à la Container Compute Service console. Dans le volet de navigation de gauche, cliquez sur Applications > Helm et désinstallez le module complémentaire du contrôleur NGINX Ingress.

Documents connexes