Spring Cloud Gateway gebruiken

Notitie

Azure Spring Apps is de nieuwe naam voor de Azure Spring Cloud-service. Hoewel de service een nieuwe naam heeft, ziet u de oude naam op sommige plaatsen terwijl we werken aan het bijwerken van assets, zoals schermopnamen, video's en diagrammen.

Dit artikel is van toepassing op:❌ Basic/Standard ✔️ Enterprise

In dit artikel leest u hoe u VMware Spring Cloud Gateway gebruikt met het Azure Spring Apps Enterprise-plan om aanvragen naar uw toepassingen te routeren.

VMware Spring Cloud Gateway is een commercieel VMware Tanzu-onderdeel op basis van het opensource Spring Cloud Gateway-project. Spring Cloud Gateway verwerkt geavanceerde problemen voor API-ontwikkelteams, zoals eenmalige aanmelding (SSO), toegangsbeheer, snelheidsbeperking, tolerantie, beveiliging en meer. U kunt api-levering versnellen met behulp van moderne cloudeigen patronen en elke programmeertaal die u kiest voor API-ontwikkeling.

Spring Cloud Gateway bevat de volgende functies:

  • Dynamische routeringsconfiguratie, onafhankelijk van afzonderlijke toepassingen die kunnen worden toegepast en gewijzigd zonder hercompilatie.
  • Commerciële API-routefilters voor het transport van geautoriseerde JSON Web Token -claims (JWT) naar toepassingsservices.
  • Autorisatie van clientcertificaat.
  • Methoden voor snelheidsbeperking.
  • Configuratie van circuitonderbreker.
  • Ondersteuning voor toegang tot toepassingsservices via HTTP Basic Authentication-referenties.

Voor integratie met API Portal voor VMware Tanzu genereert VMware Spring Cloud Gateway automatisch documentatie over OpenAPI versie 3 na eventuele toevoegingen of wijzigingen van de routeconfiguratie.

Vereisten

Routes configureren

In deze sectie wordt beschreven hoe u API-routes toevoegt, bijwerkt en beheert voor apps die gebruikmaken van Spring Cloud Gateway.

De definitie van de routeconfiguratie bevat de volgende onderdelen:

  • OpenAPI-URI: deze URI verwijst naar een OpenAPI-specificatie. U kunt een openbaar URI-eindpunt gebruiken, zoals https://petstore3.swagger.io/api/v3/openapi.json of een samengestelde URI, zoals http://<app-name>/{relative-path-to-OpenAPI-spec}, waar <app-name> is de naam van een toepassing in Azure Spring Apps die de API-definitie bevat. De specificaties van Zowel OpenAPI 2.0 als OpenAPI 3.0 worden ondersteund. De specificatie wordt weergegeven in de API-portal, indien ingeschakeld.
  • routes: Een lijst met routeregels om verkeer naar apps te leiden en filters toe te passen.
  • protocol: het back-endprotocol van de toepassing waarnaar Spring Cloud Gateway verkeer routeert. De ondersteunde waarden van het protocol zijn HTTP of HTTPS, en de standaardwaarde is HTTP. Als u verkeer van Spring Cloud Gateway naar uw HTTPS-toepassing wilt beveiligen, moet u het protocol HTTPS instellen op in uw routeconfiguratie.
  • routes op app-niveau: er zijn drie route-eigenschappen die u op app-niveau kunt configureren om herhaling van alle of de meeste routes in de routeconfiguratie te voorkomen. De concrete routeringsregel overschrijft de regel voor routering op app-niveau voor dezelfde eigenschap. U kunt de volgende eigenschappen definiëren op app-niveau: predicates, filtersen ssoEnabled. Als u de OpenAPI URI functie gebruikt om routes te definiëren, is filtersde enige eigenschap voor routering op app-niveau ter ondersteuning.

Gebruik de volgende opdracht om een routeconfiguratie te maken. De --app-name waarde moet de naam zijn van een app die wordt gehost in Azure Spring Apps waarnaar de aanvragen worden doorgestuurd.

az spring gateway route-config create \
    --name <route-config-name> \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --app-name <app-name> \
    --routes-file <routes-file.json>

In het volgende voorbeeld ziet u een JSON-bestand dat wordt doorgegeven aan de --routes-file parameter in de opdracht maken:

{
   "predicates": [
      "<app-level-predicate-of-route>",
   ],
   "ssoEnabled": false,
   "filters": [
      "<app-level-filter-of-route>",
   ],
   "openApi": {
      "uri": "<OpenAPI-URI>"
   },
   "protocol": "<protocol-of-routed-app>",
   "routes": [
      {
         "title": "<title-of-route>",
         "description": "<description-of-route>",
         "predicates": [
            "<predicate-of-route>",
         ],
         "ssoEnabled": true,
         "filters": [
            "<filter-of-route>",
         ],
         "tags": [
            "<tag-of-route>"
         ],
         "order": 0
      }
   ]
}

De volgende tabel bevat de routedefinities. Alle eigenschappen zijn optioneel.

