Ingress Gateway 구성 항목 참조

Ingress Gateway 구성 항목 참조

이 페이지는 ingress gateway 구성 항목(configuration entry)에 대한 설정 참조 정보를 제공해요. ingress gateway는 서비스 메시 외부의 서비스에서 메시 내부의 서비스로 네트워크 연결을 가능하게 하기 위해 Consul에 서비스로 등록하는 프록시 유형이에요. 추가 정보는 Ingress gateways 개요를 참조하세요.

참고

Ingress gateway는 더 이상 사용되지 않으며(deprecated) 현재 기능 이상으로 향상되지 않아요. Ingress gateway는 이 버전에서 완전히 지원되지만 향후 Consul 릴리스에서는 제거될 예정이에요. Consul의 API gateway가 ingress gateway의 권장 대안이에요.

출처: 문서

본문

구성 모델 (Configuration model)

다음 목록은 구성 항목의 구성 계층, 언어별 데이터 타입, 해당 시 기본값, 요구 사항을 설명해요. 속성 이름을 클릭하면 추가 세부 정보를 볼 수 있어요.

완전한 구성 (Complete configuration)

모든 필드가 정의될 때 ingress gateway 구성 항목은 다음과 같은 형태를 가져요.

Kind      = "ingress-gateway"
Name      = "<name of the gateway>"
Namespace = "<namespace to register the gateway>"
Partition = "<partition to register the gateway>"
Meta = {
  <key> = "<value>"
}
TLS = {
  Enabled       = false
  TLSMinVersion = "TLSv1_2"
  TLSMaxVersion = "<max version of TLS supported for this gateway>"
  CipherSuites = [
    "<cipher>"
  ]
  SDS = {
    ClusterName  = "<name of SDS cluster>"
    CertResource = "<SDS resource name>"
  }
}
Defaults = {
  MaxConnections        = <number>
  MaxPendingRequests    = <number>
  MaxConcurrentRequests = <number>
  PassiveHealthCheck = {
    Interval                = "<the time between checks>"
    MaxFailures             = <number>
    EnforcingConsecutive5xx = <number>
    MaxEjectionPercent      = <number>
    BaseEjectionTime        = "<the base time that a host is ejected for>"
  }
}
Listeners = [
  {
    Port     = 0
    Protocol = "tcp"
    Services = [
      {
        Name      = "<name of external service>"
        Namespace = "<namespace containing the external service>"
        Partition = "<partition containing the external service>"
        Hosts = [
          ".ingress.*"
        ]
        RequestHeaders = {
          Add = {
            RequestHeaderName = "<request header value to add>"
          }
          Set = {
            RequestHeaderName = "<request header value to set>"
          }
          Remove = [
            "<request header to remove>"
          ]
        }
        ResponseHeaders = {
          Add = {
            ResponseHeaderName = "<response header value to add>"
          }
          Set = {
            ResponseHeaderName = "<response header value to set>"
          }
          Remove = [
            "<response header remove>"
          ]
        }
        TLS = {
          SDS = {
            ClusterName  = "<name of SDS cluster>"
            CertResource = "<name of SDS source>"
          }
        }
        MaxConnections        = <number>
        MaxPendingRequests    = <number>
        MaxConcurrentRequests = <number>
        PassiveHealthCheck = {
          Interval                = "<the time between checks>"
          MaxFailures             = <number>
          EnforcingConsecutive5xx = <number>
          MaxEjectionPercent      = <number>
          BaseEjectionTime        = "<the base time that a host is ejected for>"
        }
    }]
    TLS = {
      Enabled       = false
      TLSMinVersion = "TLSv1_2"
      TLSMaxVersion = "<max supported version for the listener>"
      CipherSuites = [
        "<ciphersuite>"
      ]
      SDS = {
        ClusterName  = "<name of SDS cluster>"
        CertResource = "<SDS resource name>"
      }
    }
  }
]

사양 (Specification)

