서비스 인텐션 생성

서비스 인텐션 생성 (Create Intentions)

서비스 메시에서 서비스 간 접근을 제어하는 구성인 서비스 인텐션을 만들고 관리하는 방법을 설명하는 문서예요. API, CLI, UI로 생성할 수 있어요.

출처: 문서

본문

이 페이지는 서비스 메시에서 서비스 간 접근을 제어하는 구성인 서비스 인텐션을 만들고 관리하는 방법을 설명합니다.

개요 (Overview)

Consul API, CLI 또는 UI를 사용해 단일 인텐션을 만들거나 일괄 생성할 수 있습니다. 또한 메시의 모든 서비스에 대한 기본 인텐션을 설정하는 서비스 인텐션 구성 항목을 정의할 수 있습니다. 인텐션에 대한 배경 정보는 Service intentions overview를 참조하세요.

요구 사항 (Requirements)

  • 데이터센터에 최소 두 개의 서비스가 등록되어 있어야 합니다.
  • L4 인텐션을 강제하려면 TLS가 활성화되어야 합니다. 자세한 내용은 Encryption을 참조하세요.

ACL 요구 사항 (ACL requirements)

Consul은 인텐션 생성 및 관리 권한을 소스가 아니라 대상(destination) 기준으로 부여합니다. ACL이 활성화되면 서비스와 운영자는 대상 서비스에 대한 읽기 및 쓰기 권한을 부여하는 정책에 연결된 토큰을 제시해야 합니다.

Consul은 대상 서비스가 service:read 또는 service:write 권한으로 구성될 때 대상 서비스에 intentions:read 권한을 암시적으로 부여합니다. 이는 서비스가 서비스 메시에 조인하려고 할 때 인바운드 연결을 허용하거나 거부할 수 있게 하기 위해서입니다. 인텐션용 ACL 구성에 대한 자세한 내용은 Service rules를 참조하세요.

기본 ACL 정책 구성이 인텐션의 기본 동작을 결정합니다. 정책이 deny로 설정되면 모든 연결 또는 요청이 거부되며 명시적으로 활성화해야 합니다. 자세한 내용은 default_policy를 참조하세요.

인텐션 생성 (Create an intention)

Consul API, CLI 또는 UI를 사용해 인텐션을 한 번에 하나씩 만들고 관리할 수 있습니다. 단일 인텐션에 하나 또는 여러 개의 대상을 지정할 수 있습니다.

API

/connect/intentions/exact HTTP API 엔드포인트에 PUT 요청을 보내고 다음 쿼리 매개변수를 지정하세요:

  • source: 요청을 보내는 서비스
  • destination: 요청에 응답하는 서비스
  • ns: 대상 서비스의 네임스페이스 (Enterprise)

L4 인텐션의 경우 요청 페이로드에 인텐션 동작도 지정해야 합니다.

다음 예시는 web이 db에 요청을 보낼 수 있게 하는 인텐션을 만듭니다:

$ curl --request PUT \
--data ' { "Action": "allow" } ' \
http://localhost:8500/v1/connect/intentions/exact\?source\=web\&destination\=db

요청 페이로드 매개변수에 대한 추가 정보는 /connect/intentions/exact HTTP API 엔드포인트 문서를 참조하세요.

L7 인텐션의 경우 요청 페이로드에 Permissions를 지정해 인텐션을 동적으로 강제하기 위한 속성을 구성합니다. 다음 예시 페이로드에서 Consul은 요청 본문이 비어 있으면 HTTP GET 요청을 허용합니다:

{
   "Permissions": [
   {
      "Action": "allow",
      "HTTP": {
         "Methods": ["GET"],
         "Header": [
           {
              "Name": "Content-Length",
      "Exact": "0"
           }
         ]
      }
    }
  ]
}

Permissions 객체는 L7 트래픽 소스에 대한 권한 목록을 지정합니다. 목록에는 하나 이상의 동작과 각 동작에 대한 일치 기준 세트가 포함됩니다. 구성 세부 사항은 서비스 인텐션 구성 항목 참조의 Sources[].Permissions[] 매개변수를 참조하세요.

인텐션을 적용하려면 엔드포인트를 호출하고 속성이 포함된 구성 파일을 엔드포인트에 전달합니다:

$ curl --request PUT \
--data @payload.json \
http://localhost:8500/v1/connect/intentions/exact\?source\=svc1\&destination\=sv2

CLI

다음 구문에 따라 consul intention create 명령을 사용해 새 인텐션을 만듭니다:

$ consul intention create -<action> <source> <destination>

