다음을 통해 공유


Spring Cloud Gateway for VMWare Tanzu를 Azure Container Apps의 자체 호스팅 게이트웨이 애플리케이션으로 마이그레이션

참고 항목

기본, 표준엔터프라이즈 계획은 2025년 3월 17일에 사용 중지 기간에 들어갔습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.

❎ 적용됩니다.

이 문서에서는 Azure Spring Apps Enterprise 플랜에서 실행되는 VMWare Tanzu용 Spring Cloud Gateway 프로젝트를 Azure Container Apps 애플리케이션으로 실행되는 자체 호스팅 오픈 소스 소프트웨어(OSS) Spring Cloud Gateway 프로젝트로 마이그레이션하는 방법을 보여 줍니다.

이 페이지에 언급된 Spring Cloud Gateway의 OSS 버전은 참조용 예제로 제공됩니다. 요구 사항에 따라 Spring Cloud Gateway의 다른 배포를 선택할 수 있습니다.

참고 항목

Spring Cloud Gateway for VMWare Tanzu에서 제공하는 기능은 OSS 버전의 기능보다 더 광범위합니다. 프로덕션으로 이동하기 전에 차이점을 검토하고 호환성을 확인해야 합니다.

필수 조건

자체 호스팅된 Spring Cloud Gateway 애플리케이션의 코드 준비

Spring Cloud Gateway 애플리케이션의 코드를 가져오려면 다음 단계를 사용합니다.

  1. https://start.spring.io으로 이동합니다.
  2. 그룹 필드를 조직의 이름으로 설정하여 프로젝트 메타데이터를 업데이트합니다. 아티팩트이름 필드를 게이트웨이로 변경합니다.
  3. Reactive GatewaySpring Boot Actuator 종속성을 추가합니다.
  4. 다른 속성은 기본값으로 둡니다.
  5. 생성을 선택하여 프로젝트를 다운로드합니다.
  6. 프로젝트가 다운로드되면 압축을 풉니다.

Spring Cloud Gateway 애플리케이션 구성

이제 Spring Cloud Gateway 애플리케이션을 다운로드했으므로 다음 섹션에서 구성합니다.

응용 프로그램 속성 파일 구성