이 섹션은 ingress gateway 구성 항목에서 구성할 수 있는 필드에 대한 세부 정보를 제공해요.

Kind

구성 항목의 유형을 지정해요. ingress-gateway로 설정해야 해요.

값

  • 기본값: 없음
  • 이 필드는 필수예요.
  • 데이터 타입: ingress-gateway로 설정해야 하는 String 값이에요.

Name

게이트웨이의 이름을 지정해요. 이름은 consul config 명령으로 Consul 작업을 수행할 때 구성 항목을 참조하는 데 사용할 수 있는 메타데이터예요.

값

  • 기본값: 없음
  • 이 필드는 필수예요.
  • 데이터 타입: String

Namespace Enterprise

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

지정하지 않으면 ingress gateway는 default 네임스페이스에 적용돼요. /config API 엔드포인트로 구성 항목을 등록할 때 ns 쿼리 매개변수를 지정해 네임스페이스를 재정의할 수 있어요.

값

  • 기본값: default
  • 데이터 타입: String

Partition Enterprise

ingress gateway가 적용되는 admin partition을 지정해요. 값은 게이트웨이가 등록된 파티션과 일치해야 해요. 추가 정보는 Admin partitions를 참조하세요.

지정하지 않으면 ingress gateway는 default 파티션에 적용돼요. /config API 엔드포인트로 구성 항목을 등록할 때 partition 쿼리 매개변수를 지정해 파티션을 재정의할 수 있어요.

값

  • 기본값: default
  • 데이터 타입: String

Meta

Consul KV에 저장할 임의의 키-값 쌍 집합을 정의해요.

값

  • 기본값: 없음
  • 데이터 타입: 하나 이상의 키-값 쌍으로 구성된 Map. keys: String, values: String, integer, 또는 float

TLS

게이트웨이의 TLS 구성 설정을 지정해요.

값

TLS.Enabled

구성 항목의 TLS를 활성화하거나 비활성화해요. 게이트웨이의 모든 리스너에 대해 내장 TLS를 활성화하려면 true로 설정하세요. TLS는 기본적으로 비활성화돼요.

활성화하면 Consul은 각 서비스의 Hosts 필드에 정의된 각 호스트를 게이트웨이의 x509 인증서에 DNS 주체 대체 이름(SAN)으로 추가해요.

값

  • 기본값: false
  • 데이터 타입: boolean

TLS.TLSMinVersion

게이트웨이 리스너에서 지원하는 최소 TLS 버전을 지정해요.

값

  • 기본값: Envoy 버전에 따라 다름: Envoy v1.22.0 이상: TLSv1_2, 이전 버전: TLSv1_0
  • 데이터 타입: 다음 값 중 하나를 가진 String: TLS_AUTO, TLSv1_0, TLSv1_1, TLSv1_2, TLSv1_3

TLS.TLSMaxVersion

게이트웨이 리스너에서 지원하는 최대 TLS 버전을 지정해요.

값

  • 기본값: Envoy 버전에 따라 다름: Envoy v1.22.0 이상: TLSv1_2, 이전 버전: TLSv1_0
  • 데이터 타입: 다음 값 중 하나를 가진 String: TLS_AUTO, TLSv1_0, TLSv1_1, TLSv1_2, TLSv1_3

TLS.CipherSuites[]

TLS 1.2 이하를 사용해 연결을 협상할 때 게이트웨이 리스너가 지원하는 cipher suite 목록을 지정해요. 지정하지 않으면 Consul은 사용 중인 Envoy 버전의 기본값을 적용해요. 자세한 내용은 Envoy 문서를 참조하세요.

값

  • 기본값: 없음
  • 데이터 타입: String 값 목록. 지원되는 cipher 목록은 Consul 저장소를 참조하세요.

TLS.SDS

외부 SDS 서비스에서 TLS 인증서를 로드하기 위한 매개변수를 지정해요. 추가 정보는 외부 서비스에서 사용자 지정 TLS 인증서 제공을 참조하세요.

