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.
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.
É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.
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.
É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.
É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.
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
-
L'outil de migration convertit automatiquement les ressources
AlbConfig,IngressClassetIngress. Par conséquent, lors de l'installation du module complémentaire, sélectionnez None pour ALB Instance.ACK : Connectez-vous à la Container Service for Kubernetes (ACK) console et install the ALB Ingress controller add-on dans le cluster où vous souhaitez effectuer la migration.
ACS : Connectez-vous à la Container Compute Service console et install the ALB Ingress controller add-on dans le cluster où vous souhaitez effectuer la migration.
ImportantPour 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.
-
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 -
Exécutez la commande suivante pour démarrer le Job. Le Job convertit les configurations NGINX Ingress existantes en ressources
AlbConfig,IngressClass,Ingresset autres, et affiche les résultats dans les journaux du pod.kubectl apply -f ingress2albconfig.yamlSortie attendue :
job.batch/ingress2albconfig created clusterrole.rbac.authorization.k8s.io/system:ingress2albconfig created serviceaccount/ingress2albconfig created clusterrolebinding.rbac.authorization.k8s.io/system:ingress2albconfig created -
Consultez le pod appartenant au Job.
kubectl get pod -l job-name=ingress2albconfigSortie attendue :
NAME READY STATUS RESTARTS AGE ingress2albconfig-vw*** 0/1 Completed 0 16m -
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.
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.
Étape 2 : Transférer progressivement le trafic vers ALB Ingress
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.
Connectez-vous à la Alibaba Cloud DNS console.
Sur la page Public Zone, recherchez et cliquez sur le nom de domaine DNS
www.example.netqui pointe vers l'instance CLB à migrer.Sur la page Settings, recherchez l'enregistrement A qui pointe de
www.example.netvers l'adresse IP de l'instance CLB. Dans la colonne Actions, cliquez sur Edit.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.
-
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.
RemarqueL'enregistrement CNAME résout désormais
www.example.netversweb0.example.net, et l'enregistrement A résoutweb0.example.netvers l'adresse IP du CLB.
Ajouter un enregistrement CNAME pour l'instance ALB
-
Exécutez la commande suivante pour trouver le nom de domaine de l'instance ALB.
kubectl get albconfigSortie attendue.
alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.comest 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 -
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
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.
Dans le panneau Edit Record, définissez la pondération du CLB à 100 et celle d'ALB à 0. Cliquez sur OK.
Diminuez progressivement la pondération du CLB et augmentez celle d'ALB après avoir confirmé l'absence d'impact sur l'activité.
-
Exécutez la commande
digplusieurs 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 Après vérification, définissez progressivement la pondération du CLB à 0 et celle d'ALB à 100.
É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.
Supprimez les entrées DNS liées à NGINX Ingress depuis la Alibaba Cloud DNS console.
-
Désinstallez le module complémentaire du contrôleur NGINX Ingress.
Connectez-vous à la ACK console.
Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez .
Recherchez NGINX Ingress. Dans la colonne Actions, choisissez
> Delete. Dans la boîte de dialogue qui s'affiche, cliquez sur Confirm Deletion.Dans le volet de navigation de gauche, choisissez Add-ons. Cliquez sur l'onglet Networking. Sur la carte NGINX Ingress controller, cliquez sur Uninstall.
-
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.
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.
