Consul 서비스 메시 사용하기

Consul 서비스 메시 사용하기

이 페이지는 노마드와 함께 Consul 서비스 메시(service mesh)를 사용해 워크로드를 안전하게 연결하고 격리하는 방법에 대한 정보를 제공해요. 서비스 메시를 사용하는 예시 작업 구성을 검토하고, Envoy 프록시 및 mesh, ingress, terminating 게이트웨이에 대해 배워요.

출처: 문서

본문

소개

서비스 메시는 워크로드를 직접 연결하기 위해 인프라를 배포하고 구성하는 네트워킹 패턴이에요. 배포되는 가장 흔한 인프라 중 하나는 사이드카 프록시(sidecar proxy)예요. 이 프록시는 보통 기본 워크로드와 나란히 격리된 네트워크 네임스페이스에서 실행되어 모든 네트워크 트래픽이 프록시를 통해 흐르게 해요.

프록시는 데이터를 이동시키는 책임이 있으므로 종종 데이터 플레인(data plane)이라고 불려요. 반면 프록시를 구성하는 구성 요소들은 데이터의 흐름을 제어하는 책임이 있으므로 컨트롤 플레인(control plane)의 일부예요.

공통 인프라 계층으로 트래픽을 모음으로써 컨트롤 플레인은 모든 프록시에 구성을 중앙화하고 자동 적용해, 자동 트래픽 암호화, 세밀한 라우팅, 서비스 기반 접근 제어 권한 같은 기능을 전체 메시에 걸쳐 활성화할 수 있어요.

Consul 서비스 메시

노마드는 서비스 메시 기능을 제공하기 위해 Consul과 네이티브 통합돼요. connect 블록은 모든 서비스 메시 구성의 진입점이에요. 노마드는 sidecar_service 블록이 있는 모든 할당에 사이드카 프록시 작업을 자동으로 배포해요. 모든 인바운드 외부 트래픽은 사이드카가 처리해요.

이 프록시 작업은 서비스를 메시에 노출하는 책임이 있으며, 할당 내에서 다른 서비스에 접근하는 데에도 사용할 수 있어요. 이 외부 서비스들은 upstream이라고 불리며 upstreams 블록으로 선언돼요.

Consul 서비스 메시는 기능하려면 네트워크 격리가 필요하므로 작업 그룹의 network mode를 bridge 또는 적절히 구성된 cni/* 네트워크로 설정해야 해요.

⚠️ 워크로드를 완전히 격리하려면 루프백 인터페이스에만 바인딩해야 해요.

아래 작업은 api라는 서비스를 메시에 노출해요:

job "..."  {
  # ...
  group "..." {
    network {
      mode = "bridge"

      port "http" {}
    }

    service {
      name = "api"
      port = "http"

      connect {
        sidecar_service {}
      }
    }
    # ...
  }
}

이 서비스에 접근하려면 작업을 다음과 같이 구성할 수 있어요:

job "..." {
  # ...
  group "..." {
    network {
      mode = "bridge"
      # ...
    }

    service {
      # ...
      connect {
        sidecar_service {
          proxy {
            upstreams {
              destination_name = "api"
              local_bind_port  = 8080
            }
          }
        }
      }
    }
  }
}

이 작업의 할당 내 작업에서 시작되는 요청은 다음 경로를 따릅니다:

  • 작업은 프록시가 api 서비스를 upstream으로 바인딩하는 포트인 localhost:8080으로 요청을 보내요.
  • Consul이 구성한 프록시는 api 서비스의 일부인 할당 내에서 실행되는 프록시로 요청을 전달해요.
  • api 서비스의 프록시는 요청을 할당의 로컬 포트로 전달해요.
  • 응답은 같은 경로를 역방향으로 따라 첫 번째 작업으로 돌아가요.

upstream에 연결하는 데 사용할 IP와 포트는 NOMAD_UPSTREAM_ADDR_<upstream> 환경 변수에서도 읽을 수 있어요.

Envoy 프록시

Consul 서비스 메시는 프록시로 Envoy를 사용해요. 노마드는 초기 프록시 구성을 생성하기 위해 Consul의 consul connect envoy -bootstrap CLI 명령을 호출해요.

노마드는 Envoy 프록시를 실행하기 위해 prestart 사이드카 Docker 작업을 주입해요. 이 작업은 sidecar_task 블록으로 사용자 정의할 수 있어요.

게이트웨이 (Gateways)

메시는 선택된 서비스만 참여할 수 있는 폐쇄 경계를 정의하므로, 메시 전반 연결에 사용할 수 있는 gameway라는 특수 프록시가 있어요. 노마드는 gateway 블록으로 이 게이트웨이들을 배포할 수 있어요. 노마드는 게이트웨이 서비스가 있는 그룹에 Envoy 프록시 작업을 주입해요.

Consul 서비스 메시가 제공하는 게이트웨이 유형은 다음과 같아요:

  • Mesh 게이트웨이 — 서로 다른 서비스 메시 간의 통신을 허용하며 mesh 파라미터로 배포돼요.
  • Ingress 게이트웨이 — 메시 밖의 서비스가 메시 안의 서비스에 연결할 수 있게 하며 ingress 파라미터로 배포돼요.
  • Egress 게이트웨이 — 메시 안의 서비스가 메시 밖의 서비스와 통신할 수 있게 하며 terminating 파라미터로 배포돼요.

추가 리소스

  • Consul Service Mesh documentation
  • Nomad Consul Service Mesh integration

더 알아보기 (Learn more)