응용 프로그램 속성 파일을 구성하려면 다음 단계를 사용합니다.

  1. 프로젝트의 gateway/src/main/resources 디렉터리로 이동합니다.

  2. application.properties 파일의 이름을 application.yml로 바꿉니다.

  3. application.yml 파일을 편집합니다. 일반적인 application.yml 파일은 다음과 같습니다.

    spring:
      application:
        name: gateway
      cloud:
        gateway:
          globalcors:
            corsConfigurations:
              '[/**]':
                allowedOriginPatterns: "*"
                allowedMethods:
                - GET
                - POST
                - PUT
                - DELETE
                allowedHeaders:
                - "*"
                allowCredentials: true
                maxAge: 3600
          routes:
          - id: front
            uri: http://front-app
            predicates:
            - Path=/**
            - Method=GET
            order: 1000
            filters:
            - StripPrefix=0
            tags:
            - front
    

CORS 구성

Spring Cloud Gateway for VMWare Tanzu 프로젝트의 CORS(Cross-Origin Resource Sharing) 구성을 마이그레이션하려면 글로벌 CORS 구성에 대한 CORS 구성 및 CORS 구성 라우팅을 참조하세요.

규모

Azure Container Apps에서 Spring Cloud Gateway 애플리케이션으로 마이그레이션하는 경우 크기 조정 동작은 Azure Container Apps 모델에 맞게 조정되어야 합니다. VMWare Tanzu용 Spring Cloud Gateway의 인스턴스 수는 Azure Container Apps에 min-replicamax-replica 매핑됩니다. 조정 규칙을 정의하여 게이트웨이 애플리케이션에 대한 자동 조정을 구성할 수 있습니다. 자세한 내용은 Azure Container Apps에서 크기 조정 규칙 설정을 참조하세요.

Azure Spring Apps에서 사용할 수 있는 CPU 및 메모리 조합은 Azure Container Apps에서 사용할 수 있는 조합과 다릅니다. 리소스 할당을 매핑할 때 Azure Container Apps에서 선택한 CPU 및 메모리 구성이 성능 요구 사항과 지원되는 옵션에 모두 맞는지 확인합니다.

사용자 지정 도메인 및 인증서

Azure Container Apps는 사용자 지정 도메인 및 인증서를 지원합니다. VMWare Tanzu용 Spring Cloud Gateway에 구성된 사용자 지정 도메인을 마이그레이션하는 방법에 대한 자세한 내용은 Azure Container Apps의 인증서를 참조하세요.

경로

application.yml 예제와 같이 Tanzu용 Spring Cloud Gateway의 경로를 Spring Cloud Gateway로 마이그레이션할 수 있습니다. 다음 목록에서는 VMWare Tanzu용 Spring Cloud Gateway의 경로와 Spring Cloud Gateway의 경로 간의 매핑 관계에 대해 설명합니다.

  • name 경로의 속성이 에 매핑됩니다.id
  • appNameprotocol 속성은 경로의 URI에 매핑되며, 이 URI는 Azure Container Apps 인스턴스에 대한 액세스 가능한 URI여야 합니다. Azure Container Apps 애플리케이션이 수신을 사용하도록 설정하는지 확인합니다.
  • VMWare Tanzu용 Spring Cloud Gateway의 조건자 및 필터는 Spring Cloud Gateway의 조건자 및 필터에 매핑됩니다. 상업용 조건자 및 필터는 지원되지 않습니다. 자세한 내용은 K8s용 Spring Cloud Gateway의 상용 경로 필터를 참조하세요.

예를 들어, 앱에 대한 VMWare Tanzu에 대한 Spring Cloud Gateway의 경로를 정의하는 test-api 다음 경로 구성 JSON 파일인 test를 고려합니다.

{
  "protocol": "HTTP",
  "routes": [
    {
      "title": "Test API",
      "predicates": [
        "Path=/test/api/healthcheck",
        "Method=GET"
      ],
      "filters": [
        "AddRequestHeader=X-Request-red, blue"
      ]
    }
  ]
}

그런 다음, 다음 YAML 파일은 Spring Cloud Gateway 애플리케이션에 대한 해당 경로 구성을 보여 줍니다.

spring:
  cloud:
    gateway:
      routes:
      - id: test-api
        uri: http://test
        predicates:
        - Path=/test/api/healthcheck
        - Method=GET
        filters:
        - AddRequestHeader=X-Request-red, blue
        - StripPrefix=1

VMWare Tanzu용 Spring Cloud Gateway는 기본적으로 모든 경로에서 설정됩니다 StripPrefix=1 . Spring Cloud Gateway로 마이그레이션하려면 필터 구성에서 명시적으로 설정해야 StripPrefix=1 합니다.

Spring Cloud Gateway 애플리케이션이 앱 이름을 통해 다른 애플리케이션에 액세스할 수 있도록 하려면 Azure Container App 애플리케이션에 대한 수신을 사용하도록 설정해야 합니다. Azure Container Apps 애플리케이션의 액세스 가능한 FQDN(정규화된 도메인 이름)을 다음 형식에 https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io따라 경로의 URI로 설정할 수도 있습니다.

참고 항목

Spring Cloud Gateway에서 지원되지 않는 몇 가지 상용 조건자상용 필터가 있습니다.

응답 캐시

VMWare Tanzu용 Spring Cloud Gateway에서 응답 캐시를 전역적으로 사용하도록 설정하는 경우 Spring Cloud Gateway에서 다음 구성을 사용합니다. 자세한 내용은 로컬 응답 캐시 필터를 참조하십시오.

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

경로에 대한 응답 캐시를 사용하도록 설정하면 다음 예제를 사용하여 Managed Gateway for Spring의 라우팅 규칙 구성에서 필터를 사용할 LocalResponseCache 수 있습니다.

spring:
  cloud:
    gateway:
      routes:
      - id: test-api
        uri: http://test
        predicates:
        - Path=/resource
        filters:
        - LocalResponseCache=30m,500MB

APM과 통합

Spring Cloud Gateway 애플리케이션에 대해 APM(애플리케이션 성능 모니터링)을 사용하도록 설정할 수 있습니다. 자세한 내용은 애플리케이션 성능 모니터링을 컨테이너 이미지에 통합을 참조 하세요.

Azure Container Apps에 배포

Spring Cloud Gateway 구성이 준비되면 Azure Container Registry를 사용하여 이미지를 빌드하고 Azure Container Apps에 배포합니다.

Docker 이미지 빌드 및 푸시

Docker 이미지를 빌드하고 푸시하려면 다음 단계를 사용합니다.

  1. Spring Cloud Gateway 프로젝트 디렉터리에서 다음 콘텐츠를 사용하여 Dockerfile 을 만듭니다.

    참고 항목

    또는 ACME Fitness Store 샘플 Dockerfile을 사용합니다.

    FROM mcr.microsoft.com/openjdk/jdk:17-mariner as build
    WORKDIR /staging
    # Install gradle
    RUN tdnf install -y wget unzip
    
    RUN wget https://services.gradle.org/distributions/gradle-8.8-bin.zip && \
        unzip -d /opt/gradle gradle-8.8-bin.zip && \
        chmod +x /opt/gradle/gradle-8.8/bin/gradle
    
    ENV GRADLE_HOME=/opt/gradle/gradle-8.8
    ENV PATH=$PATH:$GRADLE_HOME/bin
    
    COPY . .
    
    # Compile with gradle
    RUN gradle build -x test
    
    FROM mcr.microsoft.com/openjdk/jdk:17-mariner as runtime
    
    WORKDIR /app
    
    COPY --from=build /staging/build/libs/gateway-0.0.1-SNAPSHOT.jar .
    
    ENTRYPOINT ["java", "-jar", "gateway-0.0.1-SNAPSHOT.jar"]
    
  2. 다음 명령을 사용하여 게이트웨이의 이미지를 빌드합니다.

    az acr login --name <azure-container-registry-name>
    az acr build \
        --resource-group <resource-group-name> \
        --image gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT \
        --registry <azure-container-registry-name> \
        --file Dockerfile .
    
  3. 게이트웨이 이미지가 생성되었는지 확인하고 다음 형식을 <azure-container-registry-name>.azurecr.io/gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT사용하는 이미지 태그를 가져옵니다.

Azure Container Apps에서 이미지 배포

게이트웨이 애플리케이션 이미지가 준비되면 다음 명령을 사용하여 Azure Container Apps 애플리케이션으로 배포합니다. 자리 표시자를 <container-image-of-gateway> 이전 단계에서 검색한 이미지 태그로 바꿉니다.

az containerapp up \
    --resource-group <resource-group-name> \
    --name gateway \
    --environment <azure-container-app-environment-name> \
    --image <container-image-of-gateway> \
    --target-port 8080 \
    --ingress external

Spring Cloud Gateway 애플리케이션의 FQDN에 액세스하여 실행 중인지 확인합니다.

문제 해결

Spring Cloud Gateway 애플리케이션을 실행할 때 문제가 발생하는 경우 Azure Container Apps에서 애플리케이션의 실시간 및 기록 로그를 gateway 볼 수 있습니다. 자세한 내용은 Azure Container Apps의 애플리케이션 로깅을 참조 하세요.

게이트웨이 애플리케이션의 메트릭을 모니터링할 수도 있습니다. 자세한 내용은 Azure Container Apps 메트릭 모니터링을 참조하세요.

알려진 제한 사항

OSS Spring Cloud Gateway는 기본적으로 다음과 같은 상용 기능을 지원하지 않습니다.

  • OpenAPI 설명서를 생성하는 데 사용되는 메타데이터입니다.
  • SSO(Single Sign-On) 기능.

이러한 기능이 필요한 경우 Spring Cloud Gateway for VMWare Tanzu와 같은 다른 상용 솔루션을 고려해야 할 수 있습니다.