Consul은 이 필드에 지정된 SDS 구성을 게이트웨이에 정의된 모든 리스너의 기본값으로 적용해요. 리스너에 정의된 서비스별 또는 리스너별로 SDS 설정을 재정의할 수 있어요. 추가 정보는 다음 구성을 참조하세요:

값

다음 표는 SDS 매개변수를 구성하는 방법을 설명해요.

| Parameter | Description | Data type | | ClusterName | Consul이 인증서를 검색해야 하는 SDS 클러스터의 이름을 지정해요. 클러스터는 게이트웨이의 부트스트랩 구성에 지정되어야 해요. | String | | CertResource | SDS 리소스 이름을 지정해요. Consul은 SDS 서비스에서 인증서를 가져올 때 SDS 리소스 이름을 요청해요. 설정되면 리스너별 TLS 구성이 SDS 구성을 재정의하지 않는 한 Consul은 TLS를 통해 모든 리스너에 인증서를 제공해요. | String |

Defaults

업스트림 서비스를 연결하기 위한 기본 구성을 지정해요.

값

Defaults.MaxConnections

서비스 인스턴스가 업스트림에 대해 설정할 수 있는 최대 HTTP/1.1 연결 수를 지정해요.

값

  • 기본값은 0이며, 이는 Consul이 프록시 구성을 사용하도록 지시해요. Envoy의 경우 기본값은 1024예요.
  • 데이터 타입: Integer

Defaults.MaxPendingRequests

연결을 설정하는 동안 대기열에 들어갈 수 있는 최대 요청 수를 지정해요. 이 구성이 적용되려면 리스너가 L7 프로토콜을 사용해야 해요. Listeners.Protocol을 참조하세요.

값

  • 기본값은 0이며, 이는 Consul이 프록시 구성을 사용하도록 지시해요. Envoy의 경우 기본값은 1024예요.
  • 데이터 타입: Integer

Defaults.MaxConcurrentRequests

한 시점에 허용되는 최대 동시 HTTP/2 트래픽 요청 수를 지정해요. 이 구성이 적용되려면 리스너가 L7 프로토콜을 사용해야 해요. Listeners.Protocol을 참조하세요.

값

  • 기본값은 0이며, 이는 Consul이 프록시 구성을 사용하도록 지시해요. Envoy의 경우 기본값은 1024예요.
  • 데이터 타입: Integer

Defaults.PassiveHealthCheck

수동(passive) 헬스 체크 구성을 정의해요. 수동 헬스 체크는 호스트가 연결할 수 없거나 오류를 반환할 때 업스트림 클러스터에서 그 호스트를 제거해요.

값

  • 기본값: 없음
  • 데이터 타입: Map

다음 표는 수동 헬스 체크 구성을 설명해요.

| Parameter | Description | Data type | Default | | Interval | 체크 사이의 시간을 지정해요. | string | 0s | | MaxFailures | 체크 구간당 허용되는 연속 실패 수를 지정해요. 초과하면 Consul은 호스트를 로드 밸런서에서 제거해요. | integer | 0 | | EnforcingConsecutive5xx | Consul이 이상(outlier) 상태를 감지할 때 100번 중 몇 번 호스트를 축출(eject)하는지를 나타내는 백분율을 지정해요. 이상 상태는 500-599 응답 범위의 연속 오류로 결정돼요. | integer | 100 | | MaxEjectionPercent | 프록시가 이상을 보고할 때 Consul이 축출하는 업스트림 클러스터의 최대 백분율을 지정해요. Consul은 값과 관계없이 이상이 감지되면 최소 하나의 호스트를 축출해요. | integer | 10 | | BaseEjectionTime | 축출된 호스트가 재합류 전에 클러스터 밖에 있어야 하는 최소 시간을 지정해요. 실제 시간은 BaseEjectionTime 값에 호스트가 축출된 횟수를 곱한 값과 같아요. | string | 30s |

