서비스 메시 의도

서비스 메시 의도 (Service Mesh Intentions)

의도(intentions)는 Consul 서비스 메시의 서비스 간 트래픽 통신을 제어하는 메커니즘이에요. 이 문서에서 L4·L7 트래픽 의도, 워크플로, 우선순위와 일치 순서, 기본 동작을 설명할게요.

출처: 문서

본문

이 문서는 Consul 서비스 메시의 서비스 간 트래픽 통신을 제어하는 메커니즘인 Consul 의도에 대한 개요 정보를 제공합니다.

의도 유형 (Intention types)

의도는 네트워크 계층(즉 L4 트래픽) 또는 애플리케이션 계층(즉 L7 트래픽)에서 서비스 간 트래픽 통신을 제어합니다. 대상 서비스가 트래픽을 보내고 받는 데 사용하는 프로토콜이 의도가 시행할 수 있는 승인 유형을 결정합니다.

L4 트래픽 의도 (L4 traffic intentions)

대상 서비스가 TCP 또는 HTTP 기반이 아닌 프로토콜을 사용한다면 의도는 mTLS 인증서에 인코딩된 아이덴티티를 기반으로 트래픽을 제어할 수 있습니다. 자세한 내용은 상호 전송 계층 보안 (mTLS)을 참조하세요.

이 구현은 서비스 쌍 사이의 광범위한 전부-또는-전무(all-or-nothing) 접근 제어를 허용합니다. 유일한 요구 사항은 서비스가 불투명(TCP) 연결을 감싸는 TLS 핸드셰이크를 인지하는 것입니다.

L7 트래픽 의도 (L7 traffic intentions)

대상 서비스가 HTTP 기반 프로토콜을 사용한다면 의도는 아이덴티티 기반 시행 외에도 애플리케이션 인식 요청 속성을 기반으로 접근을 시행하여 서비스 간 트래픽을 제어할 수 있습니다. 자세한 내용은 서비스 의도 구성 참조를 참조하세요.

워크플로 (Workflow)

Consul UI, API, 또는 CLI에서 의도를 수동으로 만들 수 있습니다. 또한 서비스 의도 구성 항목에서 트래픽 경로를 정의해 Consul이 의도를 동적으로 생성하도록 할 수도 있습니다. 자세한 내용은 의도 생성·관리를 참조하세요.

시행 (Enforcement)

프록시 또는 네이티브 통합 애플리케이션이 인바운드 연결 또는 요청에 의도를 시행합니다. 서비스 쌍 사이의 승인을 한 번에 하나의 의도만 제어할 수 있습니다.

L4 의도는 새 연결을 설정하는 능력을 중재합니다. 의도를 수정해도 기존 연결에는 효과가 없습니다. 결과적으로 연결을 allow에서 deny로 변경해도 연결이 끊어지지 않습니다.

L7 의도는 새 요청을 발행하는 능력을 중재합니다. 의도가 수정되면 수정 후 받은 요청은 최신 의도 규칙을 사용해 접근을 시행합니다. 연결을 allow에서 deny로 변경해도 연결이 끊어지지 않지만, 새 요청이 처리되는 것을 차단합니다.

캐싱 (Caching)

Consul 에이전트에 등록된 서비스에 대한 의도는 에이전트에 로컬로 캐시됩니다. 지원되는 프록시는 자체 구성에도 의도 데이터를 캐시하여 Consul 에이전트에 의존하지 않고 인바운드 연결이나 요청을 승인할 수 있습니다. 연결의 데이터 경로에서 모든 동작은 프록시 내에서 발생합니다.

업데이트 (Updates)

Consul은 에이전트가 사용하는 지속적인 블로킹 쿼리 덕분에 의도에 대한 업데이트를 거의 즉시 전파합니다. 블로킹 쿼리(blocking query) 는 잠재적 변경을 기다리기 위해 긴 폴링을 사용하는 Consul API 기능입니다. 자세한 내용은 Blocking Queries를 참조하세요. 프록시도 블로킹 쿼리를 사용해 로컬 구성을 빠르게 업데이트합니다.

모든 의도 데이터가 로컬로 캐시되므로, 에이전트가 Consul 서버에서 완전히 분리되거나 프록시가 로컬 Consul 에이전트에서 완전히 분리되어도 인바운드 연결에 대한 승인이 유지됩니다. 연결이 분리되면 연결이 복원될 때 Consul이 의도에 대한 변경을 자동으로 적용합니다.

의도 유지 관리 (Intention maintenance)

서비스는 대상 대상을 위한 모든 관련 의도를 검색하기 위해 주기적으로 의도 일치 API를 호출해야 합니다. TLS 클라이언트 인증서를 검증한 후 각 인바운드 연결이나 요청의 캐시된 의도가 수락할지 거부할지 결정합니다.

우선순위와 일치 순서 (Precedence and match order)

Consul은 서비스 의도 구성 항목에 정의된 기준을 처리해 인바운드 요청을 일치시킵니다. Consul이 일치 항목을 찾으면 구성 항목에 지정된 해당 동작을 적용합니다. 일치 기준에는 특정 HTTP 헤더, 요청 메서드 또는 기타 속성이 포함될 수 있습니다. 또한 정규식을 사용해 속성을 프로그래밍 방식으로 일치시킬 수 있습니다. 자세한 내용은 서비스 의도 구성 항목 참조를 참조하세요.

Consul은 다음 요소를 기반으로 일치 항목을 정렬합니다:

  • 구체성(Specificity): 속성을 직접 일치시키는 인바운드 요청이 가장 높은 우선순위를 가집니다. 예를 들어 POST 요청을 보내는 서비스의 트래픽을 거부하도록 구성된 의도는 와일드카드 값 *로 구성된 메서드의 트래픽을 허용하는 의도보다 우선합니다.
  • 승인(Authorization): Consul은 일치 기준이 동등하게 가중치가 부여되면 allow보다 deny를 선택합니다.

다음 표는 일치 우선순위를 내림차순으로 보여줍니다:

| 우선순위 (Precedence) | 소스 네임스페이스 (Source Namespace) | 소스 이름 (Source Name) | 대상 네임스페이스 (Destination Namespace) | 대상 이름 (Destination Name) | | 9 | Exact | Exact | Exact | Exact | | 8 | Exact | * | Exact | Exact | | 7 | * | * | Exact | Exact | | 6 | Exact | Exact | Exact | * | | 5 | Exact | * | Exact | * | | 4 | * | * | Exact | * | | 3 | Exact | Exact | * | * | | 2 | Exact | * | * | * | | 1 | * | * | * | * |

Consul은 일치 기준을 처리한 후 서비스 의도 구성 항목에 우선순위 값을 출력합니다. 이 값은 읽기 전용입니다. 자세한 내용은 Precedence를 참조하세요.

네임스페이스는 Enterprise 기능입니다. Consul CE에서 두 네임스페이스 필드 중 하나의 허용 값은 "default"뿐입니다. 표의 다른 행은 적용되지 않습니다.

의도 일치 API를 주기적으로 호출해 대상 대상을 위한 모든 관련 의도를 검색해야 합니다. TLS 클라이언트 인증서를 검증한 후 각 인바운드 연결/요청에 대해 캐시된 의도를 확인해 수락할지 거부할지 결정해야 합니다.

기본 의도 동작은 default_policy 구성에 의해 정의됩니다. 구성이 allow로 설정되면 메시의 모든 서비스 간 연결이 기본적으로 허용됩니다. deny로 설정되면 모든 연결 또는 요청이 기본적으로 거부됩니다.

더 알아보기 (Learn more)