service-defaults 구성 항목 참조

service-defaults 구성 항목 참조 (Service Defaults Configuration Entry Reference)

이 문서는 service defaults 구성 항목을 구성하는 방법을 설명해요. service defaults 구성 항목은 업스트림과 게이트웨이 같은 서비스 메시 서비스의 공통 구성 설정을 포함해요. 구성 모델, 완전한 구성, 각 필드 사양과 예제 구성을 다룰게요.

출처: 문서

본문

이 항목은 service defaults 구성 항목을 구성하는 방법을 설명합니다. service defaults 구성 항목은 업스트림과 게이트웨이 같은 서비스 메시 서비스의 공통 구성 설정을 포함합니다. 사용 정보는 서비스 defaults 정의를 참조하세요.

구성 모델 (Configuration model)

다음 목록은 service defaults 구성 항목의 필드 계층 구조, 언어별 데이터 유형, 요구 사항 및 적용 가능한 기본값을 간략히 설명합니다. 추가 세부 정보를 보려면 속성 이름을 클릭하세요.

HCL 및 JSON

Kubernetes YAML

완전한 구성 (Complete configuration)

모든 필드가 정의되면 service-defaults 구성 항목은 다음 형식을 갖습니다.

HCL

Kind      = "service-defaults"
Name      = "<service_name>"
Namespace = "default"
Partition = "default"
Meta = {
  Key = "value"
}
Protocol                  = "tcp"
BalanceInboundConnections = "exact_balance"
Mode                      = "<mode for directing traffic>"
RateLimits = {
  InstanceLevel = {
    RequestsPerSecond = <average number of requests allowed to the service per second>
    RequestsMaxBurst = <max number of concurrent requests allowed to the service>
    Routes = [      # Configure RequestsPerSecond and one route matching parameter for each member of the list
      {
        PathExact = "<limits apply paths that match this value>"
        PathPrefix = "<limits apply to paths starting with this value>"
        PathRegex = "<limits apply to paths that match this expression>"
        RequestsPerSecond = <overrides top-level limit>
        RequestMaxBurst = <overrides top-level limit>
      }
  ]
}
UpstreamConfig = {
  Overrides = {
    Name             = "<name of upstreams to override>"
    Namespace        = "<namespace containing upstreams to override>"
    Peer             = "<peer name of upstream service>"
    Protocol         = "<protocol for requests to upstream services>"
    ConnectTimeoutMs = 5000
    MeshGateway = {
      mode = "<mode for mesh gateway services>"
    }
    BalanceOutboundConnections = "exact_balance"
    Limits = {
      MaxConnections        = 0
      MaxPendingRequests    = 0
      MaxConcurrentRequests = 0
    }
    PassiveHealthCheck = {
      Interval                = "0s"
      MaxFailures             = 0
      EnforcingConsecutive5xx = 100
      MaxEjectionPercent      = 10
      BaseEjectionTime        = "30s"
    }
  }
  Defaults = {
    Protocol         = "<default protocol for upstream traffic>"
    ConnectTimeoutMs = 5000
    MeshGateway = {
      mode = "<default mode for mesh gateway services>"
    }
    BalanceOutboundConnections = "exact_balance"
    Limits = {
      MaxConnections        = 0
      MaxPendingRequests    = 0
      MaxConcurrentRequests = 0
    }
    PassiveHealthCheck = {
      Interval                = "0s"
      MaxFailures             = 0
      EnforcingConsecutive5xx = 100
      MaxEjectionPercent      = 10
      BaseEjectionTime        = "30s"
    }
  }
}
TransparentProxy = {
  OutboundListenerPort = 15001
  DialedDirectly       = false
}
MutualTLSMode = "strict" # only supported when services are in transparent proxy mode
EnvoyExtensions = [
  {
    Name = "<name of the extension>"
    Required = `false`
    Arguments = { <specific to each extension> }
    ConsulVersion = "<Consul version constraint for applying the extension>"
    EnvoyVersion = "<Envoy version constraint for applying the extension>"
  }
]
Destination = {
  Addresses = [
    "<first IP address>",
    "<second IP address>"
  ]
  Port = 0
}
MaxInboundConnections = 0
MaxRequestHeadersKB = 96
LocalConnectTimeoutMs = 5000
LocalRequestTimeoutMs = "15s"
MeshGateway = {
  Mode = "<default mode for mesh gateway services>"
}
ExternalSNI = "<SNI server host>"
Expose = {
  Checks = false
  Paths = [
    {
      Path          = "</local/dir>"
      LocalPathPort = 0
      LocalListenerPort = 0
      Protocol      = "http"
    }
  ]
}

YAML

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceDefaults
metadata:
  name: <name of the service you are configuring>
  namespace: default
spec:
  protocol: tcp
  balanceInboundConnections: exact_balance
  mode: <mode for directing traffic>
  rateLimits:
    instanceLevel:
      requestsPerSecond: <average number of requests allowed to the service per second>
      requestsMaxBurst: <max number of concurrent requests allowed to the service>
      routes:       # Configure RequestsPerSecond and one route matching parameter for each member of the list
      - pathExact: "<limits apply paths that match this value>"
        pathPrefix: "<limits apply to paths starting with this value>"
        pathRegex: "<limits apply to paths that match this expression>"
        requestsPerSecond: <overrides top-level limit>
        requestMaxBurst: <overrides top-level limit>
  upstreamConfig:
    overrides:
    - name: <name of upstreams to override>
      namespace: <namespace containing upstream>
      peer: <peer name of upstream services>
      protocol: <protocol for the upstream listener>
      connectTimeoutMs: 5000
      meshGateway:
        mode: <mode for mesh gateway services>
      balanceOutboundConnections: exact_balance
      limits:
        maxConnections: 0
        maxPendingRequests: 0
        maxConcurrentRequests: 0
      passiveHealthCheck:
        interval: "0s"
        maxFailures: 0
        enforcingConsecutive5xx: 100
        maxEjectionPercent: 10
        baseEjectionTime: "30s"
    defaults:
      protocol: <default protocol for the upstream listener>
      connectTimeoutMs: 5000
      meshGateway:
        mode: <default mode for mesh gateway services>
      balanceOutboundConnections: exact_balance
      limits:
        maxConnections: 0
        maxPendingRequests: 0
        maxConcurrentRequests: 0
      passiveHealthCheck:
        interval: "0s"
        maxFailures: 0
        enforcingConsecutive5xx: 100
        maxEjectionPercent: 10
        baseEjectionTime: "30s"
  transparentProxy:
    outboundListenerPort: 15001
    dialedDirectly: false
  mutualTLSMode: strict
  envoyExtensions:
  - name: <name of the extension>
    required: false
    arguments:
    - <specific to each extension>
    consulVersion: <Consul version constraint for applying the extension>
    envoyVersion: <Envoy version constraint for applying the extension>
  destination:
    addresses:
    - <first hostname or IP address>
      <second hostname or IP address>
    port:  0
  maxInboundConnections: 0
  maxRequestHeadersKB: 96
  meshGateway:
    mode: <default mode for mesh gateway services>
  externalSNI: <name of TLS SNI outside of the mesh>
  expose:
    checks: false
    paths:
    - path: <HTTP path to expose through Envoy>
      localPathPort: 0
      listenerPort: 0
      protocol: http

JSON

{
    "Kind": "ServiceDefaults",
    "Name": "<name of the service you are configuring>",
    "Namespace": "default",
    "Partition": "default",
    "Meta": {
        "<Keys>": "<Values>"
    },
    "Protocol": "tcp",
    "BalanceInboundConnections": "exact_balance",
    "Mode": "<mode for directing traffic>",
  "RateLimits": {
    "InstanceLevel": {
      "RequestsPerSecond": 100,
      "RequestsMaxBurst": 200,
      "Routes": [
        {
          "PathExact": "<limits apply paths that match this value>",
          "PathPrefix": "<limits apply to paths starting with this value>",
          "PathRegex": "<limits apply to paths that match this expression>",
          "RequestsPerSecond":  50,
          "RequestMaxBurst": 100
        }
      ]
    }
  },
    "UpstreamConfig": {
        "Overrides": [{
            "Name": "<name of upstream>",
            "Namespace": "<namespace containing upstream - Consul Enterprise>",
            "Peer": "<peer name of the upstream service>",
            "Protocol": "<protocol for the upstream listener>",
            "ConnectTimeoutMs": 5000,
            "MeshGateway": {
                "Mode": "<mode for mesh gateway services>"
            },
            "BalanceOutboundConnections": "exact_balance",
            "Limits": {
                "MaxConnections": 0,
                "MaxPendingRequests": 0,
                "MaxConcurrentRequests": 0
            },
            "PassiveHealthCheck": {
                "Interval": "0s",
                "MaxFailures": 0,
                "EnforcingConsecutive5xx": 100,
                "MaxEjectionPercent": 10,
                "BaseEjectionTime": "30s"
            }
        }]
    },
    "Defaults": {
        "Protocol": "<protocol for the upstream listener>",
        "ConnectTimeoutMs": 5000,
        "MeshGateway": {
            "Mode": "<mode for mesh gateway services>"
        },
        "BalanceOutboundConnections": "exact_balance",
        "Limits": {
            "MaxConnections": 0,
            "MaxPendingRequests": 0,
            "MaxConcurrentRequests": 0
        },
        "PassiveHealthCheck": {
            "Interval": "0s",
            "MaxFailures": 0,
            "EnforcingConsecutive5xx": 100,
            "MaxEjectionPercent": 10,
            "BaseEjectionTime": "30s"
        }
    },
    "TransparentProxy": {
        "OutboundListenerPort": 15001,
        "DialedDirectly": false
    },
    "MutualTLSMode": "strict",
    "EnvoyExtensions": [{
        "Name": "<name of the extension>",
        "Required": false,
        "Arguments": {
            "<specific to each extension>": "<specific to each extension>"
        },
        "ConsulVersion": "<Consul version constraint for applying the extension>",
        "EnvoyVersion": "<Envoy version constraint for applying the extension>"
    }],
    "Destination": {
        "Addresses": [
            "<first hostname or IP address>",
            "<second hostname or IP address>"
        ],
        "Port": 0
    },
    "MaxInboundConnections": 0,
    "MaxRequestHeadersKB": 96,
    "MeshGateway": {
        "Mode": "<mode for mesh gateway services>"
    },
    "ExternalSNI": "<name of TLS SNI outside of the mesh>",
    "Expose": {
        "Checks": false,
        "Paths": [{
            "Path": "<HTTP path to expose through Envoy>",
            "LocalPathPort": 0,
            "ListenerPort": 0,
            "Protocol": "http"
        }]
    }
}

사양 (Specification)

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

HCL 및 JSON

Kind

구성 항목 유형을 지정합니다. 값은 service-defaults로 설정해야 합니다.

값 (Values)

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

Name

defaults를 설정하는 서비스의 이름을 지정합니다.

값

  • 기본값: none
  • 이 필드는 필수입니다.
  • 데이터 유형: 문자열

Namespace Enterprise

구성 항목이 적용되는 Consul 네임스페이스를 지정합니다.

값

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

Partition Enterprise

구성 항목이 적용되는 Consul 어드민 파티션의 이름을 지정합니다. 추가 정보는 어드민 파티션을 참조하세요.

값

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

Meta

Consul KV 저장소에 추가할 사용자 지정 키-값 쌍 집합을 지정합니다.

값

  • 기본값: none
  • 데이터 유형: 하나 이상의 키-값 쌍의 맵. keys: String / values: String, integer, or float

Protocol

서비스의 기본 프로토콜을 지정합니다. 서비스 메시 사용 사례에서 protocol 구성은 다음 기능과 컴포넌트를 활성화하는 데 필요합니다:

proxy-defaults 구성 항목에서 프록시의 전역 프로토콜을 설정할 수 있지만, service-defaults 구성 항목에 지정된 프로토콜이 proxy-defaults 구성을 재정의합니다.

값

  • 기본값: tcp
  • 다음 문자열 값 중 하나를 지정할 수 있습니다:

예제 구성은 기본 프로토콜 설정을 참조하세요.

BalanceInboundConnections

Envoy 프록시 스레드 전체에 서비스에 대한 인바운드 연결을 할당하는 전략을 지정합니다. 지원되는 유일한 값은 exact_balance입니다. 기본적으로 연결은 균형 조정되지 않습니다. 자세한 내용은 Envoy 문서를 참조하세요.

값

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

Mode

서비스가 인바운드 및 아웃바운드 트래픽을 직접하는 방식을 지정합니다.

  • 기본값: None
  • 다음 문자열 값을 지정할 수 있습니다:
    • direct: 프록시의 리스너는 로컬 애플리케이션과 다른 프록시가 직접 다이얼해야 합니다.
    • transparent: 서비스는 인바운드 및 아웃바운드 트래픽을 캡처해 프록시를 통해 리다이렉트합니다. 이 모드는 트래픽 리다이렉션을 활성화하지 않습니다. 트래픽이 이미 리다이렉트되고 있는 것처럼 Envoy를 구성하도록 Consul에 지시합니다.

RateLimits Enterprise

서비스의 트래픽 속도를 제한하기 위한 인스턴스 수준 구성이 포함된 맵.

값

  • 기본값: None
  • 데이터 유형: 맵

RateLimits{}.InstanceLevel

서비스 인스턴스에 대한 요청 속도 제한 구성 집합이 포함된 맵.

값

  • 기본값: None
  • 데이터 유형: 맵

RateLimits{}.InstanceLevel{}.RequestsPerSecond

서비스에 허용되는 초당 평균 요청 수를 지정합니다. RequestsMaxBurst 매개변수가 설정되면 서비스에 대한 초당 요청 수가 RequestsPerSecond에 지정된 제한을 RequestsMaxBurst에 지정된 값까지 일시적으로 초과할 수 있습니다. 내부적으로 이는 속도 제한에 사용되는 토큰 버킷의 리필 속도입니다.

값

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

RateLimits{}.InstanceLevel{}.RequestsMaxBurst

서비스에 순간적으로 허용되는 최대 동시 요청 수를 지정합니다. 한도에 도달하면 Consul이 추가 요청을 차단합니다. RequestsPerSecond 매개변수보다 크거나 같은 값을 지정해야 합니다. 지정하지 않으면 이 매개변수는 기본적으로 RequestsPerSecond입니다. 내부적으로 이는 속도 제한에 사용되는 토큰 버킷의 최대 크기입니다.

값

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

RateLimits{}.InstanceLevel{}.Routes

서비스에 대한 특정 경로에 적용할 속도 제한 구성 목록을 지정합니다. Routes 목록의 각 구성원은 RequestsPerSecond 매개변수와 다음 경로 일치 매개변수 중 하나를 구성해야 합니다:

Consul은 각 요청에 대해 첫 번째 일치 경로에 속도 제한 구성을 적용합니다. 예제 구성은 접두사 경로에 요청 속도 제한 활성화를 참조하세요.

값

  • 기본값: None
  • 데이터 유형: 맵

Routes 맵에서 지정할 수 있는 매개변수는 다음 표에 설명되어 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | PathExact | 요청 경로에서 일치시킬 정확한 경로를 지정. 이 필드를 사용할 때 같은 Routes 맵에 PathPrefix 또는 PathRegex를 구성하지 마세요. | String | None | | PathPrefix | 요청 경로에서 일치시킬 경로 접두사를 지정. 이 필드를 사용할 때 같은 Routes 맵에 PathExact 또는 PathRegex를 구성하지 마세요. | String | None | | PathRegex | 요청 경로에서 일치시킬 정규식을 지정. 이 필드를 사용할 때 같은 Routes 맵에 PathExact 또는 PathPrefix를 구성하지 마세요. 구문은 프록시별로 다름. Envoy 사용 시 사용하는 Envoy 버전에 따라 Envoy v1.11.2 이상 문서 또는 Envoy v1.11.1 이하 문서를 참조하세요. | String | None | | RequestsPerSecond | 서비스에 허용되는 초당 평균 요청 수를 지정. 서비스에 대해 지정된 RequestsPerSecond 매개변수를 재정의. | Integer | None | | RequestsMaxBurst | 서비스에 일시적으로 허용되는 최대 동시 요청 수를 지정. 한도에 도달하면 Consul이 추가 요청을 차단. Routes.RequestsPerSecond 매개변수보다 크거나 같은 값을 지정해야 함. 서비스에 대해 지정된 RequestsMaxBurst 매개변수를 재정의. | Integer | None |

UpstreamConfig

기본 업스트림 연결 설정과 개별 업스트림 서비스에 대한 사용자 지정 재정의를 제어합니다. 네트워크에 페더레이션 데이터센터가 포함된 경우 개별 업스트림 구성은 네트워크의 모든 소스-업스트림 대상 서비스 쌍에 적용됩니다. 자세한 내용은 다음 필드를 참조하세요:

값

  • 기본값: None
  • 데이터 유형: 맵

UpstreamConfig.Overrides[]

개별 업스트림에 대한 기본 업스트림 구성을 재정의하는 옵션을 지정합니다.

값

  • 기본값: None
  • 데이터 유형: 목록

UpstreamConfig.Overrides[].Name

구성이 적용되는 업스트림 서비스의 이름을 지정합니다. 구성이 의도하지 않은 업스트림에 적용되는 것을 피하기 위해 * 와일드카드를 사용하지 않는 것을 권장합니다.

값

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

UpstreamConfig.Overrides[].Namespace Enterprise

구성이 적용되는 업스트림 서비스가 포함된 네임스페이스를 지정합니다. 구성이 의도하지 않은 업스트림에 적용되는 것을 방지하려면 * 와일드카드를 사용하지 마세요.

값

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

UpstreamConfig.Overrides[].Peer

구성이 적용되는 업스트림 서비스의 피어 이름을 지정합니다. * 와일드카드는 지원되지 않습니다.

값

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

UpstreamConfig.Overrides[].Protocol

업스트림 리스너에 대한 요청에 사용할 프로토콜을 지정합니다.

L7 기능을 활용할 수 있도록 구성 항목의 기본 Protocol 필드에 프로토콜을 구성하는 것을 권장합니다. 업스트림 구성에서 프로토콜을 설정하면 L7 관리 기능이 제한됩니다.

값

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

UpstreamConfig.Overrides[].ConnectTimeoutMs

서비스가 제한 시간 초과 전에 업스트림 연결을 설정하려 시도해야 하는 시간(밀리초)을 지정합니다.

L7 기능을 활용할 수 있도록 업스트림 대상 서비스의 service-resolver 구성 항목의 connection_timeout 필드에 업스트림 제한 시간을 구성하는 것을 권장합니다. service-defaults 업스트림 구성에서 제한 시간을 구성하면 L7 관리 기능이 제한됩니다.

값

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

UpstreamConfig.Overrides[].MeshGateway

업스트림에 대한 기본 메시 게이트웨이 mode 필드가 포함된 맵. 추가 정보는 메시 게이트웨이 문서의 서비스 메시 프록시 구성을 참조하세요.

값

  • 기본값: none
  • mode 필드에 대해 다음 문자열 값을 지정할 수 있습니다:
    • none: 서비스는 메시 게이트웨이를 통한 아웃바운드 연결을 만들지 않습니다. 대신 대상 서비스에 직접 아웃바운드 연결을 만듭니다.
    • local: 서비스 메시 프록시는 같은 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.
    • remote: 서비스 메시 프록시는 대상 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.

UpstreamConfig.Overrides[].BalanceOutboundConnections

Envoy 프록시 스레드 전반에 걸쳐 업스트림에서 아웃바운드 연결을 할당하는 전략을 설정합니다.

값

지원되는 유일한 값은 exact_balance입니다. 기본적으로 연결은 균형 조정되지 않습니다. 자세한 내용은 Envoy 문서를 참조하세요.

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

UpstreamConfig.Overrides[].Limits

개별 업스트림 서비스에 연결할 때 적용할 일련의 제한을 지정하는 맵.

값

구성할 수 있는 제한은 다음 표에 설명되어 있습니다:

| 제한 (Limit) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | MaxConnections | 서비스 인스턴스가 업스트림에 대해 설정할 수 있는 최대 연결 수를 지정. HTTP/1.1 트래픽에 대해 이 제한을 정의. | Integer | 0 | | MaxPendingRequests | 연결이 설정되기를 기다리는 동안 대기열에 있는 최대 요청 수를 지정. 이 제한이 적용되려면 protocol 필드에 L7 프로토콜이 정의되어야 함. | Integer | 0 | | MaxConcurrentRequests | 최대 동시 요청 수를 지정. HTTP/2 트래픽에 대해 이 제한을 정의. 이 제한이 적용되려면 protocol 필드에 L7 프로토콜이 정의되어야 함. | Integer | 0 |

추가 지침은 업스트림 구성 예제를 참조하세요.

UpstreamConfig.Overrides[].PassiveHealthCheck

Consul이 도달할 수 없거나 오류를 반환하는 업스트림 클러스터의 호스트를 제거할 수 있게 하는 일련의 규칙을 지정하는 맵.

값

구성할 수 있는 수동 health check 매개변수는 다음 표에 설명되어 있습니다:

| 제한 (Limit) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | Interval | check 사이의 시간을 지정. | String | 0s | | MaxFailures | check 간격당 허용되는 연속 실패 횟수를 지정. 초과하면 Consul이 로드 밸런서에서 호스트를 제거. | Integer | 0 | | EnforcingConsecutive5xx | Consul이 아웃라이어 상태를 감지할 때 100번 중 몇 번 호스트를 퇴출하는지 나타내는 백분율을 지정. 아웃라이어 상태는 500-599 응답 범위의 연속 오류로 결정. | Integer | 100 | | MaxEjectionPercent | 프록시가 아웃라이어를 보고할 때 Consul이 퇴출하는 업스트림 클러스터의 최대 백분율을 지정. 값과 무관하게 아웃라이어가 감지되면 Consul은 최소한 한 호스트를 퇴출. | Integer | 10 | | BaseEjectionTime | 퇴출된 호스트가 재합류 전에 클러스터 밖에 남아 있어야 하는 최소 시간을 지정. 실제 시간은 BaseEjectionTime 값에 호스트가 퇴출된 횟수를 곱한 값과 같음. | String | 30s |

UpstreamConfig.Defaults

기본 업스트림 설정을 지정하는 구성을 지정합니다. 개별 업스트림에 대한 기본 구성 재정의에 대한 정보는 UpstreamConfig.Overrides를 참조하세요.

값

  • 기본값: None
  • 데이터 유형: 맵

UpstreamConfig.Defaults.Protocol

업스트림 리스너의 기본 프로토콜을 지정합니다.

L7 기능을 활용할 수 있도록 구성 항목의 기본 Protocol 필드에 프로토콜을 구성하는 것을 권장합니다. 업스트림 구성에서 프로토콜을 설정하면 L7 관리 기능이 제한됩니다.

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

UpstreamConfig.Defaults.ConnectTimeoutMs

모든 서비스가 제한 시간 초과 전에 업스트림 연결을 설정하려 계속 시도해야 하는 시간(밀리초)을 지정합니다.

비-Kubernetes 환경에서는 L7 기능을 활용할 수 있도록 업스트림 대상 서비스의 service-resolver 구성 항목의 connection_timeout 필드에 업스트림 제한 시간을 구성하는 것을 권장합니다. service-defaults 업스트림 구성에서 제한 시간을 구성하면 L7 관리 기능이 제한됩니다.

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

UpstreamConfig.Defaults.MeshGateway

모든 업스트림에 대한 기본 메시 게이트웨이 mode 필드를 지정합니다. 추가 정보는 메시 게이트웨이 문서의 서비스 메시 프록시 구성을 참조하세요.

mode 필드에 대해 다음 문자열 값을 지정할 수 있습니다:

  • None: 서비스는 메시 게이트웨이를 통한 아웃바운드 연결을 만들지 않습니다. 대신 대상 서비스에 직접 아웃바운드 연결을 만듭니다.
  • local: 서비스 메시 프록시는 같은 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.
  • remote: 서비스 메시 프록시는 대상 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.

UpstreamConfig.Defaults.BalanceOutboundConnections

Envoy 프록시 스레드 전반에 걸쳐 업스트림의 아웃바운드 연결을 할당하는 전략을 설정합니다. 지원되는 유일한 값은 exact_balance입니다. 기본적으로 연결은 균형 조정되지 않습니다. 자세한 내용은 Envoy 문서를 참조하세요.

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

UpstreamConfig.Defaults.Limits

업스트림 서비스에 연결할 때 적용할 일련의 제한을 지정하는 맵. 구성할 수 있는 제한은 다음 표에 설명되어 있습니다:

| 제한 (Limit) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | MaxConnections | 서비스 인스턴스가 업스트림에 대해 설정할 수 있는 최대 연결 수를 지정. HTTP/1.1 트래픽에 대해 이 제한을 정의. | Integer | 0 | | MaxPendingRequests | 연결이 설정되기를 기다리는 동안 대기열에 있는 최대 요청 수를 지정. 이 제한이 적용되려면 protocol 필드에 L7 프로토콜이 정의되어야 함. | Integer | 0 | | MaxConcurrentRequests | 최대 동시 요청 수를 지정. HTTP/2 트래픽에 대해 이 제한을 정의. 이 제한이 적용되려면 protocol 필드에 L7 프로토콜이 정의되어야 함. | Integer | 0 |

UpstreamConfig.Defaults.PassiveHealthCheck

Consul이 도달할 수 없거나 오류를 반환하는 업스트림 클러스터의 호스트를 제거할 수 있게 하는 일련의 규칙을 지정하는 맵. 구성할 수 있는 health check 매개변수는 다음 표에 설명되어 있습니다:

| 제한 (Limit) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | Interval | check 사이의 시간을 지정. | String | 0s | | MaxFailures | check 간격당 허용되는 연속 실패 횟수를 지정. 초과하면 Consul이 로드 밸런서에서 호스트를 제거. | Integer | 0 | | EnforcingConsecutive5xx | Consul이 아웃라이어 상태를 감지할 때 100번 중 몇 번 호스트를 퇴출하는지 나타내는 백분율을 지정. 아웃라이어 상태는 500-599 응답 범위의 연속 오류로 결정. | Integer | 100 | | MaxEjectionPercent | 프록시가 아웃라이어를 보고할 때 Consul이 퇴출하는 업스트림 클러스터의 최대 백분율을 지정. 값과 무관하게 아웃라이어가 감지되면 Consul은 최소한 한 호스트를 퇴출. | Integer | 10 | | BaseEjectionTime | 퇴출된 호스트가 재합류 전에 클러스터 밖에 남아 있어야 하는 최소 시간을 지정. 실제 시간은 BaseEjectionTime 값에 호스트가 퇴출된 횟수를 곱한 값과 같음. | String | 30s |

TransparentProxy

투명 모드의 프록시에 특화된 구성을 제어합니다. 추가 정보는 투명 프록시 모드를 참조하세요.

TransparentProxy 블록에서 다음 매개변수를 구성할 수 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | OutboundListenerPort | 프록시가 아웃바운드 트래픽에 대해 수신하는 포트를 지정. 아웃바운드 애플리케이션 트래픽이 리다이렉트되는 포트 번호와 동일해야 함. | Integer | 15001 | | DialedDirectly | true로 설정하면 투명 프록시가 프록시 인스턴스의 IP 주소를 직접 다이얼할 수 있게 함. 투명 프록시는 일반적으로 인스턴스 간 부하를 분산하는 "virtual" 태그가 지정된 주소에서 업스트림을 다이얼함. 리더가 있는 데이터베이스 클러스터 같은 상태 저장 서비스에는 개별 인스턴스를 다이얼하는 것이 유용할 수 있음. | Boolean | false |

MutualTLSMode

이 서비스에 대한 인바운드 연결에 상호 TLS가 필요한지 제어합니다. 이 설정은 투명 프록시가 활성화된 서비스에서만 지원됩니다. 서비스 메시에 서비스를 온보딩하는 동안 필요한 경우에만 permissive 모드를 사용하는 것을 권장합니다.

MutualTLSMode 필드에 대해 다음 문자열 값을 지정할 수 있습니다:

  • "": 이 필드가 비어 있으면 값이 proxy-defaults 구성 항목에서 상속됩니다.
  • strict: 사이드카 프록시는 인바운드 트래픽에 상호 TLS를 요구합니다.
  • permissive: 사이드카 프록시는 사이드카 프록시 서비스 포트에서 상호 TLS 트래픽을 수용하고, 대상 서비스의 포트에서 모든 트래픽을 수용합니다.

EnvoyExtensions

Envoy 프록시 구성을 수정하기 위한 확장 목록. 추가 정보는 Envoy 확장을 참조하세요.

EnvoyExtensions 맵에서 값을 구성하는 방법은 다음 표에 설명되어 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | Name | 확장의 이름을 지정. | String | None | | Required | 확장이 성공적으로 적용되어야 하도록 하려면 true를 지정. 보안 통신에 필요한 확장이 의도치 않게 우회되지 않도록 하는 데 이 매개변수를 사용. Envoy가 필수 확장을 적용하지 못하면 Consul은 오류를 기록하고 모든 확장을 건너뛰며 xDS 리소스를 변경하지 않음. | String | None | | Arguments | 확장에 전달할 인수를 지정. 구현하려는 확장의 문서를 참조. | Map | None | | ConsulVersion | 확장에 대한 Consul 버전 제약을 지정. Consul은 xDS 업데이트 중 런타임 버전에 대해 버전 제약을 검증. 일치하지 않는 버전을 사용하면 Consul이 기록하고 확장을 건너뜀. 구성된 확장이 새 Consul 버전과 호환되지 않을 때 업그레이드 문제를 피하는 데 이 매개변수를 사용. | String | None | | EnvoyVersion | 확장에 대한 Envoy 버전 제약을 지정. Consul은 xDS 업데이트 중 실행 중인 Envoy 프록시 버전에 대해 버전 제약을 검증. 일치하지 않는 버전을 사용하면 Consul이 기록하고 확장을 건너뜀. 구성된 확장이 새 Envoy 버전과 호환되지 않을 때 업그레이드 문제를 피하는 데 이 매개변수를 사용. | String | None |

Destination{}

종료 게이트웨이를 통한 서비스 트래픽의 대상을 구성합니다. 추가 정보는 종료 게이트웨이를 참조하세요.

Destination 블록을 사용하려면 프록시 서비스가 투명 프록시 모드여야 합니다. 추가 정보는 투명 프록시 모드 활성화를 참조하세요.

Destination 블록에서 다음 매개변수를 구성할 수 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | Addresses | 대상의 주소 목록을 지정. 호스트네임과 IP 주소 목록을 구성할 수 있음. 와일드카드는 지원되지 않음. | List | None | | Port | 대상의 포트 번호를 지정. | Integer | 0 |

MaxInboundConnections

각 서비스 인스턴스에 대한 최대 동시 인바운드 연결 수를 지정합니다.

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

MaxRequestHeadersKB

다운스트림 클라이언트에서 업스트림 서비스로 보내는 요청 헤더의 최대 크기(킬로바이트)를 지정합니다. 이 설정은 HTTP 기반 프로토콜(HTTP, HTTP/2, gRPC)에만 적용됩니다. 요청이 이 제한을 초과하면 프록시가 HTTP 431 (Request Header Fields Too Large) 오류를 반환합니다.

참고: 이 설정은 service-defaults 구성 항목에서 서비스 프로토콜이 http, http2 또는 grpc로 구성된 경우에만 적용됩니다.

값

  • 기본값: 60 (Envoy의 기본값)
  • 데이터 유형: 정수
  • 유효한 값: 96 또는 설정하지 않음(60의 기본값 사용)

LocalConnectTimeoutMs

제한 시간 초과 전에 로컬 애플리케이션 인스턴스에 대한 연결을 설정하는 데 허용되는 밀리초 수를 지정합니다.

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

LocalRequestTimeoutMs

로컬 애플리케이션 인스턴스에 대한 HTTP 요청의 제한 시간을 지정합니다. HTTP 기반 프로토콜에만 적용됩니다. 지정하지 않으면 경로 제한 시간에 대한 Envoy 기본값을 상속합니다.

  • 기본값: Envoy에서 15s를 기본값으로 상속
  • 데이터 유형: 문자열

MeshGateway

서비스에 대한 기본 메시 게이트웨이 mode 필드를 지정합니다. 추가 정보는 메시 게이트웨이 문서의 서비스 메시 프록시 구성을 참조하세요.

mode 필드에 대해 다음 문자열 값을 지정할 수 있습니다:

  • none: 서비스는 메시 게이트웨이를 통한 아웃바운드 연결을 만들지 않습니다. 대신 대상 서비스에 직접 아웃바운드 연결을 만듭니다.
  • local: 서비스 메시 프록시는 같은 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.
  • remote: 서비스 메시 프록시는 대상 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.

ExternalSNI

외부 시스템과 페더레이션할 때 TLS 서버 이름 표시(SNI)를 지정합니다.

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

Expose

Envoy를 통해 HTTP 경로를 노출하기 위한 기본 구성을 지정합니다. Envoy를 통해 경로를 노출하면 서비스가 localhost에서만 수신할 수 있습니다. Consul 서비스 메시가 활성화되지 않은 애플리케이션도 HTTP 엔드포인트를 계속 접촉할 수 있습니다. 추가 정보와 예제 구성은 경로 노출 구성 참조를 참조하세요.

  • 기본값: None
  • 데이터 유형: 맵

Expose.Checks

true로 설정하면 에이전트에 등록된 모든 HTTP 및 gRPC check를 노출합니다. Envoy는 check에 대한 리스너를 노출하고 localhost 또는 Consul의 advertise_addr에서 시작된 연결만 수용합니다. 리스너의 포트는 에이전트의 expose_min_port 및 expose_max_port 구성에서 동적으로 할당됩니다.

Kubernetes에서 Consul 에이전트가 자체 파드에서 실행되는 경우처럼 Consul 클라이언트가 localhost를 통해 등록된 서비스에 도달할 수 없을 때 Checks 구성을 활성화하는 것을 권장합니다.

  • 기본값: false
  • 데이터 유형: 부울

Expose.Paths[]

Expose.Checks가 true로 설정될 때 Envoy를 통해 노출할 경로를 정의하는 구성 맵 목록을 지정합니다. 목록의 각 맵에 대해 다음 매개변수를 구성할 수 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | Path | 노출할 HTTP 경로를 지정. 경로 앞에 슬래시(/)를 붙여야 함. | String | None | | LocalPathPort | 로컬 서비스가 경로에 대한 연결을 수신하는 포트를 지정. | Integer | 0 | | ListenPort | 프록시가 연결을 수신하는 포트를 지정. 포트는 사용 가능해야 함. 포트를 사용할 수 없으면 Envoy는 경로에 대한 리스너를 노출하지 않고 프록시 등록은 여전히 성공함. | Integer | 0 | | Protocol | 리스너의 프로토콜을 지정. 다음 값 중 하나를 구성할 수 있음: http / http2: gRPC 트래픽에 사용 | Integer | http |

Kubernetes YAML

apiVersion

Kubernetes와 통합하기 위한 Consul API의 버전을 지정합니다. 값은 consul.hashicorp.com/v1alpha1이어야 합니다. apiVersion 필드는 비-Kubernetes 배포에서는 지원되지 않습니다.

  • 기본값: None
  • 이 필드는 필수입니다.
  • consul.hashicorp.com/v1alpha1로 설정해야 하는 문자열 값.

kind

구성 항목 유형을 지정합니다. ServiceDefaults여야 합니다.

  • 필수: required
  • ServiceDefaults로 설정해야 하는 문자열 값.

metadata

구성 항목이 적용되는 서비스 이름, 네임스페이스, 어드민 파티션이 포함된 맵.

값

metadata.name

defaults를 설정하는 서비스의 이름을 지정합니다.

값

  • 기본값: None
  • 이 필드는 필수입니다.
  • 데이터 유형: 문자열

metadata.namespace Enterprise

구성 항목이 적용되는 Consul 네임스페이스를 지정합니다. Consul 네임스페이스가 Kubernetes 네임스페이스에 매핑되는 방법에 대한 정보는 Consul Enterprise를 참조하세요. Consul Community Edition(Consul CE)은 metadata.namespace 구성을 무시합니다.

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

spec

ServiceDefaults 구성 항목에 대한 세부 정보가 포함된 맵. apiVersion, kind, metadata 필드는 spec 필드의 형제입니다. 다른 모든 구성은 자식입니다.

spec.protocol

서비스의 기본 프로토콜을 지정합니다. 서비스 메시 사용 사례에서 protocol 구성은 다음 기능과 컴포넌트를 활성화하는 데 필요합니다:

ProxyDefaults 구성 항목에서 프록시의 전역 프로토콜을 설정할 수 있지만, ServiceDefaults 구성 항목에 지정된 프로토콜이 ProxyDefaults 구성을 재정의합니다.

값

  • 기본값: tcp
  • 다음 문자열 값 중 하나를 지정할 수 있습니다:

예제 구성은 기본 프로토콜 설정을 참조하세요.

spec.balanceInboundConnections

Envoy 프록시 스레드 전체에 서비스에 대한 인바운드 연결을 할당하는 전략을 지정합니다. 지원되는 유일한 값은 exact_balance입니다. 기본적으로 연결은 균형 조정되지 않습니다. 자세한 내용은 Envoy 문서를 참조하세요.

값

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

spec.mode

서비스가 인바운드 및 아웃바운드 트래픽을 직접하는 방식을 지정합니다.

값

  • 기본값: None
  • 필수: optional
  • 다음 문자열 값을 지정할 수 있습니다:
    • direct: 프록시의 리스너는 로컬 애플리케이션과 다른 프록시가 직접 다이얼해야 합니다.
    • transparent: 서비스는 인바운드 및 아웃바운드 트래픽을 캡처해 프록시를 통해 리다이렉트합니다. 이 모드는 트래픽 리다이렉션을 활성화하지 않습니다. 트래픽이 이미 리다이렉트되고 있는 것처럼 Envoy를 구성하도록 Consul에 지시합니다.

spec.rateLimits Enterprise

서비스의 트래픽 속도를 제한하기 위한 인스턴스 수준 구성이 포함된 맵.

값

  • 기본값: None
  • 데이터 유형: 맵

spec.rateLimits{}.instanceLevel

서비스 인스턴스에 대한 요청 속도 제한 구성 집합이 포함된 맵.

값

  • 기본값: None
  • 데이터 유형: 맵

spec.rateLimits{}.instanceLevel{}.requestsPerSecond

서비스에 허용되는 초당 평균 요청 수를 지정합니다. requestsMaxBurst 매개변수가 설정되면 서비스에 대한 초당 요청 수가 requestsPerSecond에 지정된 제한을 requestsMaxBurst에 지정된 값까지 일시적으로 초과할 수 있습니다. 내부적으로 이는 속도 제한에 사용되는 토큰 버킷의 리필 속도입니다.

값

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

spec.rateLimits{}.instanceLevel{}.requestsMaxBurst

서비스에 순간적으로 허용되는 최대 동시 요청 수를 지정합니다. 한도에 도달하면 Consul이 추가 요청을 차단합니다. requestsPerSecond 매개변수보다 크거나 같은 값을 지정해야 합니다. 지정하지 않으면 이 매개변수는 기본적으로 requestsPerSecond입니다. 내부적으로 이는 속도 제한에 사용되는 토큰 버킷의 최대 크기입니다.

값

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

spec.rateLimits{}.instanceLevel{}.routes

서비스에 대한 특정 경로에 적용할 속도 제한 구성 목록을 지정합니다. routes 목록의 각 구성원은 requestsPerSecond 매개변수와 다음 경로 일치 매개변수 중 하나를 구성해야 합니다:

예제 구성은 예제를 참조하세요.

값

  • 기본값: None
  • 데이터 유형: 맵

routes 맵에서 지정할 수 있는 매개변수는 다음 표에 설명되어 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | pathExact | 요청 경로에서 일치시킬 정확한 경로를 지정. 이 필드를 사용할 때 같은 routes 맵에 pathPrefix 또는 pathRegex를 구성하지 마세요. | String | None | | pathPrefix | 요청 경로에서 일치시킬 경로 접두사를 지정. 이 필드를 사용할 때 같은 routes 맵에 pathExact 또는 pathRegex를 구성하지 마세요. | String | None | | pathRegex | 요청 경로에서 일치시킬 정규식을 지정. 이 필드를 사용할 때 같은 routes 맵에 pathExact 또는 pathPrefix를 구성하지 마세요. 구문은 프록시별로 다름. Envoy 사용 시 사용하는 Envoy 버전에 따라 Envoy v1.11.2 이상 문서 또는 Envoy v1.11.1 이하 문서를 참조하세요. | String | None | | requestsPerSecond | 서비스에 허용되는 초당 평균 요청 수를 지정. 서비스에 대해 지정된 requestsPerSecond 매개변수를 재정의. | Integer | None | | requestsMaxBurst | 서비스에 일시적으로 허용되는 최대 동시 요청 수를 지정. 한도에 도달하면 Consul이 추가 요청을 차단. routes.requestsPerSecond 매개변수보다 크거나 같은 값을 지정해야 함. 서비스에 대해 지정된 requestsMaxBurst 매개변수를 재정의. | Integer | None |

spec.upstreamConfig

기본 업스트림 연결 설정과 개별 업스트림 서비스에 대한 사용자 지정 재정의를 제어하는 맵을 지정합니다. 네트워크에 페더레이션 데이터센터가 포함된 경우 개별 업스트림 구성은 네트워크의 모든 소스-업스트림 대상 서비스 쌍에 적용됩니다.

값

spec.upstreamConfig.overrides[]

개별 업스트림에 대한 기본 업스트림 구성을 재정의하는 옵션을 지정합니다.

값

  • 기본값: None
  • 데이터 유형: 목록

spec.upstreamConfig.overrides[].name

구성이 적용되는 업스트림 서비스의 이름을 지정합니다. 구성이 의도하지 않은 업스트림에 적용되는 것을 방지하려면 * 와일드카드를 사용하지 마세요.

값

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

spec.upstreamConfig.overrides[].namespace Enterprise

구성이 적용되는 업스트림 서비스가 포함된 네임스페이스를 지정합니다. 구성이 의도하지 않은 업스트림에 적용되는 것을 방지하려면 * 와일드카드를 사용하지 마세요.

값

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

spec.upstreamConfig.overrides[].peer

구성이 적용되는 업스트림 서비스의 피어 이름을 지정합니다. * 와일드카드는 지원되지 않습니다.

값

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

spec.upstreamConfig.overrides[].protocol

업스트림 리스너에 대한 요청에 사용할 프로토콜을 지정합니다. L7 기능을 활용할 수 있도록 구성 항목의 기본 protocol 필드에 프로토콜을 구성하는 것을 권장합니다. 업스트림 구성에서 프로토콜을 설정하면 L7 관리 기능이 제한됩니다.

값

  • 기본값: 기본 protocol 구성을 상속
  • 데이터 유형: 문자열

spec.upstreamConfig.overrides[].connectTimeoutMs

서비스가 제한 시간 초과 전에 업스트림 연결을 설정하려 시도해야 하는 시간(밀리초)을 지정합니다.

L7 기능을 활용할 수 있도록 업스트림 대상 서비스의 ServiceResolver CRD의 connectTimeout 필드에 업스트림 제한 시간을 구성하는 것을 권장합니다. ServiceDefaults 업스트림 구성에서 제한 시간을 구성하면 L7 관리 기능이 제한됩니다.

값

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

spec.upstreamConfig.overrides[].meshGateway.mode

업스트림에 대한 기본 메시 게이트웨이 mode 필드가 포함된 맵. 추가 정보는 메시 게이트웨이 문서의 Connect 프록시 구성을 참조하세요.

값

mode 필드에 대해 다음 문자열 값을 지정할 수 있습니다:

  • none: 서비스는 메시 게이트웨이를 통한 아웃바운드 연결을 만들지 않습니다. 대신 대상 서비스에 직접 아웃바운드 연결을 만듭니다.
  • local: 서비스 메시 프록시는 같은 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.
  • remote: 서비스 메시 프록시는 대상 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.

spec.upstreamConfig.overrides[].balanceInboundConnections

Envoy 프록시 스레드 전반에 걸쳐 업스트림에서 아웃바운드 연결을 할당하는 전략을 설정합니다. 지원되는 유일한 값은 exact_balance입니다. 기본적으로 연결은 균형 조정되지 않습니다. 자세한 내용은 Envoy 문서를 참조하세요.

값

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

spec.upstreamConfig.overrides[].limits

개별 업스트림 서비스에 연결할 때 적용할 일련의 제한을 지정하는 맵.

값

구성할 수 있는 제한은 다음 표에 설명되어 있습니다:

| 제한 (Limit) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | maxConnections | 서비스 인스턴스가 업스트림에 대해 설정할 수 있는 최대 연결 수를 지정. HTTP/1.1 트래픽에 대해 이 제한을 정의. | Integer | 0 | | maxPendingRequests | 연결이 설정되기를 기다리는 동안 대기열에 있는 최대 요청 수를 지정. 이 제한이 적용되려면 protocol 필드에 L7 프로토콜이 정의되어야 함. | Integer | 0 | | maxConcurrentRequests | 최대 동시 요청 수를 지정. HTTP/2 트래픽에 대해 이 제한을 정의. 이 제한이 적용되려면 protocol 필드에 L7 프로토콜이 정의되어야 함. | Integer | 0 |

spec.upstreamConfig.overrides[].passiveHealthCheck

Consul이 도달할 수 없거나 오류를 반환하는 업스트림 클러스터의 호스트를 제거할 수 있게 하는 일련의 규칙을 지정하는 맵.

값

구성할 수 있는 수동 health check 매개변수는 다음 표에 설명되어 있습니다:

| 제한 (Limit) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | interval | check 사이의 시간을 지정. | String | 0s | | maxFailures | check 간격당 허용되는 연속 실패 횟수를 지정. 초과하면 Consul이 로드 밸런서에서 호스트를 제거. | Integer | 0 | | enforcingConsecutive5xx | Consul이 아웃라이어 상태를 감지할 때 100번 중 몇 번 호스트를 퇴출하는지 나타내는 백분율을 지정. 아웃라이어 상태는 500-599 응답 범위의 연속 오류로 결정. | Integer | 100 | | maxEjectionPercent | 아웃라이어 감지로 인해 퇴출될 수 있는 업스트림 클러스터의 최대 %. 기본적으로 10%이지만 값과 무관하게 최소한 한 호스트를 퇴출. | Integer | 10 | | baseEjectionTime | 호스트가 퇴출되는 기본 시간. 실제 시간은 기본 시간에 호스트가 퇴출된 횟수를 곱한 값과 같고 max_ejection_time(기본 300s)으로 상한이 정해짐. 기본적으로 30000ms 또는 30s. | String | 30s |

spec.upstreamConfig.defaults

서비스에 대한 기본 업스트림 구성을 설정하는 구성 맵. 개별 업스트림에 대한 기본 구성 재정의에 대한 정보는 spec.upstreamConfig.overrides를 참조하세요.

값

  • 기본값: None
  • 데이터 유형: 목록

spec.upstreamConfig.defaults.protocol

업스트림 리스너의 기본 프로토콜을 지정합니다. L7 기능을 활용할 수 있도록 구성 항목의 기본 Protocol 필드에 프로토콜을 구성하는 것을 권장합니다. 업스트림 구성에서 프로토콜을 설정하면 L7 관리 기능이 제한됩니다.

값

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

spec.upstreamConfig.default.connectTimeoutMs

모든 서비스가 제한 시간 초과 전에 업스트림 연결을 설정하려 계속 시도해야 하는 시간(밀리초)을 지정합니다.

L7 기능을 활용할 수 있도록 업스트림 대상 서비스의 ServiceResolver CRD의 connectTimeout 필드에 업스트림 제한 시간을 구성하는 것을 권장합니다. ServiceDefaults 업스트림 구성에서 제한 시간을 구성하면 L7 관리 기능이 제한됩니다.

값

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

spec.upstreamConfig.defaults.meshGateway.mode

모든 업스트림에 대한 기본 메시 게이트웨이 mode 필드를 지정합니다. 추가 정보는 서비스 메시 프록시 구성을 참조하세요.

값

mode 필드에 대해 다음 문자열 값을 지정할 수 있습니다:

  • none: 서비스는 메시 게이트웨이를 통한 아웃바운드 연결을 만들지 않습니다. 대신 대상 서비스에 직접 아웃바운드 연결을 만듭니다.
  • local: 서비스 메시 프록시는 같은 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.
  • remote: 서비스 메시 프록시는 대상 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.

spec.upstreamConfig.defaults.balanceInboundConnections

Envoy 프록시 스레드 전반에 걸쳐 업스트림의 아웃바운드 연결을 할당하는 전략을 설정합니다. 지원되는 유일한 값은 exact_balance입니다. 기본적으로 연결은 균형 조정되지 않습니다. 자세한 내용은 Envoy 문서를 참조하세요.

값

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

spec.upstreamConfig.defaults.limits

업스트림 서비스에 연결할 때 적용할 일련의 제한을 지정하는 맵.

값

구성할 수 있는 제한은 다음 표에 설명되어 있습니다:

| 제한 (Limit) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | maxConnections | 서비스 인스턴스가 업스트림에 대해 설정할 수 있는 최대 연결 수를 지정. HTTP/1.1 트래픽에 대해 이 제한을 정의. | Integer | 0 | | maxPendingRequests | 연결이 설정되기를 기다리는 동안 대기열에 있는 최대 요청 수를 지정. 이 제한이 적용되려면 protocol 필드에 L7 프로토콜이 정의되어야 함. | Integer | 0 | | maxConcurrentRequests | 최대 동시 요청 수를 지정. HTTP/2 트래픽에 대해 이 제한을 정의. 이 제한이 적용되려면 protocol 필드에 L7 프로토콜이 정의되어야 함. | Integer | 0 |

spec.upstreamConfig.defaults.passiveHealthCheck

Consul이 도달할 수 없거나 오류를 반환하는 업스트림 클러스터의 호스트를 제거할 수 있게 하는 일련의 규칙을 지정하는 맵.

값

구성할 수 있는 health check 매개변수는 다음 표에 설명되어 있습니다:

| 제한 (Limit) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | interval | check 사이의 시간을 지정. | String | 0s | | maxFailures | check 간격당 허용되는 연속 실패 횟수를 지정. 초과하면 Consul이 로드 밸런서에서 호스트를 제거. | Integer | 0 | | enforcingConsecutive5xx | Consul이 아웃라이어 상태를 감지할 때 100번 중 몇 번 호스트를 퇴출하는지 나타내는 백분율을 지정. 아웃라이어 상태는 500-599 응답 범위의 연속 오류로 결정. | Integer | 100 | | MaxEjectionPercent | 프록시가 아웃라이어를 보고할 때 Consul이 퇴출하는 업스트림 클러스터의 최대 백분율을 지정. 값과 무관하게 아웃라이어가 감지되면 Consul은 최소한 한 호스트를 퇴출. | Integer | 10 | | BaseEjectionTime | 퇴출된 호스트가 재합류 전에 클러스터 밖에 남아 있어야 하는 최소 시간을 지정. 실제 시간은 BaseEjectionTime 값에 호스트가 퇴출된 횟수를 곱한 값과 같음. | String | 30s |

spec.transparentProxy

투명 모드의 프록시에 특화된 구성 맵. 추가 정보는 투명 프록시를 참조하세요.

값

TransparentProxy 블록에서 다음 매개변수를 구성할 수 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | outboundListenerPort | 프록시가 아웃바운드 트래픽에 대해 수신하는 포트를 지정. 아웃바운드 애플리케이션 트래픽이 리다이렉트되는 포트 번호와 동일해야 함. | Integer | 15001 | | dialedDirectly | true로 설정하면 투명 프록시가 프록시 인스턴스의 IP 주소를 직접 다이얼할 수 있게 함. 투명 프록시는 일반적으로 인스턴스 간 부하를 분산하는 "virtual" 태그가 지정된 주소에서 업스트림을 다이얼함. 리더가 있는 데이터베이스 클러스터 같은 상태 저장 서비스에는 개별 인스턴스를 다이얼하는 것이 유용할 수 있음. | Boolean | false |

spec.mutualTLSMode

이 서비스에 대한 인바운드 연결에 상호 TLS가 필요한지 제어합니다. 이 설정은 투명 프록시가 활성화된 서비스에서만 지원됩니다. 서비스 메시에 서비스를 온보딩하는 동안 필요한 경우에만 permissive 모드를 사용하는 것을 권장합니다.

값

MutualTLSMode 필드에 대해 다음 문자열 값을 지정할 수 있습니다:

  • "": 이 필드가 비어 있으면 값이 proxy-defaults 구성 항목에서 상속됩니다.
  • strict: 사이드카 프록시는 인바운드 트래픽에 상호 TLS를 요구합니다.
  • permissive: 사이드카 프록시는 사이드카 프록시 서비스 포트에서 상호 TLS 트래픽을 수용하고, 대상 서비스의 포트에서 모든 트래픽을 수용합니다.

spec.envoyExtensions

Envoy 프록시 구성을 수정하기 위한 확장 목록. 추가 정보는 Envoy 확장을 참조하세요.

값

envoyExtensions 맵에서 값을 구성하는 방법은 다음 표에 설명되어 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | name | 확장의 이름을 지정. | String | None | | required | 확장이 성공적으로 적용되어야 하도록 하려면 true를 지정. 보안 통신에 필요한 확장이 의도치 않게 우회되지 않도록 하는 데 이 매개변수를 사용. Envoy가 필수 확장을 적용하지 못하면 Consul은 오류를 기록하고 모든 확장을 건너뛰며 xDS 리소스를 변경하지 않음. | String | None | | arguments | 확장에 전달할 인수를 지정. 확장에 대한 문서를 참조. | Map | None | | consulVersion | 확장에 대한 Consul 버전 제약을 지정. Consul은 xDS 업데이트 중 런타임 버전에 대해 버전 제약을 검증. 일치하지 않는 버전을 사용하면 Consul이 기록하고 확장을 건너뜀. 구성된 확장이 새 Consul 버전과 호환되지 않을 때 업그레이드 문제를 피하는 데 이 매개변수를 사용. | String | None | | envoyVersion | 확장에 대한 Envoy 버전 제약을 지정. Consul은 xDS 업데이트 중 실행 중인 Envoy 프록시 버전에 대해 버전 제약을 검증. 일치하지 않는 버전을 사용하면 Consul이 기록하고 확장을 건너뜀. 구성된 확장이 새 Envoy 버전과 호환되지 않을 때 업그레이드 문제를 피하는 데 이 매개변수를 사용. | String | None |

spec.destination

종료 게이트웨이를 통해 라우팅되는 서비스 트래픽에 대한 하나 이상의 대상을 지정하는 구성 맵. 추가 정보는 종료 게이트웨이를 참조하세요.

destination 블록을 사용하려면 프록시 서비스가 투명 프록시 모드여야 합니다. 추가 정보는 투명 프록시 모드 활성화를 참조하세요.

값

destination 블록에서 다음 매개변수를 구성할 수 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | addresses | 대상의 주소 목록을 지정. 호스트네임과 IP 주소 목록을 구성할 수 있음. 와일드카드는 지원되지 않음. | List | None | | port | 대상의 포트 번호를 지정. | Integer | 0 |

spec.maxInboundConnections

각 서비스 인스턴스에 대한 최대 동시 인바운드 연결 수를 지정합니다.

값

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

spec.maxRequestHeadersKB

다운스트림 클라이언트에서 업스트림 서비스로 보내는 요청 헤더의 최대 크기(킬로바이트)를 지정합니다. 이 설정은 HTTP 기반 프로토콜(HTTP, HTTP/2, gRPC)에만 적용됩니다. 요청이 이 제한을 초과하면 프록시가 HTTP 431 (Request Header Fields Too Large) 오류를 반환합니다.

참고: 이 설정은 service-defaults 구성 항목에서 서비스 프로토콜이 http, http2 또는 grpc로 구성된 경우에만 적용됩니다.

값

  • 기본값: 60 (Envoy의 기본값)
  • 데이터 유형: 정수
  • 유효한 값: 96 또는 설정하지 않음(60의 기본값 사용)

spec.localConnectTimeoutMs

제한 시간 초과 전에 로컬 애플리케이션 인스턴스에 대한 연결을 설정하는 데 허용되는 밀리초 수를 지정합니다.

값

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

spec.localRequestTimeoutMs

로컬 애플리케이션 인스턴스에 대한 HTTP 요청의 제한 시간을 지정합니다. HTTP 기반 프로토콜에만 적용됩니다. 지정하지 않으면 경로 제한 시간에 대한 Envoy 기본값을 상속합니다.

값

  • Envoy에서 상속된 기본값 15s
  • 데이터 유형: 문자열

spec.meshGateway.mode

서비스에 대한 기본 메시 게이트웨이 mode 필드를 지정합니다. 추가 정보는 서비스 메시 프록시 구성을 참조하세요.

값

mode 필드에 대해 다음 문자열 값을 지정할 수 있습니다:

  • none: 서비스는 메시 게이트웨이를 통한 아웃바운드 연결을 만들지 않습니다. 대신 대상 서비스에 직접 아웃바운드 연결을 만듭니다.
  • local: 서비스 메시 프록시는 같은 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.
  • remote: 서비스 메시 프록시는 대상 데이터센터에서 실행되는 게이트웨이에 아웃바운드 연결을 만듭니다.

spec.externalSNI

외부 시스템과 페더레이션할 때 TLS 서버 이름 표시(SNI)를 지정합니다.

값

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

spec.expose

Envoy를 통해 HTTP 경로를 노출하기 위한 기본 구성을 지정합니다. Envoy를 통해 경로를 노출하면 서비스가 localhost에서만 수신할 수 있습니다. Consul 서비스 메시가 활성화되지 않은 애플리케이션도 HTTP 엔드포인트를 계속 접촉할 수 있습니다. 추가 정보와 예제 구성은 경로 노출 구성 참조를 참조하세요.

값

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

spec.expose.checks

true로 설정하면 에이전트에 등록된 모든 HTTP 및 gRPC check를 노출합니다. Envoy는 check에 대한 리스너를 노출하고 localhost 또는 Consul 에이전트의 advertise_addr에서 시작된 연결만 수용합니다. 리스너의 포트는 에이전트의 expose_min_port 및 expose_max_port 구성에서 동적으로 할당됩니다.

Kubernetes에서 Consul 에이전트가 자체 파드에서 실행되는 경우처럼 Consul 클라이언트가 localhost를 통해 등록된 서비스에 도달할 수 없을 때 Checks 구성을 활성화하는 것을 권장합니다.

값

  • 기본값: false
  • 데이터 유형: 부울

spec.expose.paths[]

spec.expose.checks가 true로 설정될 때 Envoy를 통해 노출할 경로를 정의하는 맵 목록을 지정합니다.

값

각 맵의 매개변수는 다음 표에 설명되어 있습니다:

| 매개변수 (Parameter) | 설명 (Description) | 데이터 유형 (Data type) | 기본값 (Default) | | path | 노출할 HTTP 경로를 지정. 경로 앞에 슬래시(/)를 붙여야 함. | String | None | | localPathPort | 로컬 서비스가 경로에 대한 연결을 수신하는 포트를 지정. | Integer | 0 | | listenPort | 프록시가 연결을 수신하는 포트를 지정. 포트는 사용 가능해야 함. 포트를 사용할 수 없으면 Envoy는 경로에 대한 리스너를 노출하지 않고 프록시 등록은 여전히 성공함. | Integer | 0 | | protocol | 리스너의 프로토콜을 지정. 다음 값 중 하나를 구성할 수 있음: http / http2: gRPC 트래픽에 사용 | Integer | http |

예제 구성 (Example configurations)

다음 예제는 일반적인 service-defaults 구성을 설명합니다.

기본 프로토콜 설정 (Set the default protocol)

다음 예제에서 default 네임스페이스의 web 서비스에 대한 프로토콜이 http로 설정됩니다:

HCL

Kind      = "service-defaults"
Name      = "web"
Namespace = "default"
Protocol  = "http"

Kubernetes YAML

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceDefaults
metadata:
  name: web
spec:
  protocol: http

JSON

{
  "Kind": "service-defaults",
  "Name": "web",
  "Namespace": "default",
  "Protocol": "http"
}

또한 proxy-defaults 구성 항목에서 모든 프록시의 전역 기본 프로토콜을 설정할 수 있지만, service-defaults 구성 항목에서 개별 서비스 인스턴스에 지정된 프로토콜이 proxy-defaults에 설정된 전역 값보다 우선합니다.

업스트림 구성 (Upstream configuration)

Consul CE

다음 예제는 dashboard 서비스의 모든 업스트림에 대한 기본 연결 제한과 메시 게이트웨이 모드를 설정합니다. 또한 counting 업스트림 서비스를 다이얼할 때 사용되는 메시 게이트웨이 모드를 재정의합니다.

HCL

Kind = "service-defaults"
Name = "dashboard"

UpstreamConfig = {
  Defaults = {
    MeshGateway = {
      Mode = "local"
    }
    Limits = {
      MaxConnections = 512
      MaxPendingRequests = 512
      MaxConcurrentRequests = 512
    }
  }

  Overrides = [
    {
      Name = "counting"
      MeshGateway = {
        Mode = "remote"
      }
    }
  ]
}

Kubernetes YAML

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceDefaults
metadata:
  name: dashboard
spec:
  upstreamConfig:
    defaults:
      meshGateway:
        mode: local
      limits:
        maxConnections: 512
        maxPendingRequests: 512
        maxConcurrentRequests: 512
    overrides:
      - name: counting
        meshGateway:
          mode: remote

JSON

{
  "Kind": "service-defaults",
  "Name": "dashboard",
  "UpstreamConfig": {
    "Defaults": {
      "MeshGateway": {
        "Mode": "local"
      },
      "Limits": {
        "MaxConnections": 512,
        "MaxPendingRequests": 512,
        "MaxConcurrentRequests": 512
      }
    },
    "Overrides": [
      {
        "Name": "counting",
        "MeshGateway": {
          "Mode": "remote"
        }
      }
    ]
  }
}

Consul Enterprise

다음 예제는 counting 서비스의 모든 업스트림에 대한 기본 연결 제한과 메시 게이트웨이 모드를 구성합니다. 또한 frontend 네임스페이스의 dashboard 서비스를 다이얼할 때 사용되는 메시 게이트웨이 모드를 재정의합니다.

HCL

Kind = "service-defaults"
Name = "dashboard"
Namespace = "product"

UpstreamConfig = {
  Defaults = {
    MeshGateway = {
      Mode = "local"
    }
    Limits = {
      MaxConnections = 512
      MaxPendingRequests = 512
      MaxConcurrentRequests = 512
    }
  }

  Overrides = [
    {
      Name = "counting"
      Namespace = "backend"
      MeshGateway = {
        Mode = "remote"
      }
    }
  ]
}

Kubernetes YAML

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceDefaults
metadata:
  name: dashboard
  namespace: product
spec:
  upstreamConfig:
    defaults:
      meshGateway:
        mode: local
      limits:
        maxConnections: 512
        maxPendingRequests: 512
        maxConcurrentRequests: 512
    overrides:
      - name: counting
        namespace: backend
        meshGateway:
          mode: remote

JSON

{
  "Kind": "service-defaults",
  "Name": "dashboard",
  "Namespace": "product",
  "UpstreamConfig": {
    "Defaults": {
      "MeshGateway": {
        "Mode": "local"
      },
      "Limits": {
        "MaxConnections": 512,
        "MaxPendingRequests": 512,
        "MaxConcurrentRequests": 512
      }
    },
    "Overrides": [
      {
        "Name": "counting",
        "Namespace": "backend",
        "MeshGateway": {
          "Mode": "remote"
        }
      }
    ]
  }
}

종료 게이트웨이 대상 (Terminating gateway destination)

다음 예제는 종료 게이트웨이에 할당된 기본 대상을 만듭니다. 대상은 Consul 클러스터 외부의 위치를 나타냅니다. 투명 프록시 모드가 활성화되면 서비스는 직접 다이얼되는 대상을 다이얼할 수 있습니다. 대상을 구성하려면 프록시 서비스가 투명 프록시 모드여야 합니다. 추가 정보는 투명 프록시 모드 활성화를 참조하세요.

HCL

Kind = "service-defaults"
Name = "test-destination"
Protocol = "tcp"
Destination {
  Addresses = ["test.com","test.org"]
  Port = 443
}

Kubernetes YAML

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceDefaults
metadata:
  name: test-destination
spec:
  protocol: tcp
  destination:
    addresses:
      - "test.com"
      - "test.org"
    port: 443

JSON

{
  "Kind": "service-defaults",
  "Name": "test-destination",
  "Protocol": "tcp",
  "Destination": {
    "Addresses": ["test.com","test.org"],
    "Port": 443
  }
}

모든 경로에서 서비스에 대한 요청 속도 제한 활성화 Enterprise

다음 예제는 billing이라는 서비스의 기본 동작을 구성합니다. 이 구성은 billing 서비스의 각 인스턴스를 초당 평균 1000 요청으로 제한하지만 서비스가 최대 1500 동시 요청을 수용하게 합니다.

HCL

Kind = "service-defaults"
Name = "billing"
Protocol = "http"

RateLimit {
  InstanceLevel {
    RequestsPerSecond = 1000
    RequestsMaxBurst = 1500
  }
}

Kubernetes YAML

kind: ServiceDefaults
name: billing
protocol: http
rateLimit:
  instanceLevel:
    requestsPerSecond: 1000
    requestsMaxBurst: 1500

JSON

{
  "Kind": "service-defaults",
  "Name": "billing",
  "Protocol": "http",
  "RateLimit": {
    "InstanceLevel": {
      "RequestsPerSecond": 1000,
      "RequestsMaxBurst": 1500
    }
  }
}

접두사 경로에 요청 속도 제한 활성화 Enterprise

다음 예제는 service-foo에 대한 모든 경로의 요청 속도를 초당 평균 1000 요청으로 제한하지만 최대 1500개의 일시적 동시 요청을 허용합니다. 그러나 /admin으로 시작하는 요청 경로는 초당 20 요청으로 제한됩니다.

HCL

Kind = "service-defaults"
Name = "service-foo"
Protocol = "http"

RateLimit {
  InstanceLevel {
    RequestsPerSecond = 1000
    RequestsMaxBurst = 1500

    Routes = [
      {
         PathPrefix = "/admin"
         RequestsPerSecond = 20
      }
    ]
  }
}

Kubernetes YAML

kind: service-defaults
name: service-foo
protocol: http
rateLimit:
  instanceLevel:
    requestsPerSecond: 1000
    requestsMaxBurst: 1500
    routes:
      - pathPrefix: /admin
        requestsPerSecond: 20

JSON

{
  "Kind": "service-defaults",
  "Name": "service-foo",
  "Protocol": "http",
  "RateLimit": {
    "InstanceLevel": {
      "RequestsPerSecond": 1000,
      "RequestsMaxBurst": 1500,
      "Routes": [
        {
          "PathPrefix": "/admin",
          "RequestsPerSecond": 20
        }
      ]
    }
  }
}

여러 경로에 요청 속도 제한 활성화 Enterprise

다음 예제는 billing이라는 서비스의 기본 동작을 구성합니다. 이 구성은 billing 서비스의 각 인스턴스가 요청을 받은 경로에 따라 제한을 지정합니다. 요청이 /api 접두사가 있는 HTTP 경로에서 이루어지면 서비스는 평균 500 요청으로 제한됩니다. billing 서비스의 인스턴스가 /login 경로에서 요청을 받으면 초당 평균 100 요청과 500 동시 연결로 제한됩니다.

HCL

Kind = "service-defaults"
Name = "billing"
Protocol = "http"

RateLimit {
  InstanceLevel {
    Routes = [
      {
         PathPrefix = "/api"
         RequestsPerSecond = 500
      },
      {
         PathPrefix = "/login"
         RequestsPerSecond = 100
         RequestsMaxBurst = 500
      }
    ]
  }
}

Kubernetes YAML

kind: service-defaults
name: billing
protocol: http
rateLimit:
  instanceLevel:
    routes:
      - pathPrefix: /api
        requestsPerSecond: 500
      - pathPrefix: /login
        requestsPerSecond: 100
        requestsMaxBurst: 500

JSON

{
  "Kind": "service-defaults",
  "Name": "billing",
  "Protocol": "http",
  "RateLimit": {
    "InstanceLevel": {
      "Routes": [
        {
          "PathPrefix": "/api",
          "RequestsPerSecond": 500
        },
        {
          "PathPrefix": "/login",
          "RequestsPerSecond": 100,
          "RequestsMaxBurst": 500
        }
      ]
    }
  }
}

HTTP 요청 헤더 크기 제한 (HTTP Request Header Size Limits)

다음 예제는 web 서비스에 대한 HTTP 요청 헤더의 서비스별 96KB 제한을 구성합니다.

HCL

Kind = "service-defaults"
Name = "web"
Protocol = "http"
MaxRequestHeadersKB = 96

Kubernetes YAML

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceDefaults
metadata:
  name: web
spec:
  protocol: http
  maxRequestHeadersKB: 96

JSON

{
  "Kind": "service-defaults",
  "Name": "web",
  "Protocol": "http",
  "MaxRequestHeadersKB": 96
}

더 알아보기 (Learn more)