트래픽 확장 프로그램 구성

Service Extensions를 사용하면 지원되는 애플리케이션 부하 분산기가 플러그인을 사용하거나 백엔드 서비스에 콜아웃을 전송하여 처리 경로에 맞춤 처리를 삽입할 수 있습니다. 트래픽 확장 프로그램은 요청 처리 경로에서 마지막으로 실행되고 응답 처리 경로에서 처음으로 실행되어 백엔드 서비스 선택에 영향을 주지 않으면서 헤더와 페이로드를 수정합니다. 이 페이지에서는 트래픽 확장 프로그램을 구성하는 방법을 설명합니다.

애플리케이션 부하 분산기 확장 프로그램에 대한 개요는 Cloud Load Balancing 확장 프로그램 개요를 참고하세요.

애플리케이션 부하 분산기의 트래픽 확장 프로그램은 다음 리소스를 가리킵니다.

  • 연결할 전달 규칙
  • 백엔드에서 ext_proc gRPC API를 실행하는 플러그인 또는 콜아웃 백엔드 서비스

트래픽 확장 프로그램은 관련 확장 프로그램 서비스를 하나 이상의 체인으로 그룹화합니다. 동일한 확장 프로그램 체인에서 플러그인과 콜아웃을 모두 구성할 수 있습니다. 각 확장 프로그램 체인은 Common Expression Language (CEL) 일치 조건을 사용하여 처리할 트래픽을 선택합니다. 부하 분산기는 각 체인의 일치 조건에 대해 요청을 순차적으로 평가합니다. 요청이 체인에서 정의한 조건과 일치하면 체인의 모든 확장 프로그램이 요청에 대해 작동합니다. 하나의 체인만 지정된 요청과 일치합니다.

체인의 각 확장 프로그램에는 지원되는 자체 이벤트 세트가 있을 수 있습니다. 확장 프로그램이 요청 및 응답 콘텐츠에 적용한 수정사항은 체인의 나머지 확장 프로그램에 표시됩니다. 응답 이벤트를 지원하도록 구성된 확장 프로그램의 경우 확장 프로그램 시퀀스가 응답 경로에서 반전됩니다.

트래픽 확장 프로그램은 연결할 부하 분산기 전달 규칙을 참조합니다. 리소스를 구성하면 부하 분산기가 일치하는 요청을 확장 프로그램 서비스로 전송하기 시작합니다.

확장 프로그램과 관련된 한도에 대한 자세한 내용은 할당량 및 한도 페이지를 참고하세요.

플러그인을 사용하여 구성

이 섹션에서는 플러그인을 사용하여 트래픽 확장 프로그램을 구성하는 방법을 보여줍니다.

특정 플러그인을 참조하는 모든 확장 프로그램 리소스는 동일한 유형이어야 합니다. 확장 프로그램의 부하 분산 스키마도 동일해야 합니다. Media CDN 확장 프로그램에서 이미 사용 중인 플러그인으로 Cloud Load Balancing 확장 프로그램을 구성할 수 없습니다.

시작하기 전에

  1. 맞춤 코드가 포함된 플러그인을 만듭니다.

  2. 트래픽 확장 프로그램 플러그인을 지원하는 애플리케이션 부하 분산기를 만들고 구성합니다.

    예를 들어 VM 인스턴스 그룹 백엔드가 있는 전역 외부 애플리케이션 부하 분산기를 설정합니다.

  3. curl을 실행하는 등 서비스에 테스트 요청을 보낼 방법을 설정합니다. 내부 부하 분산기를 사용하는 경우 테스트용 클라이언트 VM을 만드세요.

플러그인을 사용하여 트래픽 확장 프로그램 구성

