Modifier

Modèle de déchargement de passerelle

Azure Application Gateway

Déchargez des fonctionnalités de service partagé ou spécialisé sur un proxy de passerelle. Ce modèle peut simplifier le développement d’applications en déplaçant les fonctionnalités de service partagé, comme l’utilisation des certificats SSL, d’autres parties de l’application vers la passerelle.

Contexte et problème

Certaines fonctionnalités sont couramment utilisées dans plusieurs services et elles doivent être configurées, gérées et maintenues. Un service partagé ou spécialisé qui est distribué avec chaque déploiement d’application augmente la surcharge administrative et accroît la probabilité qu’une erreur de déploiement se produise. Les mises à jour d’une fonctionnalité partagée doivent être déployées sur tous les services qui partagent cette fonctionnalité.

Gérer correctement des problèmes de sécurité (validation de jeton, chiffrement, gestion de certificats SSL) et d’autres tâches complexes peut exiger que les membres de l’équipe soient extrêmement spécialisés. Par exemple, un certificat requis par une application doit être configuré et déployé sur toutes les instances de l’application. Avec chaque nouveau déploiement, le certificat doit être géré pour garantir qu’il n’expire pas. Les certificats courants sur le point d’expirer doivent être mis à jour, testés et vérifiés sur chaque déploiement d’application.

D’autres services courants comme l’authentification, l’autorisation, la journalisation, la surveillance ou la limitation peuvent être difficiles à implémenter et à gérer dans un grand nombre de déploiements. Il peut être préférable de consolider ce type de fonctionnalité, afin de réduire la surcharge et les risques d’erreurs.

Solution

Déchargez certaines fonctionnalités sur une passerelle, particulièrement les questions transversales comme la gestion des certificats, l’authentification, la terminaison SSL, la supervision, la traduction de protocole ou la limitation.

Le schéma suivant montre une passerelle qui met fin aux connexions SSL entrantes. Des données y sont demandées pour le compte du demandeur d’origine à partir d’un serveur HTTP en amont de la passerelle.

Diagramme du modèle de déchargement de passerelle

Ce modèle présente les avantages suivants :

  • Simplifiez le développement de services en supprimant le besoin de distribution et de maintien des ressources de prise en charge, comme les certificats de serveur web et la configuration des sites web sécurisés. Une configuration plus simple permet une gestion et une extensibilité plus aisées, à l’instar des mises à niveau des services.

  • Offrez aux équipes dédiées la possibilité d’implémenter des fonctionnalités qui nécessitent une expertise particulière telle que la sécurité. Cela permet à votre équipe métier de se concentrer sur les fonctionnalités de l’application et de laisser les experts traiter les problèmes propres à leur domaine.

  • Offrez une certaine cohérence pour la surveillance et la journalisation des requêtes et des réponses. Même si un service n’est pas correctement instrumenté, la passerelle peut être configurée pour assurer un niveau minimal de surveillance et de journalisation.

Problèmes et considérations

  • Vérifiez que la passerelle est hautement disponible et résiliente en cas de défaillance. Évitez les points de défaillance uniques en exécutant plusieurs instances de votre passerelle.
  • Assurez-vous que la passerelle est conçue pour répondre aux besoins en termes de capacité et de mise à l’échelle de votre application et de vos points de terminaison. Vérifiez que la passerelle ne se transforme pas en goulot d’étranglement pour l’application et qu’elle est suffisamment évolutive.
  • Déchargez uniquement les fonctionnalités qui sont utilisées par l’intégralité de l’application, telles que la sécurité ou le transfert de données.
  • La logique métier ne doit jamais être déchargée vers la passerelle.
  • Si vous avez besoin de suivre des transactions, envisagez de générer des ID de corrélation à des fins de journalisation.

Quand utiliser ce modèle