Listeners[]

게이트웨이에 대한 메시의 리스너 목록을 지정해요. 리스너는 포트 번호로 고유하게 식별돼요.

값

Listeners[].Port

리스너가 트래픽을 수신하는 포트를 지정해요. 이 포트는 게이트웨이를 시작할 때 -address 플래그에 지정된 IP 주소에 바인딩돼요. 리스너 포트는 헬스 체크 포트와 충돌해서는 안 돼요.

값

  • 기본값: 0
  • 데이터 타입: Integer

Listeners[].Protocol

리스너와 연결된 프로토콜을 지정해요. L7 네트워크 관리 기능을 활성화하려면 다음 값 중 하나를 지정하세요:

값

  • 기본값: tcp
  • 데이터 타입: 다음 값 중 하나를 포함하는 String: tcp, http, http2, grpc

Listeners[].Services[]

리스너가 메시 외부의 서비스에 노출하는 서비스 목록을 지정해요. 각 서비스는 고유한 이름을 가져야 해요. Namespace 필드는 Consul Enterprise 데이터센터에 필수예요. Listeners.Protocol 필드가 tcp로 설정되면 Consul은 하나의 서비스만 노출할 수 있어요. 리스너가 다른 지원 프로토콜을 사용하면 여러 서비스를 노출할 수 있어요.

값

Listeners[].Services[].Name

리스너에 노출할 서비스의 이름을 지정해요. 서비스는 다음 방법으로 지정할 수 있어요:

  • Consul 카탈로그에 등록된 서비스의 이름을 제공하세요.
  • 다른 구성 항목에 정의된 서비스의 이름을 제공하세요. 추가 정보는 Service Mesh Traffic Management 개요를 참조하세요.
  • 데이터센터의 모든 서비스를 노출하려면 * 와일드카드를 제공하세요. TCP용으로 구성된 리스너에는 와일드카드가 지원되지 않아요. 추가 정보는 Listeners[].Protocol을 참조하세요.

값

  • 기본값: 없음
  • 데이터 타입: String

Listeners[].Services[].Namespace Enterprise

서비스의 위치를 확인할 때 사용할 네임스페이스를 지정해요.

값

  • 기본값: 현재 네임스페이스
  • 데이터 타입: String

Listeners[].Services[].Partition Enterprise

서비스의 위치를 확인할 때 사용할 admin partition을 지정해요.

값

  • 기본값: 현재 파티션
  • 데이터 타입: String

Listeners[].Services[].Hosts[]

리스닝 서비스가 요청을 수신할 수 있는 하나 이상의 호스트를 지정해요. 외부 요청이 이 필드에 지정된 호스트와 일치하는 host 헤더를 포함할 때 ingress gateway는 외부 트래픽을 지정된 서비스로 프록시해요.

지정하지 않으면 Consul은 <service>.ingress.* 도메인을 사용해 서비스를 요청과 매칭해요. TCP를 통해 통신하는 리스너에는 호스트를 지정할 수 없어요. 서비스 이름이 * 와일드카드로 지정된 경우 호스트를 지정할 수 없어요. Consul이 서비스로 트래픽을 프록시하려면 요청에 올바른 호스트가 포함되어야 해요.

TLS가 비활성화된 경우 * 와일드카드를 사용해 모든 호스트와 매칭할 수 있어요. TLS를 비활성화하는 것은 테스트 및 학습 목적으로 적합할 수 있지만, 프로덕션 환경에서는 TLS를 활성화하는 것을 권장해요.

가장 왼쪽 DNS 레이블에 와일드카드를 사용해 호스트 집합과 매칭할 수 있어요. 예를 들어 *.example.com은 유효하지만, example.*와 *-suffix.example.com은 유효하지 않아요.

값

  • 기본값: 없음
  • 데이터 타입: String 목록 또는 *