다음 예시는 web 서비스 인스턴스가 db 서비스 인스턴스에 연결할 수 있게 하는 인텐션을 만듭니다:

$ consul intention create -allow web db

별표(*) 와일드카드를 사용해 여러 대상 서비스를 지정할 수 있습니다. 자세한 내용은 Precedence and match order를 참조하세요.

Consul UI

  1. Consul UI에 로그인하고 사이드바 메뉴에서 Services를 선택합니다.
  2. 서비스를 클릭한 다음 Intentions* 탭을 클릭합니다.
  3. Create를 클릭하고 드롭다운 메뉴에서 소스 서비스를 선택합니다.
  4. 선택적 설명을 추가할 수 있습니다.
  5. 다음 옵션 중 하나를 선택합니다:
    • Allow: 소스 서비스가 대상에 요청을 보낼 수 있게 합니다.
    • Deny: 소스 서비스가 대상에 요청을 보내는 것을 방지합니다.
    • Application Aware: 인텐션을 동적으로 강제하기 위한 L7 기준을 지정할 수 있게 합니다. 자세한 내용은 Configure application aware settings를 참조하세요.
  6. Save를 클릭합니다. 필요에 따라 절차를 반복해 추가 인텐션을 만들 수 있습니다.
애플리케이션 인식 설정 구성 (Configure application aware settings)

Consul UI를 사용해 L7 권한을 구성할 수 있습니다.

  1. Add permission을 클릭해 권한 편집기를 엽니다.
  2. Allow 또는 Deny 옵션을 활성화합니다.
  3. 일치할 경로, 요청 방법, 요청 헤더를 지정할 수 있습니다. Consul이 권한을 강제하려면 모든 기준이 충족되어야 합니다. 사용 가능한 구성 필드에 대한 정보는 서비스 인텐션 구성 항목 참조의 Sources[].Permissions[] 매개변수를 참조하세요.
  4. Save를 클릭합니다. 필요에 따라 절차를 반복해 추가 권한을 만들 수 있습니다.

여러 인텐션 생성 (Create multiple intentions)

서비스 인텐션 구성 항목을 만들어 서비스 메시에 대한 기본 인텐션을 지정할 수 있습니다. L4 또는 L7 애플리케이션 인식 트래픽에 대한 기본 설정을 지정할 수 있습니다.

서비스 인텐션 구성 항목 정의 (Define a service intention configuration entry)

다음 필드를 구성하세요:

  • Kind: 구성 항목의 유형을 선언합니다. service-intentions로 설정해야 합니다.
  • Name: 구성 항목에 정의된 인텐션의 대상 서비스 이름을 지정합니다. 와일드카드 문자(*)를 사용해 특정 인텐션으로 보호되지 않는 모든 서비스에 대한 L4 인텐션을 설정할 수 있습니다. 와일드카드는 L7 인텐션에서 지원되지 않습니다.
  • Sources: 모든 인텐션 소스와 해당 소스에 부여된 승인의 순서 없는 목록을 지정합니다. Consul은 목록을 인텐션 우선 순위로 정렬한 역순으로 저장하고 평가합니다.
  • Sources.Action 또는 Sources.Permissions: L4 인텐션의 경우 Action 필드를 "allow" 또는 "deny"로 설정해 소스 서비스와 일치하는 인텐션을 Consul이 강제하도록 합니다. L7 인텐션의 경우 Permissions 설정을 구성합니다. 이는 들어오는 요청을 동적으로 일치시키기 위한 애플리케이션 인식 속성 세트를 정의합니다. Action과 Permissions 설정은 상호 배타적입니다.

서비스 인텐션 구성 항목 참조 문서에서 모든 구성 옵션에 대한 세부 사항을 확인하세요.

예시 서비스 인텐션 구성은 example service intentions configurations를 참조하세요.

다른 구성 항목과의 상호작용 (Interaction with other configuration entries)

구성 항목에 정의된 L7 인텐션은 해당하는 서비스 기본 구성 항목 또는 전역 프록시 기본 구성 항목에 정의된 HTTP 기반 프로토콜로 구성된 대상 서비스로 제한됩니다.

서비스 인텐션 구성 항목 적용 (Apply the service intentions configuration entry)

consul config 명령을 사용하거나 /config API 엔드포인트를 호출해 구성 항목을 적용할 수 있습니다. Kubernetes 환경에서는 ServiceIntentions 커스텀 리소스 정의(CRD)를 적용해 Consul 구성 항목을 구현하고 관리합니다.

구성 항목 적용에 대한 자세한 내용은 다음 주제를 참조하세요:

더 알아보기 (Learn more)