다음 예에서는 호스트가 example.com와 일치할 때 응답 헤더 hello: service-extensions를 추가하는 플러그인을 사용하여 트래픽 확장 프로그램을 구성하는 방법을 보여줍니다.

  1. URL 맵에 example.com와 일치하는 항목이 있는지 확인합니다.

    1. 클라이언트 VM에서 전달 규칙에 대해 다음 curl 명령어를 실행합니다.

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      FORWARDING_RULE_IP를 전달 규칙의 IP 주소로 바꿉니다. IP 주소를 찾으려면 gcloud compute forwarding-rules describe 명령어를 사용합니다.

      출력은 다음과 비슷합니다.

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
  2. 트래픽 확장 프로그램을 구성합니다.

    콘솔

    1. Google Cloud 콘솔에서 서비스 확장 프로그램 페이지로 이동합니다.

      서비스 확장 프로그램으로 이동

    2. 확장 프로그램 만들기를 클릭합니다.

      마법사가 열려 초기 단계를 안내합니다.

    3. 제품에서 부하 분산을 선택합니다. 그런 다음 계속을 클릭합니다.

      지원되는 애플리케이션 부하 분산기 목록이 표시됩니다.

    4. 부하 분산기 유형으로 전역 외부 애플리케이션 부하 분산기 또는 리전 간 내부 애플리케이션 부하 분산기를 선택합니다. 그런 다음 계속을 클릭합니다.

    5. 확장 프로그램 유형으로 트래픽 확장 프로그램을 선택한 다음 계속을 클릭합니다.

    6. 확장 프로그램 만들기 양식을 열려면 계속을 클릭합니다.

      확장 프로그램 만들기 양식에서 페이지 상단에 표시되는 이전 선택사항은 수정할 수 없습니다.

    7. 기본사항 섹션에서 다음을 수행합니다.

      1. 확장 프로그램의 고유한 이름을 지정합니다.

        이름은 소문자로 시작해야 합니다. 이어서 최대 62자(영문 기준)의 소문자, 숫자 또는 하이픈이 와야 하며 하이픈으로 끝나서는 안 됩니다.

      2. 선택사항: 최대 1,024자를 사용하여 확장 프로그램에 대한 간략한 설명을 입력합니다.

      3. 선택사항: 라벨 섹션에서 라벨 추가를 클릭합니다. 그런 다음 표시되는 행에서 다음을 실행합니다.

        • 에 키 이름을 입력합니다.
        • 에 키 값을 입력합니다.

        키-값 쌍을 더 추가하려면 라벨 추가를 클릭합니다. 최대 64개의 키-값 쌍을 추가할 수 있습니다.

        라벨에 대한 자세한 내용은 프로젝트 라벨 만들기 및 업데이트를 참고하세요.

    8. 전달 규칙에서 확장 프로그램과 연결할 전달 규칙을 하나 이상 선택합니다(예: http-content-rule).

      이미 다른 확장 프로그램과 연결된 전달 규칙은 선택할 수 없으며 사용할 수 없는 것으로 표시됩니다.

    9. 확장 프로그램 체인의 경우 일치하는 요청에 실행할 확장 프로그램 체인을 하나 이상 추가합니다.

      확장 프로그램 체인을 추가하려면 다음 단계를 따른 후 완료를 클릭하세요.

      • 새 확장 프로그램 체인에 고유한 이름을 지정합니다.

        이름은 RFC-1034를 준수해야 하며 소문자, 숫자, 하이픈만 사용해야 하고 최대 길이는 63자(영문 기준)입니다. 또한 첫 번째 문자는 문자여야 하고 마지막 문자는 문자나 숫자여야 합니다.

      • 확장 프로그램 체인이 실행되는 요청을 일치시키려면 일치 조건에 Common Expression Language(CEL) 표현식(예: request.host == "example.com")을 지정합니다.

        CEL 표현식에 대한 자세한 내용은 구문 도움말 보기를 클릭하거나 CEL 일치자 언어 참조를 참고하세요.

      • 일치하는 요청에 실행할 확장 프로그램을 하나 이상 추가합니다.

        각 확장 프로그램의 확장 프로그램에서 다음을 수행한 후 완료를 클릭합니다.

        • 프로그래밍 가능 유형에서 플러그인을 선택합니다.

        • 확장 프로그램 이름에 고유한 이름을 지정합니다.

          이름은 RFC-1034를 준수해야 하며 소문자, 숫자, 하이픈만 사용해야 하고 최대 길이는 63자(영문 기준)입니다. 또한 첫 번째 문자는 문자여야 하고 마지막 문자는 문자나 숫자여야 합니다.

        • 플러그인에서 동일한 제품 및 확장 프로그램 유형에 대해 서비스 확장 프로그램을 사용하여 생성된 플러그인을 선택합니다.

        • 이벤트에서 확장 프로그램을 호출하는 하나 이상의 HTTP 이벤트 유형을 선택합니다.

        • 헤더 전달에서 헤더 추가를 클릭한 다음 클라이언트 또는 백엔드에서 확장 프로그램으로 전달할 HTTP 헤더를 추가합니다. 헤더를 지정하지 않으면 모든 헤더가 전송됩니다.

        • 선택사항: 확장 프로그램이 시간 초과되거나 실패하고 요청 또는 응답 처리를 계속하려면 Fail open에 대해 Enabled를 선택합니다. 체인의 후속 확장 프로그램도 실행됩니다.

          기본적으로 Fail open 옵션은 선택되어 있지 않습니다. 이 경우 오류가 발생하면 요청 또는 응답 처리가 중지됩니다. 응답 헤더가 다운스트림 클라이언트에 전송되지 않으면 클라이언트에 일반 HTTP 500 상태 코드가 반환됩니다. 응답 헤더가 전송되면 클라이언트에 대한 HTTP 스트림이 재설정됩니다.

          보안 또는 무결성을 우선시하는 경우 장애 허용을 선택하지 않은 기본 옵션이 선호됩니다. 특히 중요하지 않은 작업에 대해 Fail open을 사용 설정하면 가용성의 우선순위를 지정할 때 도움이 됩니다.

    10. 확장 프로그램 만들기를 클릭합니다.

    gcloud

    1. YAML 파일에서 플러그인을 정의하고 전달 규칙과 연결합니다(예: http-content-rule).

      cat >traffic-plugin.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/http-content-rule
          loadBalancingScheme: EXTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext1'
              service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN
              failOpen: false
              supportedEvents:
              - RESPONSE_HEADERS
      EOF
      

      다음을 바꿉니다.

      • PROJECT_ID: 프로젝트 ID입니다.
      • REGION: 전달 규칙의 리전입니다. 값은 플러그인 위치에 지정된 값과 일치해야 합니다.
      • LOCATION: 플러그인의 위치(global 또는 리전)
      • WASM_PLUGIN: 플러그인의 ID 또는 정규화된 이름입니다.
    2. 트래픽 확장 프로그램을 가져옵니다. 다음 샘플 값과 함께 gcloud service-extensions lb-traffic-extensions import 명령어를 사용합니다.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic-plugin.yaml \
          --location=global
      

    트래픽 확장 프로그램을 만든 후 새 플러그인이 모든 위치에 배포되는 데 약간의 시간이 걸립니다. 플러그인이 모든 위치에 동시에 제공되지 않으므로 위치에 따라 시간이 다를 수 있습니다.

  3. 트래픽 확장 프로그램이 예상대로 작동하는지 확인하려면 동일한 curl 명령어를 사용합니다.

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    출력에 hello: service-extensions 응답 헤더가 포함됩니다.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    

    확장 프로그램이 example.com 트래픽만 타겟팅하는지 확인하려면 host 헤더 없이 curl 명령어를 반복합니다.

    curl -D - FORWARDING_RULE_IP
    

    출력은 다음과 비슷합니다.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    