Utilisez ce modèle dans les situations suivantes :

  • Un déploiement d’application qui a un problème partagé comme les certificats SSL ou le chiffrement.
  • Une fonctionnalité commune à plusieurs déploiements d’application qui peuvent avoir différents besoins en matière de ressources, comme des ressources de mémoire, une capacité de stockage ou des connexions réseau.
  • Vous souhaitez confier la responsabilité des problèmes comme la sécurité réseau, la limitation ou d’autres soucis de limites réseau à une équipe plus spécialisée.

Ce modèle peut ne pas convenir s’il introduit le couplage entre les services.

Conception de la charge de travail

Un architecte doit évaluer la façon dont le modèle de déchargement de passerelle peut être utilisé dans la conception de leurs charges de travail pour se conformer aux objectifs et principes abordés dans les piliers d’Azure Well-Architected Framework. Par exemple :

Pilier Comment ce modèle soutient les objectifs des piliers.
Les décisions relatives à la fiabilité contribuent à rendre votre charge de travail résiliente aux dysfonctionnements et à s’assurer qu’elle retrouve un état de fonctionnement optimal après une défaillance. Le déchargement de cette responsabilité sur une passerelle réduit la complexité du code de l’application sur les nœuds de back-end. Dans certains cas, le transfert remplace complètement la fonctionnalité par une fonction fiable fournie par la plateforme.

- RE :01 Simplicité et efficacité
Les décisions relatives à la conception de la sécurité permettent de garantir la confidentialité, l’intégrité et la disponibilité des données et des systèmes de votre charge de travail. L’ajout d’une passerelle dans le flux de requêtes permet de centraliser les fonctionnalités de sécurité telles que les pare-feu d’applications web et les connexions TLS avec les clients. Toutes les fonctionnalités déchargées fournies par la plateforme offrent déjà une sécurité renforcée.

- Se :06 Contrôles de réseau
- SE :08 Ressources de renforcement
L’optimisation des coûts est axée sur le maintien et l’amélioration du retour sur investissement de votre charge de travail. Ce modèle permet de réorienter les coûts des ressources qui seraient dépensées par nœud vers la mise en œuvre de la passerelle. Dans le modèle de traitement centralisé, les coûts sont souvent inférieurs à ceux du modèle distribué.

- CO :14 Consolidation
L’excellence opérationnelle permet de fournir une qualité de charge de travail grâce à des processus standardisés et à la cohésion d’équipe. Dans ce modèle, la configuration et l’entretien de la fonctionnalité déchargée se font à partir d’un point unique au lieu d’être gérés à partir de plusieurs nœuds.

- OE :04 Outils et processus
L’efficacité des performances permet à votre charge de travail de répondre efficacement aux demandes grâce à des optimisations de la mise à l’échelle, des données, du code. En ajoutant une passerelle de déchargement au processus de demande, vous pouvez utiliser moins de ressources par nœud car la fonctionnalité est centralisée au niveau de la passerelle. Vous pouvez optimiser l’implémentation de la fonctionnalité déchargée indépendamment du code d’application. Les fonctionnalités déchargées de la plateforme sont déjà très performantes.

- PE :03 Sélection de services

Comme pour toute autre décision de conception, il convient de prendre en compte les compromis par rapport aux objectifs des autres piliers qui pourraient être introduits avec ce modèle.

Exemple

Avec Nginx en tant qu’appliance de déchargement SSL, la configuration suivante termine une connexion SSL entrante et la distribue à l’un des trois serveurs HTTP en amont.

upstream iis {
        server  10.3.0.10    max_fails=3    fail_timeout=15s;
        server  10.3.0.20    max_fails=3    fail_timeout=15s;
        server  10.3.0.30    max_fails=3    fail_timeout=15s;
}

server {
        listen 443;
        ssl on;
        ssl_certificate /etc/nginx/ssl/domain.cer;
        ssl_certificate_key /etc/nginx/ssl/domain.key;

        location / {
                set $targ iis;
                proxy_pass http://$targ;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
        }
}

Sur Azure, vous pouvez le faire en configurant un arrêt de SSL sur Application Gateway.