Listeners[].Services[].RequestHeaders

게이트웨이를 통해 라우팅된 요청에 적용되는 HTTP 전용 헤더 수정 규칙 집합을 지정해요. 리스너 프로토콜이 tcp로 설정된 경우 요청 헤더를 구성할 수 없어요. 예제 구성은 HTTP 리스너와 경로 기반 라우팅을 참조하세요.

값

  • 기본값: 없음
  • 데이터 타입: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 Object: Add: 하나 이상의 키-값 쌍으로 구성된 Map, Set: 하나 이상의 키-값 쌍으로 구성된 Map, Remove: 하나 이상의 키-값 쌍으로 구성된 Map

다음 표는 요청 헤더 값을 구성하는 방법을 설명해요.

| Rule | Description | Data type | | Add | 헤더에 추가할 키-값 쌍 집합을 정의해요. 헤더 이름을 키로 사용하세요. 헤더 이름은 대소문자를 구분하지 않아요. 같은 이름의 헤더 값이 이미 존재하면 값이 추가되고 Consul은 두 헤더를 모두 적용해요. 변수 자리표시자를 사용할 수 있어요. | Map of strings | | Set | 요청 헤더에 추가하거나 기존 헤더 값을 대체할 키-값 쌍 집합을 정의해요. 헤더 이름을 키로 사용하세요. 헤더 이름은 대소문자를 구분하지 않아요. 같은 이름의 헤더 값이 이미 존재하면 Consul은 헤더 값을 대체해요. 변수 자리표시자를 사용할 수 있어요. | Map of strings | | Remove | 제거할 헤더 목록을 정의해요. Consul은 정확히 일치하는 헤더만 제거해요. 헤더 이름은 대소문자를 구분하지 않아요. | List of strings |

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

Add와 Set의 경우, 서비스가 프록시로 Envoy를 사용하도록 구성된 경우 값에 동적 메타데이터를 값에 보간할 변수가 포함될 수 있어요. 예를 들어 구성 항목에서 %DOWNSTREAM_REMOTE_ADDRESS% 변수를 사용하면 런타임에 생성되는 값을 전달할 수 있어요.

Listeners[].Services[].ResponseHeaders

게이트웨이를 통해 라우팅된 응답에 적용되는 HTTP 전용 헤더 수정 규칙 집합을 지정해요. 리스너 프로토콜이 tcp로 설정된 경우 응답 헤더를 구성할 수 없어요. 예제 구성은 HTTP 리스너와 경로 기반 라우팅을 참조하세요.

값

  • 기본값: 없음
  • 데이터 타입: 헤더 수정 규칙을 정의하는 하나 이상의 필드를 포함하는 Map: Add: 하나 이상의 키-값 쌍으로 구성된 Map, Set: 하나 이상의 키-값 쌍으로 구성된 Map, Remove: 하나 이상의 키-값 쌍으로 구성된 Map

다음 표는 요청 헤더 값을 구성하는 방법을 설명해요.

| Rule | Description | Data type | | Add | 헤더에 추가할 키-값 쌍 집합을 정의해요. 헤더 이름을 키로 사용하세요. 헤더 이름은 대소문자를 구분하지 않아요. 같은 이름의 헤더 값이 이미 존재하면 값이 추가되고 Consul은 두 헤더를 모두 적용해요. 변수 자리표시자를 사용할 수 있어요. | Map of strings | | Set | 응답 헤더에 추가하거나 기존 헤더 값을 대체할 키-값 쌍 집합을 정의해요. 헤더 이름을 키로 사용하세요. 헤더 이름은 대소문자를 구분하지 않아요. 같은 이름의 헤더 값이 이미 존재하면 Consul은 헤더 값을 대체해요. 변수 자리표시자를 사용할 수 있어요. | Map of strings | | Remove | 제거할 헤더 목록을 정의해요. Consul은 정확히 일치하는 헤더만 제거해요. 헤더 이름은 대소문자를 구분하지 않아요. | List of strings |

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

