Envoy 프록시 속성 구성

Envoy 프록시 속성 구성

property-override 확장을 사용하여 Consul이 생성하는 Envoy 리소스의 개별 속성을 설정하고 제거하는 방법을 설명해 드릴게요. 이 확장은 Consul이 메시지를 동적으로 조작할 수 있게 하는 protoreflect를 사용해요.

출처: 문서

본문

이 문서는 property-override 확장을 사용하여 Consul이 생성하는 Envoy 리소스의 개별 속성을 설정하고 제거하는 방법을 설명해요. 이 확장은 Consul이 메시지를 동적으로 조작할 수 있게 하는 protoreflect를 사용해요.

확장은 현재 스칼라 및 enum 필드 설정, Path로 지정할 수 있는 개별 필드 제거, Path에 표시된 설정되지 않은 중간 메시지 필드 초기화를 지원해요.

현재 다음 사용 사례는 지원하지 않아요:

  • 반복된 필드 멤버 추가, 업데이트 또는 제거
  • protobuf map 필드 추가 또는 업데이트
  • protobuf Any 필드 추가 또는 업데이트

워크플로

property-override 확장을 사용하려면 다음 단계를 완료해 주세요:

  1. service defaults 또는 proxy defaults 구성 엔트리에서 EnvoyExtensions 블록을 구성해요.

  2. 구성 엔트리를 적용해요.

보안 경고

property override 확장은 잘못 사용하면 의도하지 않은 결과를 초래하거나 클러스터 보안을 저하시킬 수 있는 고급 기능이에요. Consul은 TLS 유지, 의도, Envoy 구성의 다른 보안 중요 구성 요소를 적용하지 않아요. 또한 Consul은 구성에 서비스 트래픽에 영향을 주는 오류가 포함되어 있지 않은지 확인하지 않아요.

EnvoyExtensions 추가

proxy defaults 또는 service defaults 구성 엔트리에 Envoy 확장 구성을 추가해 주세요. 구성 엔트리의 EnvoyExtensions 블록에 확장 구성을 배치해 주세요.

  • proxy defaults에서 Envoy 확장을 구성하면 모든 서비스에 적용돼요.
  • service defaults에서 Envoy 확장을 구성하면 특정 서비스에 적용돼요.

Consul은 proxy defaults에서 구성된 Envoy 확장을 service defaults의 확장보다 먼저 적용해요. 결과적으로 service defaults의 Envoy 확장 구성이 proxy defaults의 구성을 재정의할 수 있어요.

다음 예시는 other-svc 업스트림 서비스에 대해 /respect_dns_ttl 필드를 설정하는 api라는 service defaults 구성 엔트리를 보여줘요:

HCL / JSON / YAML

property-override-extension-service-defaults.hcl

Kind     = "service-defaults"
Name     = "api"
Protocol = "http"
EnvoyExtensions = [
  {
    Name = "builtin/property-override"
    Arguments = {
      ProxyType = "connect-proxy"
      Patches = [
        {
          ResourceFilter  = {
            ResourceType     = "cluster"
            TrafficDirection = "outbound"
            Services = [{
               Name =  "other-svc"
            }]
          }
          Op    = "add"
          Path  = "/respect_dns_ttl"
          Value = true
        }
      ]
    }
  }
]

property-override-extension-service-defaults.json

{
  "kind": "service-defaults",
  "name": "api",
  "protocol": "http",
  "envoyExtensions": [{
    "name": "builtin/property-override",
    "arguments": {
      "proxyType": "connect-proxy",
      "patches": [{
        "resourceFilter": {
          "resourceType": "cluster",
          "trafficDirection": "outbound",
          "services": [{ "name":  "other-svc" }]
        },
        "op": "add",
        "path": "/respect_dns_ttl",
        "value": true
      }]
    }
  }]
}

property-override-extension-service-defaults.yaml

apiversion: consul.hashicorp.com/v1alpha1
kind: ServiceDefaults
metadata:
  name: api
spec:
  protocol: http
  envoyExtensions:
    name = "builtin/property-override"
    arguments:
      proxyType: "connect-proxy",
      patches:
      - resourceFilter:
          resourceType: "cluster"
          trafficDirection: "outbound"
          services:
            - name:  "other-svc"
        op: "add"
        path: "/respect_dns_ttl",
        value: true

확장 구성 방법에 대한 자세한 내용은 property override 구성 참조를 참고해 주세요.

구성 엔트리를 정의하는 방법에 대한 자세한 내용은 proxy defaults 구성 엔트리 참조와 service defaults 구성 엔트리 참조를 참고해 주세요.

경고

기본 프록시 구성에 Envoy 확장을 추가하면 의도하지 않은 결과가 발생할 수 있어요. 대부분의 경우 service defaults 구성 엔트리에서 EnvoyExtensions를 구성할 것을 권장해요.

경로 구성

Envoy 리소스 유형의 속성을 대상으로 하려면 property override 확장 구성의 Path 필드에 속성이 존재하는 경로를 지정해야 해요.

Path 필드에 대해 지원되는 필드 목록을 보려면 Path 필드를 비어 있거나 부분적으로 유효하지 않은 문자열로 설정해 주세요. Consul은 경로의 첫 번째 인식되지 않은 세그먼트에 대한 지원 필드 목록이 포함된 오류를 반환해요. 기본적으로 Consul은 처음 열 개 필드만 반환하지만, Debug 필드를 true로 설정하면 Consul이 가능한 모든 필드를 출력하도록 지시할 수 있어요.

다음 예시 구성은 Envoy cluster 리소스에 사용 가능한 최상위 필드를 포함한 오류를 Consul이 반환하도록 트리거해요:

Kind = "service-defaults"
Name = "api"
EnvoyExtensions = [
  {
    Name = "builtin/property-override"
    Arguments = {
      Debug = true
      ProxyType = "connect-proxy"
      Patches = [
        {
          ResourceFilter = {
            ResourceType = "cluster"
            TrafficDirection = "outbound"
          }
          Op = "add"
          Path =  ""
          Value =  5
        }
      ]
    }
  }
]

구성 엔트리를 적용한 후 Consul은 리소스에 대한 가능한 필드를 포함하는 메시지를 출력해요:

$ consul config write api.hcl
non-empty, non-root Path is required;
available envoy.config.cluster.v3.Cluster fields:
transport_socket_matches
name
alt_stat_name
type
cluster_type
eds_cluster_config
connect_timeout
## ...

출력을 사용하여 Path 필드에 대한 적절한 값을 구성하는 데 도움을 받을 수 있어요. 예를 들어:

$ consul config write api.hcl 2>&1 | grep round_robin
round_robin_lb_config

구성 엔트리 적용

네트워크가 가상 머신에 배포된 경우 consul config write 명령을 사용하고 proxy defaults 또는 service defaults 구성 엔트리를 지정하여 구성을 적용해 주세요. Kubernetes 오케스트레이션 네트워크에서는 kubectl apply 명령을 사용해 주세요. 다음 예시는 proxy defaults 구성 엔트리에서 확장을 적용해요.

HCL / JSON / YAML

$ consul config write property-override-extension-service-defaults.hcl
$ consul config write property-override-extension-service-defaults.json
$ kubectl apply property-override-extension-service-defaults.yaml

더 알아보기 (Learn more)