다음을 통해 공유


Azure Container Apps에서 Spring용 관리 게이트웨이로 Tanzu용 Spring Cloud Gateway 마이그레이션

참고 항목

기본, 표준엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.

표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.

이 문서는 기본/표준 ✅ 엔터프라이즈에 ❎ 적용됩니다.

이 문서에서는 Azure CLI를 사용하여 Azure Spring Apps Enterprise 계획의 VMware Spring Cloud Gateway를 Azure Container Apps의 Spring용 관리 게이트웨이로 마이그레이션하는 방법을 보여 줍니다.

필수 조건

Spring용 관리되는 게이트웨이 프로비전

다음 명령을 사용하여 필수 구성 요소에서 만든 Azure Container Apps 환경에서 Spring Java용 게이트웨이 구성 요소를 프로비전합니다.

az containerapp env java-component gateway-for-spring create \
    --resource-group <resource-group-name> \
    --name <gateway-name> \
    --environment <azure-container-app-environment-name>

구성 요소를 성공적으로 만든 후 Spring Cloud Gateway에 대한 프로비저닝 상태 값이 성공했음을 확인할 수 있습니다.

리소스 관리

Azure Container Apps에서 Spring용 게이트웨이에 대한 컨테이너 리소스 할당은 다음 값으로 고정됩니다.

  • CPU: 0.5 vCPU
  • 메모리: 1Gi

Spring용 게이트웨이에 대한 인스턴스 수를 구성하려면 매개 변수 --min-replicas--max-replicas사용하고 둘 다 동일한 값으로 설정합니다. 이 구성은 인스턴스 수가 고정된 상태로 유지되도록 합니다. 시스템은 현재 동적 자동 크기 조정 구성을 지원하지 않습니다.

Spring용 게이트웨이 구성

게이트웨이를 프로비전한 후 다음 단계는 원활한 마이그레이션을 위해 구성하는 것입니다.

다음 예제와 같이 명령을 사용하여 Spring용 게이트웨이 구성 요소의 update 구성 및 경로를 업데이트할 수 있습니다.

az containerapp env java-component gateway-for-spring update \
    --resource-group <resource-group-name> \
    --name <gateway-name> \
    --environment <azure-container-app-environment-name> \
    --configuration <configuration-key>="<configuration-value>" \
    --route-yaml <path-to-route-YAML-file>

CORS 구성

VMware Spring Cloud Gateway의 전역 CORS(원본 간 리소스 공유) 구성을 마이그레이션하려면 속성을 형식 <configuration-key>="<configuration-value>"으로 매핑해야 합니다. 매핑 관계는 다음 표에 나와 있습니다.