Add와 Set의 경우, 서비스가 프록시로 Envoy를 사용하도록 구성된 경우 값에 동적 메타데이터를 값에 보간할 변수가 포함될 수 있어요. 예를 들어 구성 항목에서 %DOWNSTREAM_REMOTE_ADDRESS% 변수를 사용하면 런타임에 생성되는 값을 전달할 수 있어요.

Listeners[].Services[].TLS

특정 서비스에 대한 TLS 구성을 지정해요. 이 구성의 설정은 구성 항목의 기본 TLS 설정을 재정의해요.

값

  • 기본값: 없음
  • 데이터 타입: Map

Listeners[].Services[].TLS.SDS

외부 SDS에서 TLS 인증서를 로드하도록 리스너를 구성하는 매개변수를 지정해요. 추가 정보는 외부 서비스에서 사용자 지정 TLS 인증서 제공을 참조하세요.

이 구성은 구성 항목의 기본 TLS.SDS 설정을 재정의해요. 지정하지 않으면 Consul은 최상위 TLS.SDS 설정을 적용해요.

값

다음 표는 SDS 매개변수를 구성하는 방법을 설명해요. 사용 정보는 정적 SDS 클러스터 구성을 참조하세요.

| Parameter | Description | Data type | | ClusterName | Consul이 인증서를 검색해야 하는 SDS 클러스터의 이름을 지정해요. 클러스터는 게이트웨이의 부트스트랩 구성에 지정되어야 해요. | String | | CertResource | SDS 리소스 이름을 지정해요. Consul은 SDS 서비스에서 인증서를 가져올 때 SDS 리소스 이름을 요청해요. 설정되면 리스너별 TLS 구성이 SDS 구성을 재정의하지 않는 한 Consul은 TLS를 통해 모든 리스너에 인증서를 제공해요. | String |

Listeners[].Services[].MaxConnections

서비스 인스턴스가 업스트림에 대해 설정할 수 있는 최대 HTTP/1.1 연결 수를 지정해요.

정의되면 이 필드는 Defaults.MaxConnections 구성을 재정의해요.

값

  • 기본값: 없음
  • 데이터 타입: Integer

Listeners[].Services.MaxPendingRequests

연결을 설정하는 동안 대기열에 들어갈 수 있는 최대 요청 수를 지정해요. 정의되면 이 필드는 구성 항목의 Defaults.MaxPendingRequests 필드에 지정된 값을 재정의해요.

이 구성이 적용되려면 리스너가 L7 프로토콜을 사용해야 해요. 더 자세한 내용은 Listeners.Protocol을 참조하세요.

값

  • 기본값: 없음
  • 데이터 타입: Integer

Listeners[].Services[].MaxConcurrentRequests

한 시점에 서비스가 허용하는 최대 동시 HTTP/2 트래픽 요청 수를 지정해요. 이 필드는 구성 항목의 Defaults.MaxConcurrentRequests 필드에 설정된 값을 재정의해요.

이 구성이 적용되려면 리스너가 L7 프로토콜을 사용해야 해요. 더 자세한 내용은 Listeners.Protocol을 참조하세요.

값

  • 기본값: 없음
  • 데이터 타입: Integer

Listeners[].Services[].PassiveHealthCheck

서비스에 대한 수동 헬스 체크 구성을 정의해요. 수동 헬스 체크는 서비스를 연결할 수 없거나 오류를 반환할 때 업스트림 클러스터에서 호스트를 제거해요. 이 필드는 구성 항목의 Defaults.PassiveHealthCheck 필드에 설정된 값을 재정의해요.

값

  • 기본값: 없음
  • 데이터 타입: Map

다음 표는 수동 헬스 체크 구성을 설명해요.