Eigenschappen Beschrijving
title Een titel die moet worden toegepast op methoden in de gegenereerde OpenAPI-documentatie.
beschrijving Een beschrijving die moet worden toegepast op methoden in de gegenereerde OpenAPI-documentatie.
uri De volledige URI, waarmee de naam van de app waarnaar de aanvragen worden doorgestuurd, wordt overschreven.
ssoEnabled Een waarde die aangeeft of SSO-validatie moet worden ingeschakeld. Zie Eenmalige aanmelding configureren.
tokenRelay Hiermee wordt het identiteitstoken van de geverifieerde gebruiker doorgegeven aan de toepassing.
Predikaten Een lijst met predicaten. Zie Beschikbare predicaten.
filters Een lijst met filters. Zie beschikbare filters.
order De routeverwerkingsorder. Een lagere volgorde wordt verwerkt met een hogere prioriteit, zoals in Spring Cloud Gateway.
tags Classificatietags die worden toegepast op methoden in de gegenereerde OpenAPI-documentatie.

Notitie

Vanwege beveiligings- of compatibiliteitsredenen worden niet alle filters/predicaten ondersteund in Azure Spring Apps. Het volgende wordt niet ondersteund:

  • BasicAuth
  • JWTKey

Routes gebruiken voor Spring Cloud Gateway

Gebruik de volgende stappen om een voorbeeldtoepassing te maken met Spring Cloud Gateway.

  1. Gebruik de volgende opdracht om een testtoepassing met de naam test-app te maken in Azure Spring Apps:

    az spring app create \
        name test-app \
        resource-group <resource-group-name> \
        service <Azure-Spring-Apps-instance-name>
    
  2. Wijs een openbaar eindpunt toe aan de gateway om er toegang toe te krijgen.

    Als u de actieve status en resources wilt weergeven die aan Spring Cloud Gateway zijn gegeven, opent u uw Azure Spring Apps-exemplaar in Azure Portal, selecteert u de sectie Spring Cloud Gateway en selecteert u Vervolgens Overzicht.

    Als u een openbaar eindpunt wilt toewijzen, selecteert u Ja naast Eindpunt toewijzen. Binnen een paar minuten wordt een URL weergegeven. Sla de URL op die u later wilt gebruiken.

    Screenshot of Azure portal Azure Spring Apps overview page with 'Assign endpoint' highlighted.

    U kunt ook Azure CLI gebruiken om het eindpunt toe te wijzen. Gebruik de volgende opdracht om het eindpunt toe te wijzen.

    az spring gateway update \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --assign-endpoint true
    
  3. Maak een regel voor toegang tot het statuscontrole-eindpunt van de test-app via Spring Cloud Gateway.

    Sla de volgende inhoud op in een test-api.json-bestand . Deze configuratie omvat een RateLimit-filter, waarmee 20 aanvragen elke 10 seconden worden toegestaan en een RewritePath-filter, waarmee het aanvraageindpunt het standaardeindpunt van de Spring Boot-statuscontrole kan bereiken.

    {
      "protocol": "HTTP",
      "routes": [
        {
          "title": "Test API",
          "description": "Retrieve a health check from our application",
          "predicates": [
            "Path=/test/api/healthcheck",
            "Method=GET"
          ],
          "filters": [
            "RateLimit=20,10s",
            "RewritePath=/api/healthcheck,/actuator/health"
          ],
          "tags": [
            "test"
          ]
        }
      ]
    }
    

    Gebruik vervolgens de volgende opdracht om de regel toe te passen op de app test-app:

    az spring gateway route-config create \
        --name test-api-routes \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --app-name test-app \
        --routes-file test-api.json
    

    U kunt de routes ook weergeven in de portal, zoals wordt weergegeven in de volgende schermopname:

    Screenshot of Azure portal Azure Spring Apps Spring Cloud Gateway page showing 'Routing rules' pane.

  4. Gebruik de volgende opdracht om toegang te krijgen tot de test health check API via het gateway-eindpunt:

    curl https://<endpoint-url>/test/api/healthcheck
    
  5. Gebruik de volgende opdrachten om een query uit te voeren op de routeringsregels:

    az spring gateway route-config show \
        --name test-api-routes \
        --query '{appResourceId:properties.appResourceId, routes:properties.routes}'
    
    az spring gateway route-config list \
        --query '[].{name:name, appResourceId:properties.appResourceId, routes:properties.routes}'
    

Filters gebruiken

Het opensource Spring Cloud Gateway-project bevat veel ingebouwde filters voor gebruik in gatewayroutes. Spring Cloud Gateway biedt veel aangepaste filters naast de filters die zijn opgenomen in het OSS-project.

In het volgende voorbeeld ziet u hoe u het AddRequestHeadersIfNotPresent filter toepast op een route:

[
  {
    "predicates": [
      "Path=/api/**",
      "Method=GET"
    ],
    "filters": [
      "AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
    ]
  }
]

Pas vervolgens de routedefinitie toe met behulp van de volgende Azure CLI-opdracht:

az spring gateway route-config create \
    --name <route-config-name> \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --app <app-name>
    --routes-file <json-file-with-routes>

Zie Routefilters voor VMware Spring Cloud Gateway gebruiken met het Azure Spring Apps Enterprise-plan voor meer informatie over beschikbare routefilters.

Volgende stappen