VMware Spring Cloud Gateway의 속성 이름 Spring용 게이트웨이의 구성
허용된 원본 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[<id>]
허용되는 원본 패턴 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns[<id>]
허용된 메서드 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[<id>]
허용된 헤더 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders[<id>]
최대 기간 spring.cloud.gateway.globalcors.cors-configurations.[/**].maxAge
자격 증명 허용 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials
노출된 헤더 spring.cloud.gateway.globalcors.cors-configurations.[/**].exposedHeaders[<id>]

예를 들어 VMware Spring Cloud Gateway와 같은 allowedOrigins:["https://example.com","https://example1.com"] 구성이 있는 경우 다음 매개 변수를 사용하여 Spring용 게이트웨이를 업데이트해야 합니다.

--configuration spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[0]=https://example.com spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[1]=https://example1.com

경로별 CORS 구성의 경우 구성 키의 "/**"를 경로 경로로 바꿔야 합니다. 예를 들어 경로 /v1/**가 있는 경로가 있는 경우 구성 spring.cloud.gateway.globalcors.cors-configurations.[/v1/**].allowedOrigins[<id>]해야 합니다.

경로

Spring용 게이트웨이 구성 요소는 다음 예제와 같이 , uripredicatesfilters 속성을 통한 id경로 정의를 지원합니다.

springCloudGatewayRoutes:
  - id: "route1"
    uri: "https://otherjavacomponent.myenvironment.test.net"
    predicates:
      - "Path=/v1/{path}"
      - "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
    filters:
      - "SetPath=/{path}"
  - id: "route2"
    uri: "https://otherjavacomponent.myenvironment.test.net"
    predicates:
      - "Path=/v2/{path}"
      - "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
    filters:
      - "SetPath=/{path}"

다음 목록에서는 VMware Spring Cloud Gateway의 경로와 Spring용 게이트웨이 경로 간의 매핑 관계를 설명합니다.

  • name 경로의 매핑된 값입니다id.
  • protocol Azure appName Container Apps 인스턴스에 대한 액세스 가능한 URI여야 하는 경로의 URI에 매핑됩니다.
  • Spring Cloud Gateway 조건자 및 필터는 Spring 조건자 및 필터에 대한 게이트웨이에 매핑됩니다.

예를 들어 VMware Spring Cloud Gateway에 대해 test-api.json 호출되는 다음 경로 구성 json 파일이 만들어지는 경우를 가정해 보겠습니다.

{
  "protocol": "HTTP",
  "routes": [
    {
      "title": "Test API",
      "predicates": [
        "Path=/test/api/healthcheck",
        "Method=GET"
      ],
      "filters": [
        "AddResponseHeader=X-Response-Red, Blue"
      ]
    }
  ]
}

그리고 다음 명령을 사용하여 Azure Spring Apps 앱 test-app에 규칙을 적용한다고 가정합니다.

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

그런 다음, 다음 예제에서는 Azure Container Apps에서 Spring용 게이트웨이에 대한 해당 경로 YAML 파일 test-api.yml 보여 줍니다.

springCloudGatewayRoutes:
  - id: "test-api"
    uri: "<app-fqdn-in-Container-Apps>"
    predicates:
      - Path=/test/api/healthcheck
      - Method=GET
    filters:
      - AddResponseHeader=X-Response-Red, Blue

그리고 다음 명령을 사용하여 컨테이너 앱을 업데이트합니다.

az containerapp env java-component gateway-for-spring update \
    --route-yaml test-api.yml

Azure Container App 애플리케이션이 FQDN(정규화된 도메인 이름)을 가져오려면 수신을 사용하도록 설정해야 합니다. 그런 다음 경로의 URI를 앱의 액세스 가능한 엔드포인트로 바꿉 <app-FQDN-in-Azure-Container-Apps> 다. URI 형식은 https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io입니다.

Azure Container Apps의 Spring용 게이트웨이에서 지원되지 않는 몇 가지 상용 조건 자와 상용 필터 가 있습니다.

응답 캐시

응답 캐시를 전역적으로 사용하도록 설정하는 경우 다음 구성으로 Spring용 관리 게이트웨이를 업데이트할 수 있습니다.

spring.cloud.gateway.filter.local-response-cache.enabled=true
spring.cloud.gateway.filter.local-response-cache.time-to-live=<response-cache-ttl>
spring.cloud.gateway.filter.local-response-cache.size=<response-cache-size>

경로에 대한 응답 캐시를 사용하도록 설정하는 경우 Spring용 관리 게이트웨이의 라우팅 규칙 구성에서 필터를 다음 YAML로 사용할 LocalResponseCache 수 있습니다.

springCloudGatewayRoutes:
  - id: "test-api"
    uri: "<app-fqdn-in-Container-Apps>"
    predicates:
      - Path=/v1/**
      - Method=GET
    filters:
      - LocalResponseCache=3m, 1MB

문제 해결

다음 단계를 사용하여 Log Analytics Azure Container Apps에서 Spring용 게이트웨이 로그를 볼 수 있습니다.

  1. Azure Portal에서 Azure Container Apps 환경으로 이동합니다.

  2. 탐색 창에서 모니터링 로그>선택합니다.

  3. 로그를 보려면 다음 예제와 같이 쿼리 편집기를 사용하여 테이블을 쿼리 ContainerAppSystemLogs_CL 합니다.

    ContainerAppSystemLogs_CL
    | where ComponentType_s == "SpringCloudGateway"
    | project Time=TimeGenerated, ComponentName=ComponentName_s, Message=Log_s
    | take 100
    

로그 쿼리에 대한 자세한 내용은 Azure Container Apps에서 관리되는 Java 구성 요소의 관찰 가능성을 참조 하세요.

알려진 제한 사항

현재 Azure Container Apps의 Spring용 게이트웨이는 OpenAPI 설명서, SSO(Single Sign-On) 및 APM(애플리케이션 성능 모니터링) 통합을 생성하는 데 사용되는 메타데이터를 포함하여 특정 상용 기능을 지원하지 않습니다.

Spring용 게이트웨이를 사용하도록 설정하면 서비스 섹션이 Azure Portal에서 열리지 않는 알려진 문제가 있습니다. 이 문제는 곧 해결될 예정입니다.