Patroon Offloading van gateway

Application Gateway

Gedeelde of gespecialiseerde servicefunctionaliteit offloaden naar een gatewayproxy. Dit patroon kan het ontwikkelen van toepassingen vereenvoudigen door de functionaliteit voor gedeelde services, zoals het gebruik van SSL-certificaten, vanuit andere onderdelen van de toepassing te verplaatsen naar de gateway.

Context en probleem

Sommige functies worden vaak gebruikt op meerdere services en voor deze functies is configuratie, beheer en onderhoud vereist. Een gedeelde of gespecialiseerde service die wordt geleverd bij elke implementatie van de toepassing zorgt voor extra administratieve overhead en vergroot de kans op implementatiefouten. Updates voor een gedeelde functie moeten worden geïmplementeerd op alle services die van die functie gebruikmaken.

Om beveiligingsaspecten (validatie van tokens, versleuteling en SSL-certificaatbeheer) en andere complexe taken op de juiste manier te verwerken, moeten teamleden over zeer gespecialiseerde vaardigheden beschikken. Een certificaat dat nodig is voor een toepassing moet bijvoorbeeld voor alle instanties van die toepassing worden geconfigureerd en geïmplementeerd. Bij elke nieuwe implementatie moet het certificaat worden beheerd om ervoor te zorgen dat het niet verloopt. Een algemeen certificaat dat op het punt staat te verlopen, moet worden bijgewerkt, getest en geverifieerd op elke implementatie van de toepassing.

Andere algemene services zoals verificatie, autorisatie, registratie, controle of netwerkbeperking zijn wellicht moeilijk te implementeren en beheren als er een groot aantal implementaties is. Het is wellicht beter dit type functionaliteit samen te voegen om overhead en de kans op fouten te verminderen.

Oplossing

Offload sommige functies in een gateway, met name kruislingse problemen, zoals certificaatbeheer, verificatie, SSL-beëindiging, bewaking, protocolomzetting of beperking.

In het volgende diagram ziet u een gateway waarmee binnenkomende SSL-verbindingen worden beëindigd. Er worden gegevens aangevraagd namens de oorspronkelijke aanvrager van een HTTP-server upstream van de gateway.

Diagram of the Gateway Offloading pattern

Dit patroon heeft de volgende voordelen:

  • Eenvoudigere ontwikkeling van services omdat er geen ondersteunende resources, zoals webservercertificaten en configuratie voor beveiligde websites, hoeven te worden gedistribueerd en beheerd. Eenvoudigere configuratie leidt tot eenvoudiger beheer en eenvoudigere schaalbaarheid en maakt ook service-upgrades eenvoudiger.

  • Laat gespecialiseerde teams functies implementeren waarvoor speciale expertise is vereist, zoals voor beveiliging. Hierdoor kan uw kernteam zich richten op de functionaliteit van de toepassing, en deze gespecialiseerde, maar transversale problemen overlaten aan de relevante deskundigen.

  • Enige mate van consistentie in het registreren en controleren van aanvragen en reacties. Zelfs als een service niet correct is ingericht, kan de gateway zodanig worden geconfigureerd dat een minimaal niveau van controle en registratie is gewaarborgd.

Problemen en overwegingen

  • Zorg ervoor dat de gateway maximaal beschikbaar is en bestand is tegen fouten. Vermijd single points of failure door meerdere exemplaren van uw gateway uit te voeren.
  • Zorg dat de gateway geschikt is voor de capaciteits- en schaalvereisten van uw toepassing en eindpunten. Controleer of de gateway geen knelpunt voor de toepassing wordt en voldoende schaalbaar is.
  • Zet alleen functies weg die door de gehele toepassing worden gebruikt, zoals voor beveiliging of gegevensoverdracht.
  • Bedrijfslogica mag nooit worden offload naar de gateway.
  • Als u transacties wilt volgen, zou u correlatie-id's voor registratie kunnen genereren.

Wanneer dit patroon gebruiken

Gebruik dit patroon wanneer:

  • De implementatie van een toepassing een gedeeld probleem zoals met SSL-certificaten of versleuteling heeft.
  • Een functie die gebruikt wordt bij implementaties van toepassingen die wellicht andere resourcevereisten hebben, zoals geheugenbronnen, opslagcapaciteit of netwerkverbindingen.
  • U de verantwoordelijkheid voor problemen zoals netwerkbeveiliging, netwerkbeperking of andere problemen met netwerkgrenzen naar een meer gespecialiseerde team wilt overzetten.

Dit patroon is mogelijk niet geschikt als het leidt tot de koppeling van services.

Voorbeeld

Als u Nginx als SSL-offload-apparaat gebruikt, wordt met de volgende configuratie een inkomende SSL-verbinding beëindigd en wordt de verbinding naar een van drie upstream HTTP-servers doorgestuurd.

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;
        }
}

In Azure kan dit worden bereikt door SSL-beëindiging in te stellen op Application Gateway.