호출을 사용하여 사용자 관리 서비스에 트래픽 확장 프로그램 구성

이 섹션에서는 콜아웃을 사용하여 사용자 관리 콜아웃 백엔드 서비스에 트래픽 확장 프로그램을 구성하는 방법을 보여줍니다.

시작하기 전에

호출 백엔드 서비스 구성에 설명된 대로 필요한 리소스를 만듭니다.

콜아웃을 사용하여 트래픽 확장 프로그램 구성

다음 예시에서는 호스트가 example.com와 일치할 때 호출할 콜아웃을 사용하여 트래픽 확장 프로그램을 구성하는 방법을 보여줍니다. callout-vm의 트래픽 확장 프로그램 서버는 일치하는 요청에 응답 헤더 hello: service-extensions를 추가합니다.

  1. URL 맵에 example.com와 일치하는 항목이 있는지 확인합니다.

    1. 클라이언트 VM에서 전달 규칙에 대해 다음 curl 명령어를 실행합니다.

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      FORWARDING_RULE_IP를 전달 규칙의 IP 주소로 바꿉니다. IP 주소를 찾으려면 gcloud compute forwarding-rules describe 명령어를 사용합니다.

      출력은 다음과 비슷합니다.

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
      Page served from: l7-ilb-backend-example-1c7t
      
  2. 트래픽 확장 프로그램을 구성합니다.

    콘솔

    1. Google Cloud 콘솔에서 서비스 확장 프로그램 페이지로 이동합니다.

      서비스 확장 프로그램으로 이동

    2. 확장 프로그램 만들기를 클릭합니다.

      마법사가 열려 초기 단계를 안내합니다.

    3. 제품에서 부하 분산을 선택합니다. 그런 다음 계속을 클릭합니다.

      지원되는 애플리케이션 부하 분산기 목록이 표시됩니다.

    4. 부하 분산기 유형을 선택합니다. 리전 부하 분산기의 경우 리전도 지정합니다. 계속을 클릭합니다.

    5. 확장 프로그램 유형으로 트래픽 확장 프로그램을 선택한 다음 계속을 클릭합니다.

    6. 확장 프로그램 만들기 양식을 열려면 계속을 클릭합니다.

      확장 프로그램 만들기 양식에서 페이지 상단에 표시되는 이전 선택사항은 수정할 수 없습니다.

    7. 기본사항 섹션에서 다음을 수행합니다.

      1. 확장 프로그램의 고유한 이름을 지정합니다.

        이름은 소문자로 시작해야 합니다. 이어서 최대 62자(영문 기준)의 소문자, 숫자 또는 하이픈이 와야 하며 하이픈으로 끝나서는 안 됩니다.

      2. 선택사항: 최대 1,024자를 사용하여 확장 프로그램에 대한 간략한 설명을 입력합니다.

      3. 선택사항: 라벨 섹션에서 라벨 추가를 클릭합니다. 그런 다음 표시되는 행에서 다음을 실행합니다.

        • 에 키 이름을 입력합니다.
        • 에 키 값을 입력합니다.

        키-값 쌍을 더 추가하려면 라벨 추가를 클릭합니다. 최대 64개의 키-값 쌍을 추가할 수 있습니다.

        라벨에 대한 자세한 내용은 프로젝트 라벨 만들기 및 업데이트를 참고하세요.

    8. 전달 규칙에서 확장 프로그램과 연결할 전달 규칙을 하나 이상 선택합니다(예: l7-ilb-forwarding-rule).

      이미 다른 확장 프로그램과 연결된 전달 규칙은 선택할 수 없으며 사용할 수 없는 것으로 표시됩니다.

    9. 확장 프로그램 체인의 경우 일치하는 요청에 실행할 확장 프로그램 체인을 하나 이상 추가합니다.

      확장 프로그램 체인을 추가하려면 다음 단계를 따른 후 완료를 클릭하세요.

      • 프로그래밍 가능 유형에서 콜아웃을 선택합니다.

      • 새 확장 프로그램 체인 이름에 고유한 이름을 지정합니다.

        이름은 RFC-1034를 준수해야 하며 소문자, 숫자, 하이픈만 사용해야 하고 최대 길이는 63자(영문 기준)입니다. 또한 첫 번째 문자는 문자여야 하고 마지막 문자는 문자나 숫자여야 합니다.

      • 확장 프로그램 체인이 실행되는 요청을 일치시키려면 일치 조건에 Common Expression Language(CEL) 표현식(예: request.host == "example.com")을 지정합니다.

        CEL 표현식에 대한 자세한 내용은 구문 도움말 보기를 클릭하거나 CEL 일치자 언어 참조를 참고하세요.

      • 일치하는 요청에 실행할 확장 프로그램을 하나 이상 추가합니다.

        각 확장 프로그램의 확장 프로그램에서 다음을 수행한 후 완료를 클릭합니다.

        • 확장 프로그램 이름에 고유한 이름을 지정합니다.

          이름은 RFC-1034를 준수해야 하며 소문자, 숫자, 하이픈만 사용해야 하고 최대 길이는 63자(영문 기준)입니다. 또한 첫 번째 문자는 문자여야 하고 마지막 문자는 문자나 숫자여야 합니다.

        • Authority에는 부하 분산기에서 확장 프로그램 서비스로 전송된 gRPC 요청의 authority 헤더를 입력합니다.

        • 백엔드 서비스의 경우 콜아웃 백엔드 서비스 구성의 안내에 따라 만든 백엔드 서비스를 선택합니다.

        • 제한 시간의 경우 스트림의 메시지가 제한 시간 초과되는 10~1, 000밀리초 사이의 값을 지정합니다.

        • 이벤트에서 확장 프로그램을 호출하는 하나 이상의 HTTP 이벤트 유형을 선택합니다.

        • 헤더 전달에서 헤더 추가를 클릭한 다음 클라이언트 또는 백엔드에서 확장 프로그램으로 전달할 HTTP 헤더를 추가합니다. 헤더를 지정하지 않으면 모든 헤더가 전송됩니다.

        • 선택사항: 확장 프로그램이 시간 초과되거나 실패하고 요청 또는 응답 처리를 계속하려면 Fail open에 대해 Enabled를 선택합니다. 체인의 후속 확장 프로그램도 실행됩니다.

          기본적으로 Fail open 옵션은 선택되어 있지 않습니다. 이 경우 오류가 발생하면 요청 또는 응답 처리가 중지됩니다. 응답 헤더가 다운스트림 클라이언트에 전송되지 않으면 클라이언트에 일반 HTTP 500 상태 코드가 반환됩니다. 응답 헤더가 전송되면 클라이언트에 대한 HTTP 스트림이 재설정됩니다.

          보안 또는 무결성을 우선시하는 경우 장애 허용을 선택하지 않은 기본 옵션이 선호됩니다. 특히 중요하지 않은 작업에 대해 장애 시 개방을 사용 설정하면 가용성의 우선순위를 지정할 때 도움이 됩니다.

        • 메타데이터에서 메타데이터 추가를 클릭하고 제안된 대로 샘플 값을 지정합니다. key를 지정하고 value를 지정합니다.

          메타데이터 추가를 클릭하여 다른 키-값 쌍을 추가합니다. fr를 지정하고 forwarding_rule_id를 지정합니다.

          메타데이터 필드를 사용하면 부하 분산기에서 확장 프로그램 서버로 추가 정보를 전달할 수 있습니다. 메타데이터는 ProcessingRequest 메시지로 전송되고 protobuf.Struct로 인코딩됩니다. 지정된 전달 규칙 ID와 일치하는 메타데이터 내 텍스트는 클라이언트 요청과 연결된 전달 규칙의 정규화된 리소스 URL로 대체됩니다.

          메타데이터의 총 크기는 1KiB 미만이어야 합니다. 메타데이터의 총 키 수는 20개 미만이어야 합니다. 각 키의 길이는 64자(영문 기준) 미만이어야 합니다. 각 값의 길이는 1,024자(영문 기준) 미만이어야 합니다. 모든 값은 문자열이어야 합니다.

    10. 확장 프로그램 만들기를 클릭합니다.

    gcloud

    1. YAML 파일에서 콜아웃을 정의하고 전달 규칙과 연결합니다. 제공된 샘플 값을 사용합니다.

      cat >traffic.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/l7-ilb-forwarding-rule
          loadBalancingScheme: INTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext11'
              authority: ext11.com
              service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-callout-service
              failOpen: false
              timeout: 0.1s
              metadata:
                "key": "value"
                "fr": "forwarding_rule_id"
              supportedEvents:
              - RESPONSE_HEADERS
      EOF
      

      PROJECT_ID프로젝트 ID로 바꿉니다.

      확장 프로그램 구성의 metadata 필드를 사용하면 부하 분산기에서 확장 프로그램 서버로 추가 정보를 전달할 수 있습니다. 메타데이터는 ProcessingRequest 메시지로 전송되고 protobuf.Struct로 인코딩됩니다. 지정된 전달 규칙 ID와 일치하는 메타데이터 내의 텍스트는 클라이언트 요청과 연결된 전달 규칙의 정규화된 리소스 URL로 대체됩니다.

      metadata의 총 크기는 1KiB보다 작아야 합니다. 메타데이터의 총 키 수는 16개 미만이어야 합니다. 각 키의 길이는 64자(영문 기준) 미만이어야 합니다. 각 값의 길이는 1,024자(영문 기준) 미만이어야 합니다. 모든 값은 문자열이어야 합니다.

    2. 트래픽 확장 프로그램을 가져옵니다. 다음 샘플 값과 함께 gcloud service-extensions lb-traffic-extensions import 명령어를 사용합니다.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic.yaml \
          --location=us-west1
      
  3. 트래픽 확장 프로그램이 예상대로 작동하는지 확인합니다. 동일한 curl 명령어를 사용합니다.

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    출력에 hello: service-extensions 응답 헤더가 포함됩니다.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

    확장 프로그램이 example.com 트래픽만 타겟팅하는지 확인하려면 host 헤더 없이 curl 명령어를 반복합니다.

    curl -D - FORWARDING_RULE_IP
    

    출력은 다음과 비슷합니다.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

다음 단계