| Parameter | Description | Data type | Default | | Interval | 체크 사이의 시간을 지정해요. | string | 0s | | MaxFailures | 체크 구간당 허용되는 연속 실패 수를 지정해요. 초과하면 Consul은 호스트를 로드 밸런서에서 제거해요. | integer | 0 | | EnforcingConsecutive5xx | Consul이 이상(outlier) 상태를 감지할 때 100번 중 몇 번 호스트를 축출(eject)하는지를 나타내는 백분율을 지정해요. 이상 상태는 500-599 응답 범위의 연속 오류로 결정돼요. | integer | 100 | | MaxEjectionPercent | 프록시가 이상을 보고할 때 Consul이 축출하는 업스트림 클러스터의 최대 백분율을 지정해요. Consul은 값과 관계없이 이상이 감지되면 최소 하나의 호스트를 축출해요. | integer | 10 | | BaseEjectionTime | 축출된 호스트가 재합류 전에 클러스터 밖에 있어야 하는 최소 시간을 지정해요. 실제 시간은 BaseEjectionTime 값에 호스트가 축출된 횟수를 곱한 값과 같아요. | string | 30s |

Listeners[].TLS

리스너에 대한 TLS 구성을 지정해요. 지정하지 않으면 Consul은 서비스별 TLS 구성을 적용해요. 리스너별 및 서비스별 TLS 구성이 모두 지정되지 않으면 Consul은 구성 항목의 기본 TLS 설정을 적용해요.

값

Listeners[].TLS.Enabled

리스너에 대한 내장 TLS를 활성화하려면 true로 설정하세요. 활성화하면 Consul은 각 서비스의 Hosts 필드에 정의된 각 호스트를 게이트웨이의 x509 인증서에 DNS 주체 대체 이름(SAN)으로 추가해요.

값

  • 기본값: false
  • 데이터 타입: boolean

Listeners[].TLS.TLSMinVersion

리스너에서 지원하는 최소 TLS 버전을 지정해요.

값

  • 기본값: Envoy 버전에 따라 다름: Envoy v1.22.0 이상: TLSv1_2, 이전 버전: TLSv1_0
  • 데이터 타입: 다음 값 중 하나를 가진 String: TLS_AUTO, TLSv1_0, TLSv1_1, TLSv1_2, TLSv1_3

Listeners[].TLS.TLSMaxVersion

리스너에서 지원하는 최대 TLS 버전을 지정해요.

값

  • 기본값: Envoy 버전에 따라 다름: Envoy v1.22.0 이상: TLSv1_2, 이전 버전: TLSv1_0
  • 데이터 타입: 다음 값 중 하나를 가진 String: TLS_AUTO, TLSv1_0, TLSv1_1, TLSv1_2, TLSv1_3

Listeners[].TLS.CipherSuites

TLS 1.2 이하를 사용해 연결을 협상할 때 리스너가 지원하는 cipher suite 목록을 지정해요. 지정하지 않으면 Consul은 사용 중인 Envoy 버전의 기본값을 적용해요. 자세한 내용은 Envoy 문서를 참조하세요.

값

  • 기본값: 없음
  • 데이터 타입: String 값 목록. 지원되는 cipher 목록은 Consul 저장소를 참조하세요.

Listeners[].TLS.SDS

외부 SDS 서비스에서 TLS 인증서를 로드하기 위한 매개변수를 지정해요. 추가 정보는 외부 서비스에서 사용자 지정 TLS 인증서 제공을 참조하세요.

Consul은 이 필드에 지정된 SDS 구성을 리스너의 모든 서비스에 적용해요. 각 서비스에 대해 Listeners.Services.TLS.SDS 설정을 구성해 Listeners.TLS.SDS 구성을 서비스별로 재정의할 수 있어요.

값

  • 기본값: 없음
  • 데이터 타입: ClusterName과 CertResource 필드를 포함하는 map이에요.

다음 표는 SDS 매개변수를 구성하는 방법을 설명해요. 사용 정보는 정적 SDS 클러스터 구성을 참조하세요.

