Envoy 프록시 구성 참조
Envoy 프록시 구성 참조 (Envoy proxy configuration reference)
Consul 서비스 메시는 프록시로 Envoy를 사용하는 것을 일급(first-class)으로 지원해요. Consul은 로컬 에이전트에 Envoy의 xDS 구성 API를 제공하는 gRPC 서비스를 선택적으로 노출해 Envoy를 구성해요. Consul은 Envoy 사이드카가 다음 프로토콜로 트래픽을 프록시하도록 구성할 수 있어요.
출처: 문서
본문
Consul 서비스 메시는 프록시로 Envoy를 사용하는 것을 일급(first-class)으로 지원합니다. Consul은 Envoy의 xDS 구성 API를 제공하는 gRPC 서비스를 로컬 에이전트에 선택적으로 노출해 Envoy를 구성합니다.
Consul은 Envoy 사이드카가 다음 프로토콜로 트래픽을 프록시하도록 구성할 수 있습니다.
| 프로토콜 | 서비스 네트워크 지원 |
|---|---|
| HTTP/1.1 | L7 |
| HTTP2 | L7 |
| gRPC | L7 |
| 모든 TCP 기반 프로토콜 | L4 |
Consul 1.5.0 이하에서 Envoy 프록시는 L4에서 TCP 트래픽만 프록시할 수 있습니다.
구성 항목(configuration entries)에서 일부 L7 기능을 구성할 수 있습니다. 프록시 서비스 정의(proxy service definition)에 사용자 정의 Envoy 구성을 추가할 수 있으며, 이를 통해 구성 항목으로 노출되지 않는 Envoy 기능을 활용할 수 있습니다. Envoy 기능을 구현하려면 Consul Envoy 확장(Consul Envoy extensions)을 사용할 수도 있습니다.
참고: Consul과 함께 Envoy를 사용하면서
consul connect envoy명령을 사용하지 않는 경우, Envoy 1.11.0 이전 버전에 대해서는--max-obj-name-len옵션을 256 이상으로 설정해 Envoy를 실행해야 합니다.
지원 버전 (Supported Versions)
다음 매트릭스는 현재 지원되는 주요 Consul 릴리스에 대한 Envoy 호환성을 설명합니다.
- Consul 커뮤니티 에디션(CE)과 Enterprise의 최신(N) 릴리스
- Consul Enterprise의 이전 2개 주요 릴리스(N-1과 N-2)
- 최신 2개 Consul Enterprise LTS 주요 릴리스
이전 Consul 버전 호환성은 이전 릴리스의 이 페이지 버전을 참조하세요.
Envoy와 Consul 클라이언트 에이전트 (Envoy and Consul Client Agent)
모든 주요 Consul 릴리스는 처음에 4개의 주요 Envoy 릴리스를 지원합니다.
그러나 Consul Enterprise LTST(Long Term Support) 릴리스는 유지 관리되는 Envoy 버전과의 호환성을 보장하기 위해 마이너 릴리스에서 Envoy 버전 호환성 창을 확장합니다. 표준(비-LTS) Consul Enterprise 릴리스는 이전 주요 Envoy 버전이 수명 종료(EOL)에 도달한 경우 중요한 보안 수정을 받기 위해 Envoy의 새 주요 버전에 대한 지원을 확장할 수도 있습니다.
모든 주요 Consul 릴리스는 사용자가 Envoy의 버그 및 보안 수정의 혜택을 누릴 수 있도록 특정 Envoy 패치 릴리스와의 호환성을 유지 관리하고 테스트합니다.
표준 릴리스 (Standard releases)
달리 명시되지 않는 한 다음 호환성 표의 행은 Consul Enterprise와 Consul 커뮤니티 에디션(CE) 모두에 적용됩니다.
| Consul 버전 | 호환 Envoy 버전 |
|---|---|
| 2.0.x CE | 1.38.x, 1.37.x, 1.35.x |
| 1.22.x CE | 1.38.x, 1.37.x, 1.35.x |
| 1.21.x CE | 1.38.x, 1.37.x, 1.35.x |
| 1.20.x CE | 1.33.x, 1.32.x, 1.31.x, 1.30.x |
| 1.19.x CE | 1.33.x, 1.32.x, 1.29.x, 1.28.x, 1.27.x, 1.26.x |
| 1.18.x CE | 1.33.x, 1.32.x, 1.31.x, 1.30.x, 1.29.x, 1.28.x, 1.27.x, 1.26.x, 1.25.x |
| 1.17.x | 1.27.x, 1.26.x, 1.25.x, 1.24.x |
| 1.16.x | 1.26.x, 1.25.x, 1.24.x, 1.23.x |
Enterprise Long Term Support 릴리스 (Enterprise Long Term Support releases)
활성 Consul Enterprise LTS(Long Term Support) 릴리스는 LTS 릴리스가 유지 관리 종료에 도달할 때까지 Envoy 버전 호환성 창을 확장합니다.
| Consul 버전 | 호환 Envoy 버전 |
|---|---|
| 1.21.x Ent | 1.38.x, 1.37.x, 1.35.x |
| 1.18.x Ent | 1.33.x, 1.32.x, 1.31.x, 1.30.x, 1.29.x, 1.28.x, 1.27.x, 1.26.x, 1.25.x |
| 1.15.x Ent | 1.29.x, 1.28.x, 1.27.x, 1.26.x, 1.25.x, 1.24.x, 1.23.x, 1.22.x |
Envoy와 Consul Dataplane (Envoy and Consul Dataplane)
Consul dataplane 구성 요소는 Consul v1.14에 도입되었으며, Consul 클라이언트를 사용하지 않고 Envoy 프록시를 관리하는 방법입니다.
각 주요 버전의 Consul은 새 주요 버전의 Consul dataplane과 함께 릴리스되며, 이는 Envoy와 consul-dataplane 바이너리를 단일 컨테이너 이미지에 패키징합니다.
원활한 업그레이드를 가능하게 하기 위해 각 주요 버전의 Consul은 이전 및 다음 Consul dataplane 버전도 지원합니다.
커뮤니티 에디션 릴리스와 비교해 Consul Enterprise 릴리스는 Consul dataplane 호환성에 다음과 같은 차이점이 있습니다.
- LTS 전용: 확장 호환성 창 : 활성 Consul Enterprise LTS 릴리스는 다음 Consul LTS 릴리스와 정렬된 Consul dataplane 버전을 포함하도록 Consul dataplane 버전 호환성 창을 확장합니다.
- 유지 관리되는 Envoy 버전 : 유지 관리되는 Consul Enterprise 버전과 정렬된 주요 Consul dataplane 버전은 Envoy의 새 주요 버전을 사용하는 마이너 버전 업데이트를 포함할 수 있습니다. 이러한 마이너 버전 업데이트는 유지 관리되는 Consul dataplane 버전이 유지 관리되는 Envoy 버전을 사용하도록 보장하기 위해 필요합니다.
표준 릴리스 (Standard releases)
달리 명시되지 않는 한 다음 호환성 표의 행은 Consul Enterprise와 Consul 커뮤니티 에디션(CE) 모두에 적용됩니다.
| Consul 버전 | 기본 consul-dataplane 버전 | 기타 호환 consul-dataplane 버전 |
|---|---|---|
| 2.0.x CE | 2.0.x (Envoy 1.38.x) | 1.9.x (Envoy 1.35.x), 1.8.x (Envoy 1.34.x) |
| 1.22.x CE | 1.9.x (Envoy 1.35.x) | 1.8.x (Envoy 1.34.x), 1.7.x (Envoy 1.33.x) |
| 1.21.x CE | 1.8.x (Envoy 1.34.x) | 1.7.x (Envoy 1.33.x), 1.6.x (Envoy 1.32.x) |
| 1.20.x CE | 1.7.x (Envoy 1.33.x) | 1.6.x (Envoy 1.32.x), 1.5.x (Envoy 1.29.x) |
| 1.19.x CE | 1.7.x (Envoy 1.33.x) | 1.6.x (Envoy 1.32.x), 1.5.x (Envoy 1.29.x), 1.4.x (Envoy 1.28.x) |
| 1.18.x CE | 1.7.x (Envoy 1.33.x) | 1.6.x (Envoy 1.32.x), 1.4.x (Envoy 1.28.x), 1.3.x (Envoy 1.27.x) |
| 1.17.x | 1.3.x (Envoy 1.27.x) | 1.4.x (Envoy 1.28.x), 1.2.x (Envoy 1.26.x) |
| 1.16.x | 1.2.x (Envoy 1.26.x) | 1.3.x (Envoy 1.27.x), 1.1.x (Envoy 1.25.x) |
Enterprise Long Term Support 릴리스 (Enterprise Long Term Support releases)
활성 Consul Enterprise LTS(Long Term Support) 릴리스는 LTS 릴리스가 유지 관리 종료에 도달할 때까지 Envoy 버전 호환성 창을 확장합니다.
| Consul 버전 | 기본 consul-dataplane 버전 | 기타 호환 consul-dataplane 버전 |
|---|---|---|
| 1.21.x Ent | 1.8.x (Envoy 1.34.x) | 1.7.x (Envoy 1.33.x), 1.6.x (Envoy 1.32.x) |
| 1.18.x Ent | 1.7.x (Envoy 1.33.x) | 1.6.x (Envoy 1.32.x), 1.4.x (Envoy 1.28.x), 1.3.x (Envoy 1.27.x) |
| 1.15.x Ent | 1.6.x (Envoy 1.32.x) | 1.4.x (Envoy 1.28.x) - 1.0.x (Envoy 1.24.x) |
Envoy 주요 버전을 아우르는 Consul dataplane 릴리스 (Consul dataplane releases that span Envoy major versions)
활성 Consul 버전과 정렬된 주요 Consul dataplane 버전은 Envoy의 새 주요 버전을 사용하는 마이너 버전 업데이트를 포함할 수 있습니다. 이러한 마이너 버전 업데이트는 유지 관리되는 Consul dataplane 버전이 중요한 보안 수정을 포함한 유지 관리되는 Envoy 버전을 사용하도록 보장하기 위해 필요합니다.
| consul-dataplane 버전 범위 | 관련 Consul Enterprise 버전 | 포함된 Envoy 바이너리 버전 |
|---|---|---|
| 1.1.11 - 1.1.latest | 1.15.x Ent | Envoy 1.27.x |
| 1.1.9 - 1.1.10 | 1.15.x Ent | Envoy 1.26.x |
| 1.1.0 - 1.1.8 | 1.15.x Ent | Envoy 1.25.x |
시작하기 (Getting Started)
Envoy를 시작하고 작동하는 예시를 보려면 Envoy를 Consul 서비스 메시와 함께 사용하기(Using Envoy with Consul service mesh) 자습서를 따라갈 수 있습니다.
구성 (Configuration)
Envoy 프록시는 두 가지 유형의 구성을 필요로 합니다: 초기 부트스트랩 구성과 "관리 서버"(이 경우 Consul)에서 발견되는 동적 구성입니다.
부트스트랩 구성은 최소한 프록시에 ID(노드 ID)와 모든 동적 구성을 발견하는 로컬 Consul 에이전트의 위치를 구성해야 합니다. 자세한 내용은 부트스트랩 구성(Bootstrap Configuration)을 참조하세요.
Consul 서비스 메시가 각 Envoy 인스턴스에 제공하는 동적 구성은 다음을 포함합니다.
- 상호 인증을 활성화하고 인증서를 계속 회전시키는 TLS 인증서와 키.
- 서비스 간 권한 부여 규칙을 적용하는 인텐션(Intentions).
- 각 사이드카 프록시가 아웃바운드 연결을 로드 밸런싱할 수 있게 하는 업스트림에 대한 서비스 디스커버리 결과.
- 시간 초과 및 프로토콜별 옵션을 포함한 L7 구성.
- 특정 HTTP 경로를 노출하는 구성.
현재 Consul 서비스 메시를 통해 제어 가능한 Envoy 프록시 런타임 구성 부분에 대한 자세한 내용은 동적 구성(Dynamic Configuration)을 참조하세요.
우리는 시간이 지남에 따라 Consul 서비스 메시의 일급 구성으로 Envoy 기능을 점점 더 많이 활성화할 계획이지만, 일부 고급 사용자는 Envoy를 특정 방식으로 구성하기 위해 추가 제어가 필요합니다. 이를 활성화하기 위해 사용자가 각 Envoy 인스턴스의 일부 하위 구성 요소에 대해 저수준의 원시 Envoy 구성 구문을 제공할 수 있는 여러 "탈출구(escape hatch)" 옵션을 제공합니다. 이를 통해 운영자는 Envoy를 올바르게 구성하고 버전 지원 등을 보장하는 데 대한 완전한 통제와 책임을 가질 수 있습니다.
인텐션 적용 (Intention Enforcement)
인텐션은 Envoy의 RBAC 필터를 사용해 적용됩니다. 프록시된 서비스의 구성된 프로토콜에 따라 인텐션은 네트워크 필터를 사용해 연결별(L4)로 적용되거나 HTTP 필터를 사용해 요청별(L7)로 적용됩니다.
참고: Consul 1.9.0 이전에는 인텐션이 ext_authz 네트워크 필터를 사용해 연결별(L4)로만 적용되었습니다.
인증서 가져오기 (Fetching Certificates)
Envoy는 다음 조건이 충족되면 CONSUL_HTTP_TOKEN 및 CONSUL_HTTP_ADDR 환경 변수를 사용해 인증서를 가져오기 위해 Consul에 연락합니다.
CONSUL_HTTP_TOKEN환경 변수에 Consul ACL 토큰이 포함되어 있습니다.- Consul ACL 토큰에 해당 서비스의 구성을 읽는 데 필요한 권한이 있습니다.
Consul에서 TLS가 활성화된 경우 Envoy를 시작하기 전에 다음 환경 변수도 추가해야 합니다.
CONSUL_CACERTCONSUL_CLIENT_CERTCONSUL_CLIENT_KEYCONSUL_HTTP_SSL
부트스트랩 구성 (Bootstrap Configuration)
Envoy는 초기 부트스트랩 구성 파일이 필요합니다. Consul 명령줄을 사용해 파일을 수동으로 만들거나 Consul Dataplane이 파일을 생성하도록 구성할 수 있습니다.
Consul CLI에서 부트스트랩 파일 생성 (Generate the bootstrap file on the Consul CLI)
로컬 Consul 클라이언트 에이전트에 연결하고 consul connect envoy 명령을 실행해 Envoy 부트스트랩 구성을 만듭니다. 이 명령은 부트스트랩 구성을 stdout으로 직접 출력하거나 편의 래퍼로 구성에 exec 명령을 발행해 Envoy 바이너리를 시작합니다. exec를 사용해 Envoy를 부트스트랩하는 것에 대한 자세한 내용은 Exec 보안 세부 정보(Exec Security Details)를 참조하세요.
CLI에서 Envoy 프록시 부트스트랩 시 문제가 발생하면 -enable-config-gen-logging 플래그를 사용해 디버그 메시지 로깅을 활성화하세요. 이러한 로그는 부트스트랩 프로세스 중 발생하는 문제를 해결하는 데 도움이 될 수 있습니다.
사용 가능한 플래그와 매개변수에 대한 자세한 내용은 consul connect envoy CLI 참조를 참조하세요.
Consul Dataplane에서 부트스트랩 파일 생성 (Generate the bootstrap file from Consul Dataplane)
Consul Dataplane은 Envoy 프로세스를 자동으로 구성하고 관리합니다. Consul Dataplane은 Envoy를 시작하기 전에 Envoy 부트스트랩 구성 파일을 생성합니다. Consul Dataplane이 Envoy를 시작하는 방법을 구성하려면 Consul Dataplane CLI 참조를 참조하세요.
프록시 구성에서 부트스트랩 구성 제어 (Control bootstrap configuration from proxy configuration)
Consul 서비스 메시는 Envoy 프록시 구성 옵션을 지정해 부트스트랩 구성의 일부를 제어할 수 있습니다.
전역 proxy-defaults 구성 항목에 다음 구성 항목을 추가하거나 프록시 서비스 정의의 proxy.config 필드에서 직접 재정의하세요. Consul 클라이언트 에이전트에 연결할 때 구성은 sidecar_service 블록의 proxy.config 필드에 배치할 수 있습니다.
envoy_statsd_url- Envoy가 메트릭을 전달해야 하는 UDP StatsD 리스너를 식별하는udp://ip:port형식의 URL입니다. 예를 들어 모든 호스트에 로컬 StatsD 리스너가 있다면udp://127.0.0.1:8125일 수 있습니다. 이 경우 사용자는 편의를 위해 전역 proxy-defaults 구성 항목에서 이 속성을 한 번 구성할 수 있습니다. 현재 TCP는 지원되지 않습니다. 참고: 현재 URL은 Envoy가 StatsD를 설정하는 방식 때문에 IP 주소를 사용해야 하며 DNS 이름은 사용할 수 없습니다. 환경 변수HOST_IP의 확장이 지원됩니다(예:udp://${HOST_IP}:8125). 사용자는$ENV_VAR_NAME형식으로 전체 매개변수를 지정할 수도 있으며, 이 경우consul connect envoy명령이 실행될 때 명명된 환경 변수에서 실제 URL을 해석합니다. 예를 들어 이를 통해 Kubernetes 클러스터의 각 파드가 Envoy 인스턴스가 부트스트랩될 때 StatsD에 대한 파드별 IP 주소를 알 수 있으면서도 모든 프록시가 전역 proxy-defaults 구성 항목에서 StatsD를 사용하도록 전역 구성할 수 있습니다. env 변수는 위에 지정된 대로 완전하고 유효한 URL 값만 포함해야 하며 다른 것은 포함하면 안 됩니다.envoy_dogstatsd_url- 다음 동작 차이를 제외하면envoy_statsd_url과 동일합니다: Envoy는 점으로 구분된 statsd 메트릭 이름 대신 dogstatsd 태그를 사용합니다.udp://외에도 에이전트가 유닉스 소켓(예: dogstatsd 에이전트)에서 수신 대기할 수 있다면unix://URL을 지정할 수 있습니다.envoy_prometheus_bind_addr- 프록시가 Prometheus 메트릭 엔드포인트를 공용 네트워크에 노출해야 함을 지정합니다.ip:port형식으로 제공해야 하며 포트와 ip/port 조합이 프록시가 실행되는 네트워크 네임스페이스 내에서 사용 가능해야 합니다. 일반적으로 IP는 모든 사용 가능한 인터페이스에 바인딩하려면0.0.0.0이거나 파드 IP 주소입니다. 참고: Envoy 1.10 이전 버전은 내부 Prometheus 엔드포인트를 사용해 타이밍 히스토그램을 내보내지 않습니다.envoy_stats_bind_addr- 프록시가/stats접두사를 공용 네트워크에 노출해야 함을 지정합니다.ip:port형식으로 제공해야 하며 ip/port 조합이 프록시가 실행되는 네트워크 네임스페이스 내에서 사용 가능해야 합니다. 일반적으로 IP는 모든 사용 가능한 인터페이스에 바인딩하려면0.0.0.0이거나 파드 IP 주소입니다.envoy_stats_tags- 프록시가 생성하는 모든 메트릭에 추가될 하나 이상의 정적 태그를 지정합니다.envoy_stats_flush_interval- Envoy의stats_flush_interval을 구성합니다.envoy_telemetry_collector_bind_socket_dir- Envoy가 유닉스 소켓을 만드는 디렉터리를 지정합니다. Envoy는 Consul 텔레메트리 수집기가 수집할 수 있는 소켓으로 메트릭을 보냅니다. 소켓은 기본적으로 구성되지 않습니다. 이 설정은envoy_stats_flush_interval이 설정되지 않고envoy_dogstats_url과 같은 다른 통계 싱크가 구성되지 않은 경우 Envoy의stats_flush_interval을 1분으로 설정합니다.
고급 구성(Advanced Configuration) 섹션은 생성된 부트스트랩 구성에 대한 증분 또는 완전한 제어를 허용하는 추가 구성을 설명합니다.
Windows VM에서 Envoy 부트스트랩 (Bootstrap Envoy on Windows VMs)
Consul을 Windows VM에서 실행 중이라면 consul connect envoy 명령으로 Envoy를 부트스트랩하려고 시도하면 다음 출력이 반환됩니다.
Directly running Envoy is only supported on linux and macOS since envoy itself doesn't build on other platforms currently.
Use the -bootstrap option to generate the JSON to use when running envoy on a supported OS or via a container or VM.
Windows VM에서 Envoy를 부트스트랩하려면 부트스트랩 구성을 .json 파일로 생성한 다음 수동으로 편집해 ACL 토큰과 유효한 액세스 로그 경로를 모두 추가해야 합니다.
부트스트랩 구성 파일을 생성하려면 명령에 -bootstrap 옵션을 추가한 다음 출력을 파일에 저장하세요.
$ consul connect envoy -bootstrap > bootstrap.json
그런 다음 bootstrap.json을 열고 다음 섹션을 ACL 토큰과 로그 경로로 업데이트하세요.
bootstrap.json{
"admin": {
"access_log": [
{
"name": "envoy.access_loggers.file",
"typed_config": {
"@type": "type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog",
"path": "/dev/null"
}
}
],
"address": {
"socket_address": {
"address": "127.0.0.1",
"port_value": 19000
}
}
},
## ...
"dynamic_resources": {
## ...
"ads_config": {
## ...
"grpc_services": {
"initial_metadata": [
{
"key": "x-consul-token",
"value": "<ACL-Token>"
}
],
## ...
}
}
}
}
부트스트랩 프로세스를 완료하려면 Envoy를 시작하고 bootstrap.json의 경로를 포함하세요.
$ envoy -c bootstrap.json
보안 참고: 부트스트랩 JSON에는 ACL 토큰이 포함되어 있으므로 시크릿으로 처리해야 합니다. 이 토큰은
service:write권한이 있는 모든 서비스의 ID를 승인하므로 업스트림 서비스에 액세스하는 데 사용될 수 있기 때문입니다.
동적 구성 (Dynamic Configuration)
Consul은 클러스터에 대한 지식에 기반해 Envoy의 동적 구성을 자동으로 생성합니다. 사용자는 service-defaults 구성 항목의 사용 가능한 필드를 통해 서비스에 대한 기본 구성 옵션을 지정할 수 있습니다. Consul은 이 정보를 사용해 해당 서비스의 프록시와 서비스가 사용하는 업스트림 리스너 모두에 적절한 프록시 설정을 구성합니다.
한 예시는 사용자가 service-defaults 구성 항목의 Protocol 필드에서 서비스의 프로토콜을 정의할 수 있는 방법입니다. enable_central_service_config가 true로 설정된 에이전트는 서비스에 대한 프록시를 구성할 때 프로토콜을 자동으로 발견합니다. 프록시는 대표하는 서비스의 기본 프로토콜을 발견하고 이를 사용해 기본 공용 리스너를 구성합니다. 또한 업스트림 서비스에 대해 정의된 프로토콜을 발견하고 아래와 같이 업스트림 리스너도 적절히 자동으로 구성합니다.
이 자동 발견 결과 Consul은 실제로 등록되는 프록시 서비스 정의의 proxy.config 및 proxy.upstreams[*].config 필드를 자동으로 채웁니다.
중앙에서 구성할 수 있는 다른 옵션에 대해 알아보려면 구성 항목 문서(Configuration Entries docs)를 참조하세요.
프록시 구성 옵션 (Proxy Config Options)
이 필드는 프록시 서비스 정의의 proxy.config에서 명시적으로 재정의하거나, 모든 서비스가 상속하는 기본값으로 작동하는 전역 proxy-defaults 구성 항목에 정의할 수 있습니다.
protocol— 서비스가 사용하는 프로토콜입니다. Consul 서비스 메시의 Envoy 통합은 현재 다음 프로토콜 값을 지원합니다.tcp— 달리 지정되지 않는 한 이 값이 기본값이며, Envoy가 L4에서 프록시하도록 합니다. 이는 서비스 메시의 mTLS의 모든 보안 혜택을 제공하며 모든 TCP 기반 프로토콜에서 작동합니다. 로드 밸런싱과 메트릭은 연결 수준에서 사용할 수 있습니다.http— 서비스가 HTTP/1.x를 사용함을 지정합니다. Envoy가http_connection_manager를 설정하고 사용 가능한 업스트림 서비스에 요청을 개별적으로 로드 밸런싱할 수 있게 합니다. Envoy는 또한 HTTP 응답 코드 패밀리(2xx, 4xx, 5xx 등)로 구분된 요청 속도와 같은 L7 메트릭을 내보냅니다.http2— 서비스가 http2(Envoy가 여전히 TLS가 아닌 일반 TCP로만 로컬 서비스 인스턴스에 연결하므로 구체적으로 h2c)를 사용함을 지정합니다. 이는 L7 로드 밸런싱과 메트릭이 있는http와 매우 유사하지만 엔드투엔드 http2를 올바르게 활성화하는 추가 설정이 있습니다.grpc— gRPC는 http2에 기반한 일반적인 RPC 프로토콜입니다. 위의 http2 지원에 더해 Envoy 리스너는 HTTP/1.1 호출을 gRPC로 변환하고 gRPC-status 트레일러 코드로 메트릭을 계측하는 gRPC 브리지 필터로 구성됩니다.- 참고: 서비스의 프로토콜은 이상적으로 서비스에 대한 service-defaults 구성 항목의
protocol필드로 구성해야 합니다. 프록시 구성에서 구성하면 일부 L7 기능이 완전히 활성화되지 않을 수 있습니다. 이는 Consul 1.6.0 이전 버전과의 역호환성을 위해 여기서 지원됩니다.
bind_address— Envoy의 공용 리스너가 바인딩하는 주소를 재정의합니다. 기본적으로 Envoy는 서비스 주소에 바인딩하거나 서비스 등록에 명시적 주소가 없으면0.0.0.0에 바인딩합니다.bind_port— Envoy의 공용 리스너가 바인딩하는 포트를 재정의합니다. 기본적으로 Envoy는 서비스 포트에 바인딩합니다.local_connect_timeout_ms— 시간 초과 전에 로컬 애플리케이션 인스턴스에 연결할 수 있는 밀리초 수입니다. 기본값은5000(5초)입니다.local_request_timeout_ms— 로컬 애플리케이션 인스턴스에 대한 HTTP 요청의 요청 시간 초과(밀리초)입니다. HTTP 기반 프로토콜에만 적용됩니다. 지정하지 않으면 라우트 시간 초과에 대한 Envoy 기본값(15초)을 상속합니다. 값0은 요청 시간 초과를 비활성화합니다.local_idle_timeout_ms— 로컬 애플리케이션 인스턴스에 대한 HTTP 요청의 유휴 시간 초과(밀리초)입니다. HTTP 기반 프로토콜에만 적용됩니다. 지정하지 않으면 라우트 유휴 시간 초과에 대한 Envoy 기본값(15초)을 상속합니다. 값0은 요청 시간 초과를 비활성화합니다.max_inbound_connections— 로컬 애플리케이션 인스턴스에 대한 최대 동시 인바운드 연결 수입니다. 지정하지 않으면 Envoy 기본값(1024)을 상속합니다.balance_inbound_connections— Envoy 워커 스레드에 걸쳐 인바운드 연결을 밸런싱하는 데 사용되는 전략입니다. Consul 서비스 메시 Envoy 통합은 다음balance_inbound_connections값을 지원합니다.""— 빈 문자열(기본값). 연결 밸런싱 전략을 사용하지 않습니다. Consul은 인바운드 연결을 밸런싱하지 않습니다.exact_balance— 서비스에 대한 인바운드 연결은 Envoy의 정확한 밸런스 전략(Exact Balance Strategy)을 사용합니다.
max_request_headers_kb— 다운스트림 클라이언트에서 업스트림 서비스로 전송되는 요청 헤더의 최대 크기(킬로바이트)입니다. HTTP 기반 프로토콜(HTTP, HTTP/2, gRPC)에만 적용됩니다. 지정하지 않으면 Envoy의 기본 한도(60 KiB)를 사용합니다. 지원되는 최대 값은 96 KiB(Envoy 적용)입니다. 이 값보다 높은 값은 Envoy가 거부/클램프합니다. 참고 : 이 설정은 서비스 프로토콜이http,http2또는grpc로 구성된 경우에만 적용됩니다.xds_fetch_timeout_ms— Envoy가 시간 초과되기 전에 EDS 및 RDS 구성을 기다리는 시간(밀리초)입니다. 지정하지 않으면 이 필드는 Envoy의 기본값인15000(15초)을 사용합니다. Envoy 인스턴스가 데이터로 채우는 데 상당한 시간이 걸리는 많은 업스트림으로 구성될 때 이 필드를 더 높은 값으로 설정하면 예기치 않은 시간 초과로 인한 일시적인 중단을 방지할 수 있습니다.
프록시 업스트림 구성 옵션 (Proxy Upstream Config Options)
다음 구성 항목은 프록시 서비스 정의 또는 sidecar_service 블록의 proxy.upstreams[].config 필드에서 직접 재정의할 수 있습니다.
protocol— 위의 기본 구성과 동일하지만 업스트림에 대한 리스너 설정에 영향을 줍니다. 참고: 서비스의 프로토콜은 이상적으로 업스트림 대상 서비스에 대한 service-defaults 구성 항목의protocol필드로 구성해야 합니다. 프록시 업스트림 구성에서 구성하면 일부 L7 기능이 완전히 활성화되지 않을 수 있습니다. 이는 Consul 1.6.0 이전 버전과의 역호환성을 위해 여기서 지원됩니다.connect_timeout_ms— 시간 초과 전에 업스트림 연결을 설정할 수 있는 밀리초 수입니다. 기본값은5000(5초)입니다. 참고: 서비스의 연결 시간 초과는 이상적으로 업스트림 대상 서비스에 대한 service-resolver 구성 항목의connect_timeout필드로 구성해야 합니다. 프록시 업스트림 구성에서 구성하면 구성 항목에 정의된 값을 재정의합니다. 이는 Consul 1.6.0 이전 버전과의 역호환성을 위해 여기서 지원됩니다.limits— 업스트림 서비스에 연결할 때 적용할 한도 집합입니다. 이러한 한도는 서비스 인스턴스별로 적용됩니다. 다음 한도가 적용됩니다.max_connections— 서비스 인스턴스가 주어진 업스트림에 대해 설정할 수 있는 최대 연결 수입니다. HTTP/1.1은 연결당 요청이 하나이므로 HTTP/1.1 트래픽을 제한하는 데 사용하세요.max_pending_requests— 연결이 설정되는 동안 대기열에 넣을 최대 요청 수입니다. 이 구성을 적용하려면protocol필드에 L7 프로토콜을 정의해야 합니다.max_concurrent_requests— 한 시점에 허용되는 최대 동시 요청 수입니다. HTTP/2는 연결당 요청이 많으므로 HTTP/2 트래픽을 제한하는 데 사용하세요. 이 구성을 적용하려면protocol필드에 L7 프로토콜을 정의해야 합니다.
passive_health_check— 수동 건강 검사는 도달할 수 없거나 오류를 반환하는 호스트를 업스트림 클러스터에서 제거합니다.interval— 검사 사이의 나노초 단위 시간입니다. 각 검사는max_failures를 초과한 호스트를 로드 밸런서에서 제거하고, 추방 시간이 지난 호스트는 로드 밸런서로 반환합니다. 지정하지 않으면 기본값을 사용합니다. 예를 들어 Envoy 프록시의 경우10s.max_failures— 호스트가 업스트림 클러스터에서 제거되게 하는 연속 실패 수입니다. 지정하지 않으면 Consul은 프록시의 기본값을 사용합니다. 예를 들어 Envoy 프록시의 경우5.enforcing_consecutive_5xx— 프록시가 500 코드 범위의 연속 오류를 통한 이상 상태를 감지할 때 호스트가 실제로 추방될 확률을 나타내는 백분율입니다. 지정하지 않으면 Consul은 프록시의 기본값을 사용합니다. 예를 들어 Envoy 프록시의 경우100.max_ejection_percent— 수동 건강 검사 실패로 인해 업스트림 클러스터에서 추방될 수 있는 호스트의 최대 백분율입니다. 지정하지 않으면 Envoy 기본값인 10% 또는 최소 한 호스트를 상속합니다.base_ejection_time— 호스트가 추방되는 기본 시간입니다. 실제 시간은 기본 시간에 호스트가 추방된 횟수를 곱한 것과 같으며max_ejection_time(기본 300초)으로 제한됩니다. 지정하지 않으면 Envoy 기본값인 30초를 상속합니다.
balance_outbound_connections— Envoy 워커 스레드에 걸쳐 아웃바운드 연결을 밸런싱하는 전략을 지정합니다. Consul 서비스 메시 Envoy 통합은 다음balance_outbound_connections값을 지원합니다.""— 빈 문자열(기본값). 연결 밸런싱 전략을 사용하지 않습니다. Consul은 아웃바운드 연결을 밸런싱하지 않습니다.exact_balance— 업스트림으로부터의 아웃바운드 연결은 Envoy의 정확한 밸런스 전략을 사용합니다.
게이트웨이 옵션 (Gateway Options)
이 필드는 프록시 서비스 정의에서 명시적으로 재정의하거나, 모든 서비스가 상속하는 기본값으로 작동하는 전역 proxy-defaults 구성 항목에 정의할 수 있습니다.
1.8.0 이전에는 이러한 설정이 메시 게이트웨이(Mesh Gateways)에 특정했습니다. envoy_mesh_gateway_bind_addresses 및 envoy_mesh_gateway_no_default_bind와 같은 권장되지 않는 이름은 계속 지원됩니다.
connect_timeout_ms— 시간 초과 전에 업스트림 연결을 설정할 수 있는 밀리초 수입니다. 기본값은5000(5초)입니다. 업스트림 서비스가 service-resolver에 대해connect_timeout_ms구성 옵션을 설정했다면 해당 시간 초과 값이 이 게이트웨이 옵션보다 우선합니다.envoy_gateway_bind_tagged_addresses— 기본 리스너 주소에 더해 게이트웨이 서비스의 태그 주소를 리스너에 바인딩해야 함을 나타냅니다.envoy_gateway_bind_addresses— 바인딩할 추가 주소의 맵입니다. 이 맵의 키는 생성할 리스너의 이름이고 값은 address와 port라는 두 키가 있는 맵이며, 결합해 리스너를 바인딩할 주소를 만듭니다. 이는 기본 주소에 추가로 바인딩됩니다.envoy_gateway_no_default_bind— 게이트웨이 서비스의 기본 주소에 바인딩하는 것을 방지합니다. 이 옵션은 게이트웨이의 바인딩 주소를 구성하는 다른 옵션 중 하나와 함께 사용해야 합니다.envoy_dns_discovery_type— Envoy가 호스트 이름을 해석하는 방법을 결정합니다. 기본값은LOGICAL_DNS입니다.STRICT_DNS또는LOGICAL_DNS중 하나여야 합니다. 각 유형에 대한 세부 정보는 Envoy 문서에서 확인할 수 있습니다. 이 옵션은 관리형 데이터베이스와 같은 호스트 이름으로 주소가 지정되는 서비스로 라우팅하는 터미네이팅 게이트웨이에 적용됩니다. 또한 호스트 이름으로 주소가 지정되는 로드 밸런서 뒤에 다른 Consul 데이터센터의 게이트웨이가 있는 경우와 같은 메시 게이트웨이에도 적용됩니다.envoy_gateway_remote_tcp_enable_keepalive— 메시 및 터미네이팅 게이트웨이에 대한 원격 업스트림 연결에서 TCP keepalive 설정을 활성화합니다. 기본값은false입니다.true또는false중 하나여야 합니다. 이 기능에 대한 세부 정보는 Envoy 문서에서 확인할 수 있습니다.envoy_gateway_remote_tcp_keepalive_time— keep-alive 프로브가 전송되기 시작하기 전에 연결이 유휴 상태여야 하는 초 수입니다. 자세한 내용은 Envoy 문서를 참조하세요. 이 옵션은 메시 및 터미네이팅 게이트웨이에 대한 원격 업스트림 연결에만 적용됩니다.envoy_gateway_remote_tcp_keepalive_interval— keep-alive 프로브 사이의 초 수입니다. 자세한 내용은 Envoy 문서를 참조하세요. 이 옵션은 메시 및 터미네이팅 게이트웨이에 대한 원격 업스트림 연결에만 적용됩니다.envoy_gateway_remote_tcp_keepalive_probes— 연결이 끊어진 것으로 판단하기 전에 응답 없이 보낼 최대 keepalive 프로브 수입니다. 자세한 내용은 Envoy 문서를 참조하세요. 이 옵션은 메시 및 터미네이팅 게이트웨이에 대한 원격 업스트림 연결에만 적용됩니다.
고급 구성 (Advanced Configuration)
Envoy를 구성할 때 더 많은 유연성을 지원하기 위해 Envoy의 구성 형식에 대한 지식이 필요한 여러 "더 낮은 수준"의 옵션이 있습니다.
많은 옵션이 자체 사용자 정의 protobuf 구성으로 부트스트랩 또는 동적 구성의 하위 섹션을 구성할 수 있게 합니다.
이를 고급 부트스트랩 옵션(Advanced Bootstrap Options)과 탈출구 재정의(Escape Hatch Overrides)의 두 세트로 구분합니다. 둘 다 protobuf JSON 인코딩으로 Envoy 구성을 작성해야 합니다. 고급 옵션은 트레이싱 구성과 같은 작업에 일반적으로 설정해야 할 수 있는 작은 덩어리를 다룹니다. 대조적으로 탈출구는 프록시 설정에 대한 거의 완전한 제어를 제공하지만 운영자가 protobuf JSON으로 전체 구성을 수동으로 코딩해야 합니다.
고급 주제! 이 섹션은 사용자가 Envoy 구성을 거의 완전히 제어할 수 있게 하는 옵션을 다룹니다. 사용자가 실험하거나 Consul 서비스 메시에서 아직 완전히 지원되지 않는 기능을 활용할 수 있도록 이러한 옵션을 제공합니다. 우리는 향후에도 이 기능을 유지할 계획이지만, Envoy의 구성 형식에 대한 깊은 지식이 필요하므로 여전히 실험적인 것으로 간주해야 합니다. 사용자는 이러한 기능을 Consul의 통제 밖의 방식으로 Envoy를 구성할 수 있으므로 Envoy 버전 호환성을 고려해야 합니다. 잘못된 구성은 메시의 모든 프록시가 올바르게 작동하지 못하게 하거나 Consul 서비스 메시가 적용하도록 설계된 보안 보장을 우회할 수 있습니다.
구성 형식 (Configuration Formatting)
모든 구성은 지정된 Envoy 구성 유형의 직렬화된 proto3 JSON 인코딩을 포함하는 문자열로 지정됩니다. 명시된 경우를 제외하고 모두 완전한 JSON 유형입니다.
제공되는 JSON은 @type 필드가 적절한 유형(예: type.googleapis.com/envoy.config.listener.v3.Listener)으로 설정된 protobuf types.Any 메시지를 설명할 수 있습니다.
예를 들어 트레이싱 구성이 주어지면:
Example envoy_tracing_json configuration{
"http": {
"name": "envoy.tracers.zipkin",
"typedConfig": {
"@type": "type.googleapis.com/envoy.config.trace.v3.ZipkinConfig",
"collector_cluster": "zipkin",
"collector_endpoint_version": "HTTP_JSON",
"collector_endpoint": "/api/v1/spans",
"shared_span_context": false
}
}
}
예를 들어 https://codebeautify.org/json-escape-unescape 또는 jq를 사용해 트레이싱 값을 문자열로 JSON 이스케이프하세요.
$ cat <<EOF | jq '. | @json'
{
"http": {
"name": "envoy.tracers.zipkin",
"typedConfig": {
"@type": "type.googleapis.com/envoy.config.trace.v3.ZipkinConfig",
"collector_cluster": "zipkin",
"collector_endpoint_version": "HTTP_JSON",
"collector_endpoint": "/api/v1/spans",
"shared_span_context": false
}
}
}
EOF
"{\"http\":{\"name\":\"envoy.tracers.zipkin\",\"typedConfig\":{\"@type\":\"type.googleapis.com/envoy.config.trace.v3.ZipkinConfig\",\"collector_cluster\":\"zipkin\",\"collector_endpoint_version\":\"HTTP_JSON\",\"collector_endpoint\":\"/api/v1/spans\",\"shared_span_context\":false}}}"
그런 다음 그것을 envoy_tracing_json의 값으로 사용하세요.
{
"kind": "proxy-defaults",
"name": "global",
"config": {
"envoy_tracing_json": "{\"http\":{\"name\":\"envoy.tracers.zipkin\",\"typedConfig\":{\"@type\":\"type.googleapis.com/envoy.config.trace.v3.ZipkinConfig\",\"collector_cluster\":\"zipkin\",\"collector_endpoint_version\":\"HTTP_JSON\",\"collector_endpoint\":\"/api/v1/spans\",\"shared_span_context\":false}}}\n"
}
}
HCL을 사용하는 경우 이 이스케이프가 자동으로 수행됩니다.
Kind = "proxy-defaults"
Name = "global"
Config {
envoy_tracing_json = <<EOF
{
"http": {
"name": "envoy.tracers.zipkin",
"typedConfig": {
"@type": "type.googleapis.com/envoy.config.trace.v3.ZipkinConfig",
"collector_cluster": "zipkin",
"collector_endpoint_version": "HTTP_JSON",
"collector_endpoint": "/api/v1/spans",
"shared_span_context": false
}
}
}
EOF
}
고급 부트스트랩 옵션 (Advanced Bootstrap Options)
사용자는 전역 proxy-defaults 구성 항목에 다음 구성 항목을 추가하거나 프록시 서비스 정의 또는 sidecar_service 블록의 proxy.config 필드에서 직접 재정의할 수 있습니다.
envoy_extra_static_clusters_json— 부트스트랩 구성의 정적 클러스터 배열에 추가될 하나 이상의 Envoy 클러스터를 지정합니다. 이를 통해 예를 들어 트레이싱 싱크를 위한 사용자 정의 클러스터를 추가할 수 있습니다. 단일 클러스터를 구성하려면 클러스터 세부 정보가 있는 단일 JSON 객체를 지정하세요. 여러 클러스터의 경우 쉼표로 구분된 목록에 객체를 지정하되 끝에 쉼표는 없습니다. 클러스터 객체는 JSON 배열에 직접 보간됩니다.Example envoy_extra_static_clusters_json { "name": "local-service-cluster", "load_assignment": { "cluster_name": "local-service-cluster", "endpoints": [ { "lb_endpoints": [ { "endpoint": { "address": { "socket_address": { "address": "127.0.0.1", "port_value": 32769 } } } } ] } ] } }envoy_extra_static_listeners_json—envoy_extra_static_clusters_json과 유사하지만 정적 리스너 정의 배열에 하나 이상의 Envoy 리스너를 추가합니다. 건강 검사 또는 메트릭에 대해 서비스 메시의 mTLS 또는 권한 부여를 우회하는 제한된 액세스를 설정하는 데 사용할 수 있습니다.Example envoy_extra_static_listeners_json { "name": "test_envoy_mtls_bypass_listener", "address": { "socket_address": { "address": "0.0.0.0", "port_value": 20201 } }, "filter_chains": [ { "filters": [ { "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", "http_filters": [ { "name": "envoy.filters.http.router" } ], "route_config": { "name": "self_admin_route", "virtual_hosts": [ { "name": "self_admin", "domains": [ "*" ], "routes": [ { "match": { "path": "/" }, "route": { "cluster": "local-service-cluster" } } ] } ] }, "stat_prefix": "envoy_mtls_bypass", "tracing": { "random_sampling": {} } } } ] } ] }envoy_extra_stats_sinks_json—envoy_extra_static_clusters_json과 유사하지만 통계 싱크(stats sinks)용입니다. 이는 더 높은 수준의envoy_statsd_url또는envoy_dogstatsd_url구성 옵션의 사용으로 정의된 모든 싱크에 추가됩니다.Example envoy_extra_stats_sinks_json { "name": "envoy.stat_sinks.dog_statsd", "typed_config": { "@type": "type.googleapis.com/envoy.config.metrics.v3.DogStatsdSink", "address": { "socket_address": { "protocol": "UDP", "port_value": 8125, "address": "172.31.20.6" } } } }envoy_stats_config_json— 전체 stats 구성입니다. 제공되면 더 높은 수준의envoy_stats_tags를 재정의합니다. 동적 태그 교체 등에 대한 완전한 제어를 허용합니다.Example envoy_stats_config_json { "stats_matcher": { "reject_all": true }, "stats_tags": [ { "tag_name": "envoy.http_user_agent", "regex": "^http(?=\\.).*\\.user_agent\\.((.+?)\\.)\\w+?$" } ], "use_all_default_tags": false }envoy_tracing_json— 전체 트레이싱 구성입니다. 대부분의 트레이싱 공급자는 트레이싱 데이터를 보낼 엔드포인트를 정의하는 정적 클러스터를 추가해야 합니다.Example envoy_tracing_json { "http": { "name": "envoy.tracers.zipkin", "typedConfig": { "@type": "type.googleapis.com/envoy.config.trace.v3.ZipkinConfig", "collector_cluster": "zipkin", "collector_endpoint_version": "HTTP_JSON", "collector_endpoint": "/api/v1/spans", "shared_span_context": false } } }
탈출구 재정의 (Escape-Hatch Overrides)
사용자는 전역 proxy-defaults 구성 항목에 다음 구성 항목을 추가하거나 프록시 서비스 정의 또는 sidecar_service 블록의 proxy.config 필드에서 직접 재정의할 수 있습니다.
envoy_bootstrap_json_tpl—consul connect envoy명령으로 부트스트랩을 생성할 때 기본 템플릿 대신 사용되는 Go 템플릿 구문의 템플릿을 지정합니다. 보간할 수 있는 사용 가능한 변수는 여기에 문서화되어 있습니다. 이는 프록시의 부트스트랩에 대한 완전한 제어를 제공하지만 기본 템플릿에서 크게 벗어나면 Consul이 프록시를 올바르게 관리하거나 보안 모델을 적용하는 능력을 깨뜨릴 수 있습니다.envoy_public_listener_json— 프록시가 인바운드 연결을 수락하는 데 사용하는 기본 공용 리스너 대신 전달할 완전한 Envoy 리스너를 지정합니다. 이는 다음 예외를 제외하고 그대로 사용됩니다: 리스너에 추가된 모든 FilterChain은 Connect TLS 인증서와 검증 컨텍스트로 TlsContext가 재정의됩니다. 즉, 공용 리스너에 대해 서비스 메시의 상호 TLS를 재정의할 방법이 없습니다. 모든 FilterChain은 모든 인바운드 연결이 서비스 메시에 의해 승인되도록 필터 배열 앞에envoy.filters.{network|http}.rbac필터가 추가됩니다. Consul 1.9.0 이전에는 대신envoy.ext_authz가 삽입되었습니다.Example envoy_public_listener_json HTTP { "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", "name": "public_listener", "address": { "socket_address": { "address": "127.0.0.1", "port_value": 21002 } }, "filter_chains": [ { "filters": [ { "name": "envoy.filters.network.http_connection_manager", "typed_config": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", "stat_prefix": "ingress_http", "http_filters": [ { "name": "envoy.filters.http.router" } ], "route_config": { "name": "local_route", "virtual_hosts": [ { "name": "local_service", "domains": [ "*" ], "routes": [ { "match": { "prefix": "/" }, "route": { "cluster": "local-service-cluster", } } ] } ] } } } ] } ], "traffic_direction": "INBOUND" } TCP { "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", "name": "public_listener", "address": { "socket_address": { "address": "127.0.0.1", "port_value": 21002 } }, "filter_chains": [ { "filters": [ { "name": "envoy.filters.network.tcp_proxy", "typed_config": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", "stat_prefix": "ingress_tcp", "cluster": "local-service-cluster" } } ] } ], "traffic_direction": "INBOUND" }envoy_listener_tracing_json— 프록시의 공용 및 업스트림 리스너에 삽입할 트레이싱 구성을 지정합니다.Example envoy_listener_tracing_json { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.Tracing", "provider": { "name": "envoy.tracers.zipkin", "typed_config": { "@type": "type.googleapis.com/envoy.config.trace.v3.ZipkinConfig", "collector_cluster": "otelcolector", "collector_endpoint": "/api/v2/spans", "collector_endpoint_version": "HTTP_JSON", "shared_span_context": false } }, "custom_tags": [ { "tag": "custom_header", "request_header": { "name": "x-custom-traceid", "default_value": "" } }, { "tag": "alloc_id", "environment": { "name": "NOMAD_ALLOC_ID" } } ] }envoy_local_cluster_json— 로컬 애플리케이션 클러스터 대신 전달할 완전한 Envoy 클러스터를 지정합니다. 이를 통해 시간 초과, 속도 제한, 로드 밸런싱 전략 등을 사용자 지정할 수 있습니다.Example envoy_local_cluster_json { "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", "name": "local_app", "type": "STATIC", "connect_timeout": "5s", "circuit_breakers": { "thresholds": [ { "priority": "DEFAULT", "max_connections": 2048 } ] }, "load_assignment": { "cluster_name": "local_app", "endpoints": [ { "lb_endpoints": [ { "endpoint": { "address": { "socket_address": { "address": "127.0.0.1", "port_value": 8080 } } } } ] } ] } }
다음 구성 항목은 프록시 서비스 정의 또는 sidecar_service 블록의 proxy.upstreams[].config 필드에서 직접 재정의할 수 있습니다.
참고: - 서비스에 대한 service-router, service-splitter 또는 service-resolver 구성 항목이 존재하면 아래의 탈출구는 무시되고 경고가 기록됩니다.
envoy_listener_json— 프록시가 아웃바운드 연결을 위해 애플리케이션에 노출하는 업스트림 리스너 대신 전달할 완전한 Listener를 지정합니다. 이는 다음 예외를 제외하고 그대로 사용됩니다: 리스너에 추가된 모든 FilterChain은 서비스 메시 TLS 인증서와 검증 컨텍스트로 TlsContext가 재정의됩니다. 즉, 공용 리스너에 대해 서비스 메시의 상호 TLS를 재정의할 방법이 없습니다.Example upstream envoy_listener_json JSON { "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", "name": "example-service", "address": { "socket_address": { "address": "0.0.0.0", "port_value": 14000 } }, "filter_chains": [ { "filters": [ { "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", "access_log": [ { "name": "envoy.access_loggers.file", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog", "path": "/var/log/envoy-access/example-service.log" } } ], "http_filters": [ { "name": "envoy.filters.http.router" } ], "route_config": { "name": "example-service", "virtual_hosts": [ { "name": "example-service", "domains": [ "*" ], "routes": [ { "match": { "prefix": "/" }, "route": { "cluster": "example-service", "timeout": "90s", "retry_policy": { "retry_on": "5xx,connect-failure", "num_retries": 2, "per_try_timeout": "60s" } } } ] } ] }, "stat_prefix": "example-service", "tracing": { "random_sampling": {} } } } ] } ], "traffic_direction": "OUTBOUND" }envoy_cluster_json— 발견된 업스트림 클러스터 대신 전달할 완전한 Envoy 클러스터를 지정합니다. 이를 통해 시간 초과, 회로 차단, 속도 제한, 로드 밸런싱 전략 등을 사용자 지정할 수 있습니다.Example upstream envoy_cluster_json JSON { "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", "name": "example-service", "type": "EDS", "eds_cluster_config": { "eds_config": { "ads": {} } }, "connect_timeout": "90s", "lb_policy": "ROUND_ROBIN", "circuit_breakers": { "thresholds": [ { "priority": "DEFAULT", "max_connections": 1024, "max_pending_requests": 1024, "max_requests": 1024, "max_retries": 3 } ] } }