서비스 라우터 구성 항목

서비스 라우터 구성 항목 (Service router configuration entry)

이 페이지는 서비스 라우터(service router) 구성 항목에 대한 참조 정보를 제공해요. 서비스 라우터는 L7 네트워크 정보를 사용하여 서비스에 대한 트래픽 요청을 하나 이상의 특정 서비스 인스턴스로 리디렉션해요.

출처: 문서

본문

이 페이지는 서비스 라우터 구성 항목에 대한 참조 정보를 제공합니다. 서비스 라우터는 L7 네트워크 정보를 사용하여 서비스에 대한 트래픽 요청을 하나 이상의 특정 서비스 인스턴스로 리디렉션합니다.

추가 정보는 L7 트래픽 관리 개요를 참조하세요.

구성 모델 (Configuration model)

다음 목록은 이 구성 항목의 필드 계층, 언어별 데이터 유형 및 요구 사항을 설명합니다. 속성 이름을 클릭하면 기본값을 포함한 추가 세부 정보를 볼 수 있습니다.

HCL and JSONYAML

  • Kind: string | required | must be set to service-router
  • Name: string | required
  • Namespace: string

Enterprise

Enterprise

Enterprise

  * [`Partition`](/consul/docs/reference/config-entry/service-router#routes-destination-partition): string 

Enterprise

  * [`PrefixRewrite`](/consul/docs/reference/config-entry/service-router#routes-destination-prefixrewrite): string
  * [`RequestTimeout`](/consul/docs/reference/config-entry/service-router#routes-destination-requesttimeout): integer | `0`
  * [`IdleTimeout`](/consul/docs/reference/config-entry/service-router#routes-destination-idletimeout): integer | `0`
  * [`NumRetries`](/consul/docs/reference/config-entry/service-router#routes-destination-numretries): integer | `1`
  * [`RetryOnConnectFailure`](/consul/docs/reference/config-entry/service-router#routes-destination-retryonconnectfailure): boolean | `false`
  * [`RetryOn`](/consul/docs/reference/config-entry/service-router#routes-destination-retryon): list
  * [`RetryOnStatusCodes`](/consul/docs/reference/config-entry/service-router#routes-destination-retryonstatuscodes): list
  * [`RequestHeaders`](/consul/docs/reference/config-entry/service-router#routes-destination-requestheaders): map
    * [`Add`](/consul/docs/reference/config-entry/service-router#routes-destination-requestheaders): map
    * [`Set`](/consul/docs/reference/config-entry/service-router#routes-destination-requestheaders): map
    * [`Remove`](/consul/docs/reference/config-entry/service-router#routes-destination-requestheaders): map
  * [`ResponseHeaders`](/consul/docs/reference/config-entry/service-router#routes-destination-responseheaders): map
    * [`Add`](/consul/docs/reference/config-entry/service-router#routes-destination-responseheaders): map
    * [`Set`](/consul/docs/reference/config-entry/service-router#routes-destination-responseheaders): map
    * [`Remove`](/consul/docs/reference/config-entry/service-router#routes-destination-responseheaders): map
  • apiVersion: string | required | must be set to consul.hashicorp.com/v1alpha1
  • kind: string | required | must be set to ServiceRouter
  • metadata: map | required

Enterprise

Enterprise

    * [`partition`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-partition): string 

Enterprise

    * [`prefixRewrite`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-prefixrewrite): string
    * [`requestTimeout`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-requesttimeout): integer | `0`
    * [`numRetries`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-numretries): integer | `0`
    * [`numRetries`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-numretries): integer | `1`
    * [`retryOnConnectFailure`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-retryonconnectfailure): boolean | `false`
    * [`retryOn`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-retryon): list
    * [`retryOnStatusCodes`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-retryonstatuscodes): list
    * [`requestHeaders`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-requestheaders): map
      * [`add`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-requestheaders): map
      * [`set`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-requestheaders): map
      * [`remove`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-requestheaders): map
    * [`responseHeaders`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-responseheaders): map
      * [`add`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-responseheaders): map
      * [`set`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-responseheaders): map
      * [`remove`](/consul/docs/reference/config-entry/service-router#spec-routes-destination-responseheaders): map

전체 구성 (Complete configuration)

모든 필드가 정의되면 서비스 라우터 구성 항목은 다음과 같은 형식이 됩니다.

HCLJSONYAML

Kind      = "service-router"                             ## required
Name      = "<service-name>"                             ## required
Namespace = "<namespace-configuration-applies-to>"
Partition = "<partition-configuration-applies-to>"
Meta = {
 <key> = "<value>"
}


Routes = [
 {
   Match {
     HTTP {
       PathExact = "<exact/http/path>"                    ## cannot specify with PathPrefix or PathRegex
     },
     HTTP {
       PathPrefix = "<path/prefix>"                       ## cannot specify with PathExact or PathRegex
     },
     HTTP {
       PathRegex = "<regex/path>"                         ## cannot specify with PathPrefix or PathExact
     },
     HTTP {
       Methods = ["GET", "POST", "PUT"]
     },
     HTTP {
       Header = [                                         ## do not specify Present, Exact, Prefix, Suffix, and Regex in a single Header
         {
           Name    = "<header-to-match>"                  ## required when specifying Routes.Match.HTTP.Header
           Present = false
           Exact   = "<exact-match-name>"
           Prefix  = "<prefix-to-match>"
           Suffix  = "<suffix-to-match>"
           Regex   = "<regex-to-match>"
           Invert  = false
         }
       ]
     }
     HTTP {
      QueryParam = [                                       ## do not specify Present, Exact, and Regex in a single QueryParam
        Name   = "<text-to-match-in-query-parameter>"      ## required when specifying Routes.Match.HTTP.Header
        Present = false
        Exact = "<exact-text-to-match-in-query-parameter>"
        Regex = "<regex-to-match-in-query-parameter>"
      ]
     }
   },


     Destination {
       Service               = "<service-name-at-destination>"
       ServiceSubset         = "<service-subset-at-destination>"
       Namespace             = "<namespace-at-destination>"
       Partition             = "<partition-at-destination>"
       PrefixRewrite         = "<new-prefix-after-routing>"   ## required specifying either Routes.Match.HTTP.PathPrefix or Routes.Match.HTTP.PathExact
       RequestTimeout        = 0
       IdleTimeout           = 0
       NumRetries            = 1
       RetryOnConnectFailure = false
       RetryOn               = ["reset", "unavailable"]
       RetryOnStatusCodes    = [500, 502, 503]
       RequestHeaders = {
         Set = {
           "X-Web-Version" : "<text-string>"
         }
       }
       ResponseHeaders = {
         Set = {
           "X-Web-Version" : "<text-string>"
         }
       }
     }
 }
]




{
  "Kind": "service-router",                                 // required
  "Name": "<service-name>",                                 // required
  "Namespace": "<namespace-configuration-applies-to>",
  "Partition": "<partition-configuration-applies-to>",
  "Meta": {
   "<key>": "<value>"
  },


  "Routes": [
   {
    "Match": {
      "HTTP": {
        "PathExact": "<exact/http/path>"                     // cannot specify with PathPrefix or PathRegex
      },
      "HTTP": {
        "PathPrefix": "<path/prefix>"                        // cannot specify with PathExact or PathRegex
      },
      "HTTP": {
       "PathRegex": "<regex/path>"                           // cannot specify with PathPrefix or PathExact
      },
      "HTTP": {
       "Methods": ["GET", "POST", "PUT"]
      },
      "HTTP": {
       "Header": [                                           // do not specify Present, Exact, Prefix, Suffix, and Regex in a single Header
         {
           "Name": "<header-to-match>",                      // required when specifying Routes.Match.HTTP.Header
           "Present": false,
           "Exact": "<exact-match-name>",
           "Prefix": "<prefix-to-match>",
           "Suffix": "<suffix-to-match>",
           "Regex": "<regex-to-match>",
           "Invert": false,
         }
        ]
      },
      "HTTP": {
       "QueryParam": [                                         // do not specify Present, Exact, and Regex in a single QueryParam
         "Name": "<text-to-match-in-query-parameter>",         // required when specifying Routes.Match.HTTP.Header
         "Present": false,
         "Exact": "<exact-text-to-match-in-query-parameter>",
         "Regex": "<regex-to-match-in-query-parameter>"
       ]
      }
    },


     "Destination": {
       "Service": "<service-name-at-destination>",
       "ServiceSubset": "<service-subset-at-destination>",
       "Namespace": "<namespace-at-destination>",
       "Partition": "<partition-at-destination>",
       "PrefixRewrite": "<new-prefix-after-routing>",           // required specifying either Routes.Match.HTTP.PathPrefix or Routes.Match.HTTP.PathExact
       "RequestTimeout": 0,
       "IdleTimeout": 0,
       "NumRetries": 1,
       "RetryOnConnectFailure": false,
       "RetryOn": ["reset", "unavailable"],
       "RetryOnStatusCodes": [500, 502, 503],
       "RequestHeaders": {
         "Set":  {
           "X-Web-Version" : "<text-string>"
         }
       },
       "ResponseHeaders": {
         "Set": {
           "X-Web-Version" : "<text-string>"
         }
       }
     }
  }
 ]
}




apiVersion: consul.hashicorp.com/v1alpha1                  # required
kind: ServiceRouter                                        # required
metadata:
  name: <serviceName>
  namespace: <namespace>
spec:
  routes:
    - match:
       http:
         pathExact: <exact/http/path>                      ## cannot specify with pathPrefix or pathRegex
       http:
         pathPrefix: <path/prefix>                         ## cannot specify with pathExact or pathRegex
       http:
         pathRegex: <regex/path>                           ## cannot specify with pathPrefix or pathExact
       http:
         methods: [GET, POST, PUT]
       http:
         header:                                           ## do not specify present, exact, prefix, suffix, and regex in a single header
          - name: <header-to-match>                        ## required when specifying spec.routes.match.http.header
            present: false
            exact: <exact-match-name>
            prefix: <prefix-to-match>
            suffix: <suffix-to-match>
            regex: <regex-to-match>
            invert: false
       http:
         queryParam:                                        ## do not specify present, exact, and regex in a single queryParam
          - name: <text-to-match-in-query-parameter>        ## required when specifying spec.routes.match.http.header
            present: false
            exact: <exact-text-to-match-in-query-parameter>
            regex: <regex-to-match-in-query-parameter>


    destination:
       service: <service-name-at-destination>
       serviceSubset: <service-subset-at-destination>
       namespace: <namespace-at-destination>
       partition: <partition-at-destination>
       prefixRewrite: <new-prefix-after-routing>             ## required specifying either spec.routes.match.http.pathPrefix or spec.routes.match.http.pathExact
       requestTimeout: 0
       idleTimeout: 0
       numRetries: 1
       retryOnConnectFailure: false
       retryOn: ['reset']
       retryOnStatusCodes: [500, 502, 503]
       requestHeaders:
         set:
           x-Web-Version: <text-string>
       responseHeaders:
         set:
           x-Web-Version: <text-string>

사양 (Specification)

이 섹션은 서비스 라우터 구성 항목에서 구성할 수 있는 필드에 대한 세부 정보를 제공합니다.

HCLYAML

Kind

구현할 구성 항목의 유형을 지정합니다.

값 (Values)

  • 기본값: 없음
  • 이 필드는 필수입니다.
  • 데이터 유형: service-router로 설정해야 하는 문자열 값입니다.

Name

구성 항목의 이름을 지정합니다. 이름은 consul config 명령으로 Consul 작업을 수행할 때 구성 항목을 참조하는 데 사용할 수 있는 메타데이터입니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Namespace

Enterprise

구성 항목을 적용할 네임스페이스를 지정합니다. Consul 네임스페이스에 대한 추가 정보는 네임스페이스를 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Partition

Enterprise

구성 항목을 적용할 admin 파티션을 지정합니다. 추가 정보는 Admin partitions을 참조하세요.

값 (Values)

  • 기본값: default
  • 데이터 유형: 문자열

Meta

KV 저장소에 추가할 키-값 쌍을 지정합니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 하나 이상의 키-값 쌍 맵

Routes

L7 요청에 대한 가능한 라우트를 정의합니다. Consul은 구성 항목에 나타나는 순서대로 라우트 목록에 대해 트래픽을 평가합니다. 여러 라우트가 요청을 충족하면 Consul은 일치하는 첫 번째 라우트를 사용합니다. 제공된 라우트와 일치하지 않는 트래픽은 기본 서비스로 라우팅됩니다.

값 (Values)

  • 기본값: 없음

  • 데이터 유형: 다음 매개변수를 포함할 수 있는 목록:

  • Match

  • Destination

Routes[].Match

Consul이 들어오는 L7 트래픽과 비교하는 기준 집합을 설명합니다. 비어 있거나 생략하면 catch-all 역할을 합니다.

값 (Values)

Routes[].Match{}.HTTP

일치 항목에 대해 들어오는 L7 트래픽을 평가하는 데 사용되는 HTTP 기준 집합을 지정합니다.

HTTP 요청 경로에서 일치시킬 때는 한 번에 하나의 경로만 일치시킬 수 있습니다. 단일 HTTP 맵에 PathExact, PathPrefix, PathRegex를 함께 구성하지 마세요.

값 (Values)

Routes[].Match{}.HTTP{}.PathExact

HTTP 요청 경로에서 일치시킬 정확한 경로를 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 PathPrefix 또는 PathRegex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.PathPrefix

HTTP 요청 경로에서 일치시킬 경로 접두사를 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 PathExact 또는 PathRegex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.CaseInsensitive

HTTP 요청 경로에서 일치시킬 경로 접두사가 대소문자를 구분하지 않는지 여부를 지정합니다.

값 (Values)

  • 기본값: false
  • 데이터 유형: boolean

Routes[].Match{}.HTTP{}.PathRegex

HTTP 요청 경로에서 일치시킬 정규 표현식을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 PathExact 또는 PathPrefix를 구성하지 마세요. 정규 표현식 필드의 구문은 프록시별입니다. Envoy를 사용할 때 사용하는 Envoy 버전에 따라 Envoy v1.11.2 이상 문서 또는 Envoy v1.11.1 이하 문서를 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.Methods

일치가 적용되는 HTTP 메서드를 지정합니다. 지정하지 않으면 요청은 모든 HTTP 메서드와 일치합니다. 제공하면 이름은 문자열로 형식화된 유효한 메서드여야 합니다.

문자열 값은 유효한 HTTP 요청 메서드여야 합니다.

값 (Values)

Routes[].Match{}.HTTP{}.Header

일치시킬 HTTP 요청 헤더의 정보를 지정합니다. 둘 이상의 필드가 구성되면 서비스 라우팅이 적용되려면 모든 기준이 일치해야 합니다.

이 필드를 사용할 때는 같은 HTTP 맵에 Present, Exact, Prefix, Suffix, Regex를 함께 구성하지 마세요. HTTP 헤더에 대한 일치 기준을 구성할 때는 상호 배타적이므로 한 번에 하나의 필드만 사용할 수 있습니다.

값 (Values)

Routes[].Match{}.HTTP{}.Header[].Name

일치시킬 HTTP 헤더의 이름을 지정합니다. 이 필드는 Routes[].Match{}.HTTP{}.Header를 사용할 때 필수입니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.Header[].Present

Name 필드의 값이 HTTP 헤더의 어디에든 있으면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 Exact, Prefix, Suffix 또는 Regex를 구성하지 마세요.

값 (Values)

  • 기본값: false
  • 데이터 유형: boolean

Routes[].Match{}.HTTP{}.Header[].Exact

주어진 이름의 헤더가 이 정확한 값이면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 Present, Prefix, Suffix 또는 Regex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.Header[].Prefix

주어진 이름의 헤더가 이 접두사를 가지면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 Present, Exact, Suffix 또는 Regex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.Header[].Suffix

주어진 이름의 헤더가 이 접미사를 가지면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 Present, Exact, Prefix 또는 Regex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.Header[].Regex

주어진 이름의 헤더가 이 정규 표현식과 일치하면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 Present, Exact, Prefix 또는 Suffix를 구성하지 마세요. 정규 표현식 필드의 구문은 프록시별입니다. Envoy를 사용할 때 사용하는 Envoy 버전에 따라 Envoy v1.11.2 이상 문서 또는 Envoy v1.11.1 이하 문서를 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.Header[].Invert

HTTP 헤더 일치 로직을 반전해야 함을 지정합니다. 일치 기준이 있는 요청은 라우팅되지 않습니다.

값 (Values)

  • 기본값: false
  • 데이터 유형: boolean

Routes[].Match{}.HTTP{}.QueryParam

HTTP 쿼리 매개변수에 일치시킬 정보를 지정합니다. 둘 이상의 필드가 구성되면 서비스 라우팅이 적용되려면 모든 기준이 일치해야 합니다.

이 필드를 사용할 때는 단일 맵에 Present, Exact, Regex를 함께 구성하지 마세요. HTTP 쿼리 매개변수에 대한 일치 기준을 구성할 때는 상호 배타적이므로 한 번에 하나의 필드만 사용할 수 있습니다.

값 (Values)

  • 기본값: 없음

  • 데이터 유형: 맵 목록. 각 맵은 다음 매개변수 중 하나 이상을 포함할 수 있습니다:

Routes[].Match{}.HTTP{}.QueryParam[].Name

일치시킬 HTTP 쿼리 매개변수의 이름을 지정합니다. 이 값은 Routes[].Match{}.HTTP{}.QueryParam을 사용할 때 필수입니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.QueryParam[].Present

Name 필드의 값이 HTTP 쿼리 매개변수의 어디에든 있으면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 맵에 Exact 또는 Regex를 구성하지 마세요.

값 (Values)

  • 기본값: false
  • 데이터 유형: boolean

Routes[].Match{}.HTTP{}.QueryParam[].Exact

주어진 이름의 쿼리 매개변수가 이 정확한 값이면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 맵에 Present 또는 Regex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Match{}.HTTP{}.QueryParam[].Regex

주어진 이름의 쿼리 매개변수가 이 정규 표현식과 일치하면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 맵에 Present 또는 Exact를 구성하지 마세요. 정규 표현식 필드의 구문은 프록시별입니다. Envoy를 사용할 때 사용하는 Envoy 버전에 따라 Envoy v1.11.2 이상 문서 또는 Envoy v1.11.1 이하 문서를 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Destination

일치하는 요청을 라우팅할 대상 서비스와, 라우팅될 때 요청이 따를 동작을 지정합니다.

값 (Values)

Routes[].Destination{}.Service

해석할 서비스의 이름을 지정합니다. 이 매개변수를 지정하지 않으면 기본 서비스 이름은 구성 항목의 Name 필드에서 상속됩니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Destination{}.ServiceSubset

service resolver 구성 항목에서 해당 서비스의 DefaultSubset로 정의된 것 대신 해석할 지정된 서비스의 명명된 하위 집합을 지정합니다. 이 매개변수를 지정하지 않으면 기본 하위 집합이 사용됩니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Destination{}.Namespace

현재 네임스페이스 대신 서비스를 해석할 Consul 네임스페이스를 지정합니다. 이 매개변수를 지정하지 않으면 현재 네임스페이스가 사용됩니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Destination{}.Partition

현재 파티션 대신 서비스를 해석할 Consul admin 파티션을 지정합니다. 이 매개변수를 지정하지 않으면 현재 파티션이 사용됩니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Destination{}.PrefixRewrite

최종 대상으로 프록시하기 전에 HTTP 요청 경로에 대한 재작성을 지정합니다. 이 필드는 이 라우트에 Routes[].Match{}.HTTP{}.PathPrefix 또는 Routes[].Match{}.HTTP{}.PathExact 중 하나가 구성되어 있어야 합니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

Routes[].Destination{}.RequestTimeout

재시도 시도를 포함하여 전체 다운스트림 요청이 처리되는 데 허용되는 총 시간을 지정합니다.

값 (Values)

  • 기본값: 0
  • 데이터 유형: 정수

Routes[].Destination{}.IdleTimeout

요청 스트림이 유휴 상태로 있을 수 있는 총 시간을 지정합니다.

값 (Values)

  • 기본값: 0
  • 데이터 유형: 정수

Routes[].Destination{}.NumRetries

재시도 조건이 발생할 때 요청을 재시도할 횟수를 지정합니다. 이 필드와 Destination의 다른 재시도 필드를 구성해 재시도 시도의 논리를 구성하세요. 예제는 재시도 논리 예제 구성을 참조하세요. 값을 0으로 설정할 수 없습니다. 재시도를 비활성화하려면 다른 모든 재시도 설정(RetryOnConnectFailure, RetryOn, RetryOnStatusCodes)을 해제하세요.

값 (Values)

  • 기본값: 1
  • 데이터 유형: 정수

Routes[].Destination{}.RetryOnConnectFailure

재시도 요청을 트리거하는 연결 실패 오류를 지정합니다. 이 필드와 Destination의 다른 재시도 필드를 구성해 재시도 시도의 논리를 구성하세요. 예제는 재시도 논리 예제 구성을 참조하세요.

값 (Values)

  • 기본값: false
  • 데이터 유형: boolean

Routes[].Destination{}.RetryOn[]

업스트림 서비스의 응답에 따라 Consul이 요청을 재시도할 조건 목록을 지정합니다. 이 필드와 Destination 객체의 다른 재시도 필드를 구성해 재시도 시도의 논리를 구성하세요. 예제는 재시도 논리 예제 구성을 참조하세요.

다음 재시도 조건이 지원됩니다:

조건 (Conditions) 설명 (Description)
5xx 업스트림이 5xx 오류 코드로 응답하거나 전혀 응답하지 않으면 Consul이 요청을 재시도합니다.
gateway-error 업스트림이 502, 503, 또는 504 오류로 응답하면 Consul이 요청을 재시도합니다.
reset 업스트림이 전혀 응답하지 않으면 Consul이 요청을 재시도합니다.
connect-failure 업스트림에 대한 연결이 실패하면 Consul이 요청을 재시도합니다.
envoy-ratelimited x-envoy-ratelimited 헤더가 있으면 Consul이 요청을 재시도합니다.
retriable-4xx 업스트림이 재시도 가능한 4xx 코드로 응답하면 Consul이 요청을 재시도합니다.
refused-stream 업스트림이 REFUSED_STREAM 오류 코드로 스트림을 재설정하면 Consul이 요청을 재시도합니다.
cancelled 응답 헤더의 gRPC 상태 코드가 cancelled이면 Consul이 요청을 재시도합니다.
deadline-exceeded 응답 헤더의 gRPC 상태 코드가 deadline-exceeded이면 Consul이 요청을 재시도합니다.
internal 응답 헤더의 gRPC 상태 코드가 internal이면 Consul이 요청을 재시도합니다.
resource-exhausted 응답 헤더의 gRPC 상태 코드가 resource-exhausted이면 Consul이 요청을 재시도합니다.
unavailable 응답 헤더의 gRPC 상태 코드가 unavailable이면 Consul이 요청을 재시도합니다.

값 (Values)

Routes[].Destination{}.RetryOnStatusCodes

재시도 요청을 트리거하는 HTTP 응답 상태 코드의 정수 목록을 지정합니다. 이 필드와 Destination의 다른 재시도 필드를 구성해 재시도 시도의 논리를 구성하세요. 예제는 재시도 논리 예제 구성을 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 정수 목록

Routes[].Destination{}.RequestHeaders

서비스 라우터로 라우팅된 요청에 적용되는 HTTP 관련 헤더 수정 규칙 집합을 지정합니다. 리스너 프로토콜이 tcp로 설정된 경우 요청 헤더를 구성할 수 없습니다.

값 (Values)

  • 기본값: 없음
  • 값: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 객체:
    • Add: 하나 이상의 키-값 쌍 맵.
    • Set: 하나 이상의 키-값 쌍 맵.
    • Remove: 하나 이상의 키-값 쌍 맵.

다음 표는 요청 헤더의 값을 구성하는 방법을 설명합니다:

규칙 (Rule) 설명 (Description) 유형 (Type)
Add 헤더에 추가할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 값이 추가되고 Consul은 두 헤더를 모두 적용합니다. 변수 자리 표시자를 사용할 수 있습니다. 문자열 맵
Set 요청 헤더에 추가하거나 기존 헤더 값을 대체할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 Consul이 헤더 값을 대체합니다. 변수 자리 표시자를 사용할 수 있습니다. 문자열 맵
Remove 제거할 헤더 목록을 정의합니다. Consul은 정확히 일치하는 내용을 포함하는 헤더만 제거합니다. 헤더 이름은 대소문자를 구분하지 않습니다. 문자열 목록

변수 자리 표시자 사용 (Use variable placeholders)

Add 및 Set의 경우 서비스가 Envoy를 프록시로 사용하도록 구성되면 값에 동적 메타데이터를 값으로 보간하기 위한 변수가 포함될 수 있습니다. 예를 들어 구성 항목에서 %DOWNSTREAM_REMOTE_ADDRESS% 변수를 사용하면 라우팅이 발생할 때 생성되는 값을 전달할 수 있습니다.

Routes[].Destination{}.ResponseHeaders

서비스 라우터로 라우팅된 응답에 적용되는 HTTP 관련 헤더 수정 규칙 집합을 지정합니다. 리스너 프로토콜이 tcp로 설정된 경우 요청 헤더를 구성할 수 없습니다.

값 (Values)

  • 기본값: 없음
  • 값: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 객체:
    • Add: 하나 이상의 문자열 키-값 쌍 맵.
    • Set: 하나 이상의 문자열 키-값 쌍 맵.
    • Remove: 하나 이상의 문자열 키-값 쌍 맵.

다음 표는 응답 헤더의 값을 구성하는 방법을 설명합니다:

규칙 (Rule) 설명 (Description) 유형 (Type)
Add 헤더에 추가할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 값이 추가되고 Consul은 두 헤더를 모두 적용합니다. 변수 자리 표시자를 사용할 수 있습니다. 문자열 맵
Set 요청 헤더에 추가하거나 기존 헤더 값을 대체할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 Consul이 헤더 값을 대체합니다. 변수 자리 표시자를 사용할 수 있습니다. 문자열 맵
Remove 제거할 헤더 목록을 정의합니다. Consul은 정확히 일치하는 내용을 포함하는 헤더만 제거합니다. 헤더 이름은 대소문자를 구분하지 않습니다. 문자열 목록

변수 자리 표시자 사용 (Use variable placeholders)

Add 및 Set의 경우 서비스가 Envoy를 프록시로 사용하도록 구성되면 값에 동적 메타데이터를 값으로 보간하기 위한 변수가 포함될 수 있습니다. 예를 들어 구성 항목에서 %DOWNSTREAM_REMOTE_ADDRESS% 변수를 사용하면 라우팅이 발생할 때 생성되는 값을 전달할 수 있습니다.

apiVersion

구성 항목을 Kubernetes 구성에 매핑하는 Consul API의 버전을 지정하는 Kubernetes 전용 매개변수입니다. 값은 consul.hashicorp.com/v1alpha1이어야 합니다.

kind

구현할 구성 항목의 유형을 지정합니다.

값 (Values)

  • 기본값: 없음
  • 이 필드는 필수입니다.
  • 데이터 유형: ServiceRouter로 설정해야 하는 문자열 값입니다.

metadata.name

구성 항목의 이름을 지정합니다. 이름은 특정 클러스터에 구성 항목을 적용하는 것과 같은 Consul 작업을 수행할 때 구성 항목을 참조하는 데 사용할 수 있는 메타데이터입니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

metadata.namespace

Enterprise

서비스를 해석하는 데 사용할 Consul 네임스페이스를 지정합니다. Consul 네임스페이스를 Kubernetes 네임스페이스에 다양한 방식으로 매핑할 수 있습니다. 추가 정보는 Kubernetes의 Consul용 CRD(사용자 정의 리소스 정의)를 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec

ServiceRouter 구성 항목에 대한 세부 정보를 포함하는 맵입니다. apiVersion, kind, metadata 필드는 spec 필드의 형제입니다. 다른 모든 구성은 하위 항목입니다.

값 (Values)

  • 기본값: 없음
  • 이 필드는 필수입니다.
  • 데이터 유형: spec.routes 구성이 포함된 객체

spec.meta

KV 저장소에 추가할 키-값 쌍을 지정합니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 하나 이상의 키-값 쌍 맵
    • 키: 문자열
    • 값: 문자열, 정수, 또는 부동 소수점

spec.routes

L7 요청에 대한 가능한 라우트를 정의합니다. Consul은 구성 항목에 나타나는 순서대로 라우트 목록에 대해 트래픽을 평가합니다. 여러 라우트가 요청을 충족하면 Consul은 일치하는 첫 번째 라우트를 사용합니다. 제공된 라우트와 일치하지 않는 트래픽은 기본 서비스로 라우팅됩니다.

값 (Values)

  • 기본값: 없음

  • 데이터 유형: 다음 매개변수를 포함할 수 있는 목록:

  • match

  • destination

spec.routes[].match

Consul이 들어오는 L7 트래픽과 비교하는 기준 집합을 설명합니다. 비어 있거나 생략하면 catch-all 역할을 합니다.

값 (Values)

spec.routes[].match.http

일치 항목에 대해 들어오는 L7 트래픽을 평가하는 데 사용되는 HTTP 기준 집합을 지정합니다.

HTTP 요청 경로에서 일치시킬 때는 한 번에 하나의 경로만 일치시킬 수 있습니다. 단일 HTTP 맵에 pathExact, pathPrefix, pathRegex를 함께 구성하지 마세요.

값 (Values)

spec.routes[].match.http.pathExact

HTTP 요청 경로에서 일치시킬 정확한 경로를 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 pathPrefix 또는 pathRegex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.pathPrefix

HTTP 요청 경로에서 일치시킬 경로 접두사를 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 pathExact 또는 pathRegex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.pathRegex

HTTP 요청 경로에서 일치시킬 정규 표현식을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 pathExact 또는 pathPrefix를 구성하지 마세요. 정규 표현식 필드의 구문은 프록시별입니다. Envoy를 사용할 때 사용하는 Envoy 버전에 따라 Envoy v1.11.2 이상 문서 또는 Envoy v1.11.1 이하 문서를 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.methods

일치가 적용되는 HTTP 메서드를 지정합니다. 지정하지 않으면 요청은 모든 HTTP 메서드와 일치합니다. 제공하면 이름은 문자열로 형식화된 유효한 메서드여야 합니다.

문자열 값은 유효한 HTTP 요청 메서드여야 합니다.

값 (Values)

spec.routes[].match.http.header

일치시킬 HTTP 요청 헤더의 정보를 지정합니다. 둘 이상의 필드가 구성되면 서비스 라우팅이 적용되려면 모든 기준이 일치해야 합니다.

이 필드를 사용할 때는 같은 HTTP 맵에 present, exact, prefix, suffix, regex를 함께 구성하지 마세요. HTTP 헤더에 대한 일치 기준을 구성할 때는 상호 배타적이므로 한 번에 하나의 필드만 사용할 수 있습니다.

값 (Values)

spec.routes[].match.http.header.name

일치시킬 HTTP 헤더의 이름을 지정합니다. 이 필드는 spec.routes[].match.http.header를 사용할 때 필수입니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.header.present

Name 필드의 값이 HTTP 헤더의 어디에든 있으면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 exact, prefix, suffix 또는 regex를 구성하지 마세요.

값 (Values)

  • 기본값: false
  • 데이터 유형: boolean

spec.routes[].match.http.header.exact

주어진 이름의 헤더가 이 정확한 값이면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 present, prefix, suffix 또는 regex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.header.prefix

주어진 이름의 헤더가 이 접두사를 가지면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 present, exact, suffix 또는 regex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.header.suffix

주어진 이름의 헤더가 이 접미사를 가지면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 present, exact, prefix 또는 regex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.header.regex

주어진 이름의 헤더가 이 정규 표현식과 일치하면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 HTTP 맵에 present, exact, prefix 또는 suffix를 구성하지 마세요. 정규 표현식 필드의 구문은 프록시별입니다. Envoy를 사용할 때 사용하는 Envoy 버전에 따라 Envoy v1.11.2 이상 문서 또는 Envoy v1.11.1 이하 문서를 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.header.invert

HTTP 헤더 일치 로직을 반전해야 함을 지정합니다. 일치 기준이 있는 요청은 라우팅되지 않습니다.

값 (Values)

  • 기본값: false
  • 데이터 유형: boolean

spec.routes[].match.http.queryParam

HTTP 쿼리 매개변수에 일치시킬 정보를 지정합니다. 둘 이상의 필드가 구성되면 서비스 라우팅이 적용되려면 모든 기준이 일치해야 합니다.

이 필드를 사용할 때는 단일 맵에 present, exact, regex를 함께 구성하지 마세요. HTTP 쿼리 매개변수에 대한 일치 기준을 구성할 때는 상호 배타적이므로 한 번에 하나의 필드만 사용할 수 있습니다.

값 (Values)

  • 기본값: 없음

  • 데이터 유형: 맵 목록. 각 맵은 다음 매개변수 중 하나 이상을 포함할 수 있습니다:

spec.routes[].match.http.queryParam[].name

일치시킬 HTTP 쿼리 매개변수의 이름을 지정합니다. 이 값은 spec.routes[].match.http.queryParam을 사용할 때 필수입니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.queryParam[].present

name 필드의 값이 HTTP 쿼리 매개변수의 어디에든 있으면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 맵에 exact 또는 regex를 구성하지 마세요.

값 (Values)

  • 기본값: false
  • 데이터 유형: boolean

spec.routes[].match.http.queryParam[].exact

주어진 이름의 쿼리 매개변수가 이 정확한 값이면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 맵에 present 또는 regex를 구성하지 마세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].match.http.queryParam[].regex

주어진 이름의 쿼리 매개변수가 이 정규 표현식과 일치하면 요청이 일치함을 지정합니다. 이 필드를 사용할 때는 같은 맵에 present 또는 exact를 구성하지 마세요. 정규 표현식 필드의 구문은 프록시별입니다. Envoy를 사용할 때 사용하는 Envoy 버전에 따라 Envoy v1.11.2 이상 문서 또는 Envoy v1.11.1 이하 문서를 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].destination

일치하는 요청을 라우팅할 대상 서비스와, 라우팅될 때 요청이 따를 동작을 지정합니다.

값 (Values)

spec.routes[].destination.service

해석할 서비스의 이름을 지정합니다. 이 매개변수를 지정하지 않으면 기본 서비스 이름은 구성 항목의 metadata.name 필드에서 상속됩니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].destination.serviceSubset

service resolver 구성 항목에서 해당 서비스의 defaultSubset로 정의된 것 대신 해석할 지정된 서비스의 명명된 하위 집합을 지정합니다. 이 매개변수를 지정하지 않으면 기본 하위 집합이 사용됩니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].destination.namespace

현재 네임스페이스 대신 서비스를 해석할 Consul 네임스페이스를 지정합니다. 이 매개변수를 지정하지 않으면 현재 네임스페이스가 사용됩니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].destination.partition

현재 파티션 대신 서비스를 해석할 Consul admin 파티션을 지정합니다. 이 매개변수를 지정하지 않으면 현재 파티션이 사용됩니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].destination.prefixRewrite

최종 대상으로 프록시하기 전에 HTTP 요청 경로에 대한 재작성을 지정합니다. 이 필드는 이 라우트에 spec.routes[].match.http.pathPrefix 또는 spec.routes[].match.http.pathExact 중 하나가 구성되어 있어야 합니다.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 문자열

spec.routes[].destination.requestTimeout

재시도 시도를 포함하여 전체 다운스트림 요청이 처리되는 데 허용되는 총 시간을 지정합니다.

값 (Values)

  • 기본값: 0
  • 데이터 유형: 정수

spec.routes[].destination.idleTimeout

요청 스트림이 유휴 상태로 있을 수 있는 총 시간을 지정합니다.

값 (Values)

  • 기본값: 0
  • 데이터 유형: 정수

spec.routes[].destination.numRetries

재시도 조건이 발생할 때 요청을 재시도할 횟수를 지정합니다. 이 필드와 spec.routes.destination의 다른 재시도 필드를 구성해 재시도 시도의 논리를 구성하세요. 예제는 재시도 논리 예제 구성을 참조하세요. 값을 0으로 설정할 수 없습니다. 재시도를 비활성화하려면 다른 모든 재시도 설정(retryOnConnectFailure, retryOn, retryOnStatusCodes)을 해제하세요.

값 (Values)

  • 기본값: 1
  • 데이터 유형: 정수

spec.routes[].destination.retryOnConnectFailure

재시도 요청을 트리거하는 연결 실패 오류를 지정합니다. 이 필드와 spec.routes[].destination의 다른 재시도 필드를 구성해 재시도 시도의 논리를 구성하세요. 예제는 재시도 논리 예제 구성을 참조하세요.

값 (Values)

  • 기본값: false
  • 데이터 유형: boolean

spec.routes[].destination.retryOn

업스트림 서비스의 응답에 따라 Consul이 요청을 재시도할 조건 목록을 지정합니다. 이 필드와 spec.routes[].destination 객체의 다른 재시도 필드를 구성해 재시도 시도의 논리를 구성하세요. 예제는 재시도 논리 예제 구성을 참조하세요.

다음 재시도 조건이 지원됩니다:

조건 (Conditions) 설명 (Description)
5xx 업스트림이 5xx 오류 코드로 응답하거나 전혀 응답하지 않으면 Consul이 요청을 재시도합니다.
gateway-error 업스트림이 502, 503, 또는 504 오류로 응답하면 Consul이 요청을 재시도합니다.
reset 업스트림이 전혀 응답하지 않으면 Consul이 요청을 재시도합니다.
connect-failure 업스트림에 대한 연결이 실패하면 Consul이 요청을 재시도합니다.
envoy-ratelimited x-envoy-ratelimited 헤더가 있으면 Consul이 요청을 재시도합니다.
retriable-4xx 업스트림이 재시도 가능한 4xx 코드로 응답하면 Consul이 요청을 재시도합니다.
refused-stream 업스트림이 REFUSED_STREAM 오류 코드로 스트림을 재설정하면 Consul이 요청을 재시도합니다.
cancelled 응답 헤더의 gRPC 상태 코드가 cancelled이면 Consul이 요청을 재시도합니다.
deadline-exceeded 응답 헤더의 gRPC 상태 코드가 deadline-exceeded이면 Consul이 요청을 재시도합니다.
internal 응답 헤더의 gRPC 상태 코드가 internal이면 Consul이 요청을 재시도합니다.
resource-exhausted 응답 헤더의 gRPC 상태 코드가 resource-exhausted이면 Consul이 요청을 재시도합니다.
unavailable 응답 헤더의 gRPC 상태 코드가 unavailable이면 Consul이 요청을 재시도합니다.

값 (Values)

spec.routes[].destination.retryOnStatusCodes

재시도 요청을 트리거하는 HTTP 응답 상태 코드의 정수 목록을 지정합니다. 이 필드와 spec.routes[].destination의 다른 재시도 필드를 구성해 재시도 시도의 논리를 구성하세요. 예제는 재시도 논리 예제 구성을 참조하세요.

값 (Values)

  • 기본값: 없음
  • 데이터 유형: 정수 목록

spec.routes[].destination.requestHeaders

서비스 라우터로 라우팅된 요청에 적용되는 HTTP 관련 헤더 수정 규칙 집합을 지정합니다. 리스너 프로토콜이 tcp로 설정된 경우 요청 헤더를 구성할 수 없습니다.

값 (Values)

  • 기본값: 없음
  • 값: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 객체:
    • add: 하나 이상의 키-값 쌍 맵.
    • set: 하나 이상의 키-값 쌍 맵.
    • remove: 하나 이상의 키-값 쌍 맵.

다음 표는 요청 헤더의 값을 구성하는 방법을 설명합니다:

규칙 (Rule) 설명 (Description) 유형 (Type)
add 헤더에 추가할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 값이 추가되고 Consul은 두 헤더를 모두 적용합니다. 변수 자리 표시자를 사용할 수 있습니다. 문자열 맵
set 요청 헤더에 추가하거나 기존 헤더 값을 대체할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 Consul이 헤더 값을 대체합니다. 변수 자리 표시자를 사용할 수 있습니다. 문자열 맵
remove 제거할 헤더 목록을 정의합니다. Consul은 정확히 일치하는 내용을 포함하는 헤더만 제거합니다. 헤더 이름은 대소문자를 구분하지 않습니다. 문자열 목록

변수 자리 표시자 사용 (Use variable placeholders)

add 및 set의 경우 서비스가 Envoy를 프록시로 사용하도록 구성되면 값에 동적 메타데이터를 값으로 보간하기 위한 변수가 포함될 수 있습니다. 예를 들어 구성 항목에서 %DOWNSTREAM_REMOTE_ADDRESS% 변수를 사용하면 라우팅이 발생할 때 생성되는 값을 전달할 수 있습니다.

spec.routes[].destination.responseHeaders

서비스 라우터로 라우팅된 응답에 적용되는 HTTP 관련 헤더 수정 규칙 집합을 지정합니다. 리스너 프로토콜이 tcp로 설정된 경우 요청 헤더를 구성할 수 없습니다.

값 (Values)

  • 기본값: 없음
  • 값: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 객체:
    • add: 하나 이상의 문자열 키-값 쌍 맵.
    • set: 하나 이상의 문자열 키-값 쌍 맵.
    • remove: 하나 이상의 문자열 키-값 쌍 맵.

다음 표는 응답 헤더의 값을 구성하는 방법을 설명합니다:

규칙 (Rule) 설명 (Description) 유형 (Type)
add 헤더에 추가할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 값이 추가되고 Consul은 두 헤더를 모두 적용합니다. 변수 자리 표시자를 사용할 수 있습니다. 문자열 맵
set 요청 헤더에 추가하거나 기존 헤더 값을 대체할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 Consul이 헤더 값을 대체합니다. 변수 자리 표시자를 사용할 수 있습니다. 문자열 맵
remove 제거할 헤더 목록을 정의합니다. Consul은 정확히 일치하는 내용을 포함하는 헤더만 제거합니다. 헤더 이름은 대소문자를 구분하지 않습니다. 문자열 목록

변수 자리 표시자 사용 (Use variable placeholders)

add 및 set의 경우 서비스가 Envoy를 프록시로 사용하도록 구성되면 값에 동적 메타데이터를 값으로 보간하기 위한 변수가 포함될 수 있습니다. 예를 들어 구성 항목에서 %DOWNSTREAM_REMOTE_ADDRESS% 변수를 사용하면 라우팅이 발생할 때 생성되는 값을 전달할 수 있습니다.

예제 (Examples)

다음 예제는 특정 사용 사례에 대한 일반적인 서비스 라우터 구성 패턴을 보여줍니다.

경로 접두사 일치 (Path prefix matching)

다음 예제는 web 서비스에 대한 HTTP 요청이 경로 시작 부분에 /admin이 있을 때 admin이라는 서비스로 라우팅합니다.

HCLYAMLJSON

Kind = "service-router"
Name = "web"
Routes = [
  {
    Match {
      HTTP {
        PathPrefix = "/admin"
      }
    }


    Destination {
      Service = "admin"
    }
  },
]




apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceRouter
metadata:
  name: web
spec:
  routes:
    - match:
        http:
          pathPrefix: /admin
      destination:
        service: admin




{
  "Kind": "service-router",
  "Name": "web",
  "Routes": [
    {
      "Match": {
        "HTTP": {
          "PathPrefix": "/admin"
        }
      },
      "Destination": {
        "Service": "admin"
      }
    }
  ]
}

대소문자 구분 없는 경로 접두사 일치 (Path prefix matching with case insensitive)

다음 예제는 web 서비스에 대한 HTTP 요청이 경로 시작 부분에 /admin 또는 /Admin이 있을 때 admin이라는 서비스로 라우팅합니다.

HCLYAMLJSON

Kind = "service-router"
Name = "web"
Routes = [
  {
    Match {
      HTTP {
        PathPrefix = "/Admin"
        CaseInsensitive = true
      }
    }


    Destination {
      Service = "admin"
    }
  },
]




apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceRouter
metadata:
  name: web
spec:
  routes:
    - match:
        http:
          pathPrefix: /Admin
          caseInsensitive: true
      destination:
        service: admin




{
  "Kind": "service-router",
  "Name": "web",
  "Routes": [
    {
      "Match": {
        "HTTP": {
          "PathPrefix": "/Admin",
          "CaseInsensitive": true
        }
      },
      "Destination": {
        "Service": "admin"
      }
    }
  ]
}

헤더와 쿼리 매개변수 일치 (Match a header and query parameter)

다음 예제는 요청에 헤더 또는 URL 매개변수에 x-debug가 있을 때 web 서비스에 대한 HTTP 트래픽을 canary 인스턴스 하위 집합으로 라우팅합니다.

HCLYAMLJSON

Kind = "service-router"
Name = "web"
Routes = [
  {
    Match {
      HTTP {
        Header = [
          {
            Name  = "x-debug"
            Exact = "1"
          },
        ]
      }
    }
    Destination {
      Service       = "web"
      ServiceSubset = "canary"
    }
  },
  {
    Match {
      HTTP {
        QueryParam = [
          {
            Name  = "x-debug"
            Exact = "1"
          },
        ]
      }
    }
    Destination {
      Service       = "web"
      ServiceSubset = "canary"
    }
  },
]




apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceRouter
metadata:
  name: web
spec:
  routes:
    - match:
        http:
          header:
            - name: x-debug
              exact: '1'
      destination:
        service: web
        serviceSubset: canary
    - match:
        http:
          queryParam:
            - name: x-debug
              exact: '1'
      destination:
        service: web
        serviceSubset: canary




{
  "Kind": "service-router",
  "Name": "web",
  "Routes": [
    {
      "Match": {
        "HTTP": {
          "Header": [
            {
              "Name": "x-debug",
              "Exact": "1"
            }
          ]
        }
      },
      "Destination": {
        "Service": "web",
        "ServiceSubset": "canary"
      }
    },
    {
      "Match": {
        "HTTP": {
          "QueryParam": [
            {
              "Name": "x-debug",
              "Exact": "1"
            }
          ]
        }
      },
      "Destination": {
        "Service": "web",
        "ServiceSubset": "canary"
      }
    }
  ]
}

gRPC 라우팅 (gRPC routing)

다음 예제는 gRPC 요청이 mycompany.BillingService/GenerateInvoice와 정확히 일치하는 HTTP 경로에서 올 때 invoice-generator 서비스로 라우팅합니다. gRPC 메서드 호출은 HTTP/2를 사용하므로 HTTP 경로 일치 규칙을 사용해 트래픽을 재라우팅할 수 있습니다.

HCLYAMLJSON

Kind = "service-router"
Name = "billing"
Routes = [
  {
    Match {
      HTTP {
        PathExact = "/mycompany.BillingService/GenerateInvoice"
      }
    }


    Destination {
      Service = "invoice-generator"
    }
  },
]




apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceRouter
metadata:
  name: billing
spec:
  routes:
    - match:
        http:
          pathExact: /mycompany.BillingService/GenerateInvoice
      destination:
        service: invoice-generator




{
  "Kind": "service-router",
  "Name": "billing",
  "Routes": [
    {
      "Match": {
        "HTTP": {
          "PathExact": "/mycompany.BillingService/GenerateInvoice"
        }
      },
      "Destination": {
        "Service": "invoice-generator"
      }
    }
  ]
}

재시도 논리 (Retry logic)

다음 예제는 orders 서비스에 대한 요청이 서비스 메시를 통과할 때, 요청이 시작된 HTTP 경로에 따라 Consul이 products 서비스 또는 procurement 서비스로 트래픽을 라우팅하도록 구성합니다:

  • /coffees 경로에서 시작되면 요청은 products 서비스로 라우팅되고 15초 후에 시간 초과되며 5회 재시도합니다.
  • /orders 경로에서 시작되면 요청은 procurement 서비스로 라우팅되고 10초 후에 시간 초과되며 3회 재시도합니다.

HCLYAMLJSON

Kind = "service-router"
Name = "orders"
Routes = [
  {
    Match {
        HTTP {
            PathPrefix = "/coffees"
        }
    }


    Destination {
        Service = "products"
        RequestTimeout = "15s"
        NumRetries = 5
        RetryOnConnectFailure = true
        RetryOn = ["reset"]
    }
  },
  {
    Match {
        HTTP {
            PathPrefix = "/orders"
        }
    }


    Destination {
        Service = "procurement"
        RequestTimeout = "10s"
        NumRetries = 3
        RetryOnConnectFailure = true
        RetryOn = ["reset"]
    }
  }
]




apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceRouter
metadata:
  name: orders
spec:
  routes:
    - match:
        http:
          pathExact: /coffees
      destination:
        service: products
        requestTimeout: 15s
        numRetries: 5
        retryOnConnectFailure: true
        retryOn: ['reset']
    - match:
        http:
          pathExact: /orders
      destination:
        service: procurement
        requestTimeout: 10s
        numRetries: 3
        retryOnConnectFailure: true
        retryOn: ['reset']




{
    "Kind": "service-router",
    "Name": "orders",
    "Routes": [
        {
            "Match": {
                "HTTP": {
                    "PathPrefix": "/coffees"
                }
            },
            "Destination": {
                "NumRetries": 5,
                "RequestTimeout": "15s",
                "RetryOnConnectFailure": true,
                "RetryOn": ["reset"],
                "Service": "procurement"
            }
        },
        {
            "Match": {
                "HTTP": {
                    "PathPrefix": "/orders"
                }
            },
            "Destination": {
                "NumRetries": 3,
                "RequestTimeout": "10s",
                "RetryOnConnectFailure": true,
                "RetryOn": ["reset"],
                "Service": "procurement"
            }
        }
    ]
}

더 알아보기 (Learn more)