| Parameter | Description | Data type | | ClusterName | Consul이 인증서를 검색해야 하는 SDS 클러스터의 이름을 지정해요. 클러스터는 게이트웨이의 부트스트랩 구성에 지정되어야 해요. | String | | CertResource | SDS 리소스 이름을 지정해요. Consul은 SDS 서비스에서 인증서를 가져올 때 SDS 리소스 이름을 요청해요. 설정되면 리스너별 TLS 구성이 SDS 구성을 재정의하지 않는 한 Consul은 TLS를 통해 모든 리스너에 인증서를 제공해요. | String |

예제 (Examples)

일반적인 ingress gateway 구성 패턴에 대해 다음 예제를 참조하세요:

TCP 리스너 정의 (Define a TCP listener)

다음 예제는 us-east-ingress라는 ingress gateway에 TCP 리스너를 설정해 db 서비스로 트래픽을 프록시해요. Consul Enterprise의 경우 db 서비스는 team-frontend admin partition의 default 네임스페이스 안에서만 트래픽을 수신할 수 있어요:

Consul CE

Kind = "ingress-gateway"
Name = "us-east-ingress"

Listeners = [
  {
    Port     = 3456
    Protocol = "tcp"
    Services = [
      {
        Name = "db"
      }
    ]
  }
]

Consul Enterprise

Kind = "ingress-gateway"
Name = "us-east-ingress"
Namespace = "default"
Partition = "team-frontend"

Listeners = [
  {
    Port     = 3456
    Protocol = "tcp"
    Services = [
      {
        Namespace = "ops"
        Name = "db"
      }
    ]
  }
]

와일드카드를 사용해 HTTP 리스너 정의 (Use wildcards to define an HTTP listener)

다음 예제 게이트웨이는 us-east-ingress라는 이름이고 두 개의 리스너를 정의해요. 첫 번째 리스너는 포트 8080에서 수신하도록 구성되고 와일드카드(*)를 사용해 데이터센터의 모든 서비스로 트래픽을 프록시해요. 두 번째 리스너는 사용자가 제공한 호스트의 포트 4567에서 api와 web 서비스를 노출해요.

모든 리스너에서 TLS가 활성화돼 있어요. 각 업스트림 클러스터에 대한 ingress gateway 프록시의 max_connections은 4096으로 설정돼 있어요.

Consul Enterprise 버전은 다음과 같은 추가 구성을 구현해요:

  • ingress gateway는 default 네임스페이스에 설정되고 frontend 네임스페이스의 모든 서비스로 트래픽을 프록시해요.
  • api와 web 서비스는 팀별 admin partitions으로 프록시돼요:

Consul CE

Kind = "ingress-gateway"
Name = "us-east-ingress"

TLS {
  Enabled = true
}

Defaults {
  MaxConnections = 4096
}

Listeners = [
  {
    Port     = 8080
    Protocol = "http"
    Services = [
      {
        Name = "*"
      }
    ]
  },
  {
    Port     = 4567
    Protocol = "http"
    Services = [
      {
        Name  = "api"
        Hosts = ["foo.example.com"]
      },
      {
        Name  = "web"
        Hosts = ["website.example.com"]
      }
    ]
  }
]

Consul Enterprise

Kind = "ingress-gateway"
Name = "us-east-ingress"
Namespace = "default"

TLS {
  Enabled = true
}

Listeners = [
  {
    Port     = 8080
    Protocol = "http"
    Services = [
      {
        Namespace = "frontend"
        Name = "*"
      }
    ]
  },
  {
    Port     = 4567
    Protocol = "http"
    Services = [
      {
        Namespace = "frontend"
        Name  = "api"
        Hosts = ["foo.example.com"]
        Partition = "api-team"
      },
      {
        Namespace = "frontend"
        Name  = "web"
        Hosts = ["website.example.com"]
        Partition = "web-team"
      }
    ]
  }
]

더 알아보기 (Learn more)