서비스 라우터 구성 항목
서비스 라우터 구성 항목 (Service router configuration entry)
이 페이지는 서비스 라우터(service router) 구성 항목에 대한 참조 정보를 제공해요. 서비스 라우터는 L7 네트워크 정보를 사용하여 서비스에 대한 트래픽 요청을 하나 이상의 특정 서비스 인스턴스로 리디렉션해요.
출처: 문서
본문
이 페이지는 서비스 라우터 구성 항목에 대한 참조 정보를 제공합니다. 서비스 라우터는 L7 네트워크 정보를 사용하여 서비스에 대한 트래픽 요청을 하나 이상의 특정 서비스 인스턴스로 리디렉션합니다.
추가 정보는 L7 트래픽 관리 개요를 참조하세요.
구성 모델 (Configuration model)
다음 목록은 이 구성 항목의 필드 계층, 언어별 데이터 유형 및 요구 사항을 설명합니다. 속성 이름을 클릭하면 기본값을 포함한 추가 세부 정보를 볼 수 있습니다.
HCL and JSONYAML
Enterprise
Partition: string |default
Enterprise
Meta: mapRoutes: listMatch: mapHTTP: mapPathExact: stringPathPrefix: stringPathRegex: stringCaseInsensitive: boolean |falseMethods: listHeader: listQueryParam: list
Destination: mapService: stringServiceSubset: stringNamespace: string
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 toconsul.hashicorp.com/v1alpha1kind: string | required | must be set toServiceRoutermetadata: map | required
Enterprise
spec: map | requiredroutes: listmatch: mapdestination: mapservice: stringserviceSubset: stringnamespace: string
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)
-
기본값: 없음
-
데이터 유형: 다음 매개변수를 포함할 수 있는 목록:
Routes[].Match
Consul이 들어오는 L7 트래픽과 비교하는 기준 집합을 설명합니다. 비어 있거나 생략하면 catch-all 역할을 합니다.
값 (Values)
- 기본값: 없음
- 데이터 유형:
Routes[].Match{}.HTTP매개변수를 포함하는 맵.
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)
- 기본값: 없음
- 값: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 객체:
다음 표는 요청 헤더의 값을 구성하는 방법을 설명합니다:
| 규칙 (Rule) | 설명 (Description) | 유형 (Type) |
|---|---|---|
Add |
헤더에 추가할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 값이 추가되고 Consul은 두 헤더를 모두 적용합니다. 변수 자리 표시자를 사용할 수 있습니다. | 문자열 맵 |
Set |
요청 헤더에 추가하거나 기존 헤더 값을 대체할 키-값 쌍 집합을 정의합니다. 키로 헤더 이름을 사용하세요. 헤더 이름은 대소문자를 구분하지 않습니다. 같은 이름의 헤더 값이 이미 있으면 Consul이 헤더 값을 대체합니다. 변수 자리 표시자를 사용할 수 있습니다. | 문자열 맵 |
Remove |
제거할 헤더 목록을 정의합니다. Consul은 정확히 일치하는 내용을 포함하는 헤더만 제거합니다. 헤더 이름은 대소문자를 구분하지 않습니다. | 문자열 목록 |
변수 자리 표시자 사용 (Use variable placeholders)
Add 및 Set의 경우 서비스가 Envoy를 프록시로 사용하도록 구성되면 값에 동적 메타데이터를 값으로 보간하기 위한 변수가 포함될 수 있습니다. 예를 들어 구성 항목에서 %DOWNSTREAM_REMOTE_ADDRESS% 변수를 사용하면 라우팅이 발생할 때 생성되는 값을 전달할 수 있습니다.
Routes[].Destination{}.ResponseHeaders
서비스 라우터로 라우팅된 응답에 적용되는 HTTP 관련 헤더 수정 규칙 집합을 지정합니다. 리스너 프로토콜이 tcp로 설정된 경우 요청 헤더를 구성할 수 없습니다.
값 (Values)
- 기본값: 없음
- 값: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 객체:
다음 표는 응답 헤더의 값을 구성하는 방법을 설명합니다:
| 규칙 (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)
-
기본값: 없음
-
데이터 유형: 다음 매개변수를 포함할 수 있는 목록:
spec.routes[].match
Consul이 들어오는 L7 트래픽과 비교하는 기준 집합을 설명합니다. 비어 있거나 생략하면 catch-all 역할을 합니다.
값 (Values)
- 기본값: 없음
- 데이터 유형:
spec.routes[].match.http매개변수를 포함하는 맵.
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)
- 기본값: 없음
- 값: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 객체:
다음 표는 요청 헤더의 값을 구성하는 방법을 설명합니다:
| 규칙 (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)
- 기본값: 없음
- 값: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 객체:
다음 표는 응답 헤더의 값을 구성하는 방법을 설명합니다:
| 규칙 (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"
}
}
]
}